Estoy buscando la 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 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 obtengo el nombre común de una aplicación que tiene el nombre del paquete (como com.android.blabla)? (línea de comando o aplicación incluida) no funciona a través de ADB (pero usa una aplicación que debe buscar manualmente), que coincide con la solicitud del OP
- ¿Cómo encontrar una aplicación basada en el nombre del paquete? simplemente 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 forma de recuperar la información directamente desde el dispositivo, si es posible, no "de ninguna manera" (incluidas las "búsquedas web" o "a través de una aplicación"), ya que esas dos preguntas lo tienen.
Sé que hay varias herramientas disponibles para obtener detalles del paquete:
adb dumpsys package
: Si bien esto enumera todos los paquetes con muchos detalles, no se muestra el "nombre común"adb shell pm list
: solo da los nombres de los paquetesaapt
sería capaz de obtener el nombre común, pero requeriría primero extraer el.apk
archivo del dispositivo, lo que 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 manera podría mostrar los nombres de las aplicaciones en la GUI? Dudo que Android analice el .apk
archivo cada vez que la GUI necesita el "nombre común"). Entonces, ¿hay alguna manera de obtenerlo, usando ADB directamente?
TL; DR
Antecedentes (si alguien tiene curiosidad): Quiero poder obtener rápidamente una lista de aplicaciones de usuario de cualquiera de mis dispositivos, sin tener que volver a las acrobacias. Una lista de los nombres de sus paquetes que puedo recuperar usando adb shell pm list -3
, pero como esos son solo nombres de paquetes, reconocer las aplicaciones es una conjetura. Entonces, si hubiera algún comando ADB para recuperar el nombre común de un nombre de paquete dado, simplemente podría 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 por humanos" junto con sus nombres de paquete.
Casos de uso:
- Vea qué aplicaciones "superflous" están instaladas (que podría eliminar)
- Verificación cruzada de listas de múltiples dispositivos
- Documentación;)
- y probablemente más (pero los 3 anteriores son para lo que lo necesito)
fuente
Respuestas:
Esta no es una respuesta final, ya que no es genérica (solo funciona en algunos dispositivos), pero al menos es un comienzo:
Como hemos descubierto , al menos las ROM basadas en CM con Kitkat (Android 4.4) y superiores se envían con el
aapt
binario disponible en/system/bin
1 . Si su ROM no lo tiene, e instalar el binario en el dispositivo es una opción, puede encontrarlo aquí. .Usar
aapt
, recuperar el nombre de la aplicación es posible conLa salida será algo así
label='Funny App'
, que luego puede analizar fácilmente para el nombre de la aplicación, por ejemplo(no es bueno si el nombre de la aplicación contiene comillas simples, pero eso podría contar como cosméticos, o si se imagina cómo mejorar la parte sed para lidiar con eso).
1: no encontramos esto en las ROM de stock de Kitkat y superiores que hemos verificado, por lo que podrían ser solo ROM basadas en CM
fuente
aapt
binario. Puede muy bien descargar y cambiar el nombre del binarioaapt
en la PC, configurar el permiso ejecutable compatible con Linux en el binario y presionarlo/data/local/tmp
, luego usar la ruta absoluta/data/local/tmp/aapt
para usar el binario en esos comandos.aapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
Aquí está mi solución para un teléfono no rooteado que necesitaba algunos ligeros cambios desde arriba que ejecuté en un Moto G 2nd gen con Android 5.0.2.
No tenía un binario apto en / system / bin, así que primero intenté descargar desde: https://android.izzysoft.de/downloads
pero cuando intenté ejecutarlo recibí un error que decía:
error: solo se admiten ejecutables independientes de la posición (PIE).
Entonces busqué una versión PIE y encontré: https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie
y esto funcionó copiando binario a / data / local / tmp:
Por lo que entonces:
obtiene una lista de aplicaciones de terceros (aplicaciones que ha instalado, no aplicaciones del sistema) y luego puede usar el paquete del comando anterior en aapt para obtener información sobre el paquete, por ejemplo:
A continuación, se muestra un script (para un cliente Linux) para obtener un nombre "común" para aplicaciones de terceros: ``
Si también desea el paquete y la versión, cambie la última pero una línea de:
a:
Salida de ejemplo:
name='com.ultimarom.launchnavigation' versionName='1.28' 'Navigation' name='com.enhanced.skineditorstudio' versionName='3.3' 'Custom Skin Creator' name='com.mojang.minecraftpe' versionName='1.2.6.60' 'Minecraft' name='org.videolan.vlc' versionName='2.5.13' 'VLC' name='com.jrustonapps.myauroraforecast' versionName='1.7.2' 'My Aurora Forecast' name='de.j4velin.wifiAutoOff' versionName='1.7.6' 'WiFi Automatic' name='com.facebook.katana' versionName='153.0.0.54.88' 'Facebook' name='com.metago.astro' versionName='6.0.5' 'ASTRO File Manager' name='za.co.hardrive.smartinfo.parkrun' versionName='2.0.2' 'My 5krun' name='com.PYOPYO.StarTrackerVR' versionName='1.0.1' 'StarTracker VR' name='cz.aponia.bor3.offlinemaps' versionName='1.1.19' 'Offline Maps' name='com.groupon' versionName='16.11.63973' 'Groupon' name='com.ebay.mobile' versionName='5.16.1.2' 'eBay' name='com.runtastic.android' versionName='8.1.1' 'Runtastic' name='com.google.android.diskusage' versionName='3.8.3' 'DiskUsage'
Miguel
fuente
aapt
! Lo comprobaré tan pronto como el tiempo lo permita (actualmente estoy un poco apurado). Votado por ahora, tal vez aceptado después de haber verificado :)