Estoy buscando una posibilidad de recuperar ambos los nombres de los paquetes y los nombres comunes de las aplicaciones instaladas en un dispositivo Android a través de ADB - o al menos para recuperar el nombre común si se conoce el nombre del paquete. Una búsqueda rápida en nuestro sitio trajo dos preguntas relacionadas, pero no resuelven mi problema:
- ¿Cómo consigo el nombre común de una aplicación que tiene el nombre del paquete (como com.Android.blabla)? (línea de comandos o aplicación incluida) no funciona a través de ADB (pero utiliza una aplicación que tienes que buscar manualmente), coincidiendo con la solicitud de la OP
- ¿Cómo encontrar una aplicación basada en el nombre del paquete? sólo vuelve a una búsqueda de URL en Google Play que no siempre encaja (ya que no todas las aplicaciones están disponibles allí).
Estoy buscando una manera de recuperar la información directamente del dispositivo, si es posible - no de "cualquier" manera (incluyendo "búsquedas en la web" o "a través de una aplicación") como esas dos preguntas lo tienen.
Sé que hay múltiples herramientas disponibles para obtener los detalles del paquete:
-
adb dumpsys package
: Mientras que esto lista todos los paquetes con un montón de detalles, el "nombre común" no se muestra -
adb shell pm list
sólo da los nombres de los paquetes -
aapt
sería capaz de obtener el nombre común, pero requeriría tirar primero de la.apk
del dispositivo, lo cual no es realmente conveniente (y obviamente será bastante lento con muchas y/o grandes aplicaciones instaladas)
¿Me he perdido algo? Sé que la información debe estar en el dispositivo (¿de qué otra forma podría mostrar los nombres de las aplicaciones en la interfaz gráfica de usuario? Dudo que Android analice el .apk
cada vez que la GUI necesite el "nombre común"). Entonces, ¿hay alguna forma de conseguirlo, usando ADB directamente?
TL;DR
Antecedentes (si alguien tiene curiosidad): Quiero ser capaz de obtener rápidamente una lista de aplicaciones de usuario de cualquiera de mis dispositivos, sin tener que volver a la acrobacia. Una lista de sus nombres de paquetes que puedo recuperar usando adb shell pm list -3
pero como esos son sólo nombres de paquetes, reconocer las aplicaciones es un trabajo de adivinanzas. Así que si hubiera algún comando ADB para recuperar el nombre común de un determinado nombre de paquete, podría simplemente usar un bucle como for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done
- y obtener una lista de todas las aplicaciones de usuario instaladas en un "formato legible para los humanos" junto con los nombres de sus paquetes.
Casos de uso:
- Ver qué aplicaciones "superflojas" están instaladas (que podría eliminar)
- Listas de verificación cruzadas de múltiples dispositivos
- Documentación ;)
- y probablemente más (pero los tres anteriores son para lo que lo necesito)
0 votos
Sólo una idea (creo que ya lo has intentado). ¿Por qué no compilas aapt para Android y lo ejecutas desde el shell?
1 votos
@user3344236 Soy consciente de esa posibilidad; pero no siempre es una opción instalar algo al dispositivo en cuestión, especialmente no un binario autocompilado (a veces me entregan dispositivos que no están rooteados, y tengo que mantener "condiciones similares a las de los forenses", es decir, "no alterar el dispositivo, sólo explorarlo").
0 votos
Así que la segunda idea es escribir una herramienta que se ejecuta a través de adb shell ... sin utilizar adbd modificado en el dispositivo y sin empujar algunos archivos allí. Creo que le tomará algún tiempo para lograr esto (si alguna vez usted tiene éxito) :D
0 votos
@user3344236 demasiado preocupante, sobre todo porque no soy un dev de Android. Actualmente uso una "solución basada en la web" (similar a esa "búsqueda en Google Play"), ya que no parece haber una solución nativa aquí (¿todavía?).
0 votos
¡Hola Izzy! Teniendo en cuenta los comentarios (arriba), ¿significa que necesitas una solución teniendo en cuenta un dispositivo no rooteado?
0 votos
@Firelord Preferiblemente sí, aunque las soluciones sólo de root serían mejor que ninguna ;)
0 votos
No es que sea la solución deseada, pero es seguro suponer que un dispositivo no rooteado probablemente tendría una Google Play Store activa, y si ese es el caso, entonces puedes conseguir al menos algunos
<APP_NAME> and <PKG_NAME>
de las bases de datos (localappstate.db
) en su interior. ¿Lo has probado? No he verificado si la copia de seguridad ADB cubre Play Store o no.0 votos
Buena idea, @Firelord - pero seguro que también se aplicaría a las aplicaciones instaladas por otros medios (Aptoide, F-Droid,
adb install
) que la playstore no conoce? Y en segundo lugar, suponiendo un dispositivo no rooteado: ¿esa base de datos sería accesible a través de ADB de alguna manera? "Desde las bases de datos de su interior" seguramente se refiere a alguna parte inferior/data/data
que no es "abiertamente accesible" sin Root. Necesidad de comprobar si esa base de datos sería accesible desde una copia de seguridad de ADB - que todavía requeriría tener las librerías SSL disponibles para descifrar eso.0 votos
@Izzy Tengo tres confirmaciones: Si el dispositivo no Root tiene instalado Aptoide o F-Droid, entonces considéralos como una mina de oro, ya que sus bases de datos están cubiertas por la copia de seguridad de ADB, y individualmente tienen
<APP_NAME> and <PKG_NAME>
de todas las aplicaciones de sistema+usuario. Hablando de Play Store, su base de datos también está cubierta por la copia de seguridad de ADB, pero daría<APP_NAME>
sólo para aquellas aplicaciones que se instalan mediante Play Store. El resto son listadas por<PKG_NAMES>
sólo. // Podría ayudar, supongo.0 votos
Sí, pero significaría desconcertar mucho, comprobando todo tipo de tiendas de aplicaciones posiblemente instaladas hasta que tengas todas las aplicaciones cubiertas. No es realmente factible. Debe haber algún "lugar central" que alimente cosas como el cajón de aplicaciones. Ese sería entonces el lugar para encontrar mis diamantes :)
0 votos
Parece que
aapt
se incluye en las ROMs de Android a partir de la 4.4 (Kitkat), véase esta respuesta . ¿Alguien puede confirmar esto para las ROMs de stock?