20 votes

Obtenir le nom du paquet ET le nom commun des applications via ADB

Je recherche une possibilité de récupérer les deux les noms des paquets les noms communs des applications installées sur un appareil Android via ADB - ou au moins pour retrouver le nom commun si le nom du paquet est connu. Une recherche rapide sur notre site a permis de trouver deux questions connexes, mais elles ne résolvent pas mon problème :

Je cherche un moyen de récupérer les informations directement à partir de l'appareil, si possible - et non pas "de n'importe quelle manière" (y compris par des "recherches sur le web" ou "via une application"), comme l'indiquent ces deux questions.

Je sais qu'il existe de nombreux outils permettant d'obtenir des détails sur les paquets :

  • adb dumpsys package : Bien que cela liste tous les paquets avec un tas de détails, le "nom commun" n'est pas montré.
  • adb shell pm list : ne donne que le nom des paquets
  • aapt serait en mesure d'obtenir le nom commun, mais devrait d'abord extraire le nom de l'entreprise. .apk à partir de l'appareil, ce qui n'est pas vraiment pratique (et sera évidemment assez lent si de nombreuses et/ou grosses applications sont installées).

Est-ce que j'ai raté quelque chose ? Je sais que l'information doit être sur l'appareil (sinon comment pourrait-il afficher les noms des applications dans l'interface graphique ? Je doute qu'Android analyse l'information .apk chaque fois que l'interface graphique a besoin du "nom commun"). Y a-t-il donc un moyen de le récupérer, en utilisant directement ADB ?


TL;DR

Contexte (si quelqu'un est curieux) : Je veux être capable d'obtenir rapidement une liste d'applications utilisateur à partir de n'importe lequel de mes appareils, sans avoir à recourir à l'acrobatie. Une liste de leurs noms de paquets peut être récupérée en utilisant adb shell pm list -3 mais comme il s'agit uniquement de noms de paquets, la reconnaissance des applications relève de la devinette. Donc, s'il y avait une commande ADB pour récupérer le nom commun pour un nom de paquet donné, je pourrais simplement utiliser une boucle comme for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done - et obtenir une liste de toutes les applications utilisateur installées dans un "format lisible par l'homme", ainsi que le nom de leur paquetage.

Cas d'utilisation :

  • Voir quelles applications "superflues" sont installées (que je pourrais supprimer)
  • Recoupement des listes à partir de plusieurs appareils
  • Documentation ;)
  • et probablement plus (mais les 3 ci-dessus sont ce pour quoi j'en ai besoin)

12voto

Mike Bounds Points 101

Voici ma solution pour un téléphone non rooté qui a nécessité quelques légères modifications par rapport à ce qui précède. J'ai utilisé un Moto G 2ème génération fonctionnant sous Android 5.0.2.

Je n'avais pas aapt binaire en /system/bin J'ai donc d'abord essayé de télécharger à partir de https://Android.izzysoft.de/downloads

mais quand j'ai essayé de l'exécuter, j'ai eu une erreur disant :

error: only position independent executables (PIE) are supported.

Alors j'ai cherché une version PIE et j'ai trouvé : https://github.com/Calsign/APDE/blob/fdc22eb31048862e1484f4b6eca229accda61466/APDE/src/main/assets/aapt-binaries/aapt-arm-pie

et cela a fonctionné en copiant le binaire vers /data/local/tmp :

adb push aapt-arm-pie /data/local/tmp
adb shell chmod 0755 /data/local/tmp/aapt-arm-pie

Alors :

adb shell pm list packages -3 -f

obtient une liste d'applications tierces (les applications que vous avez installées, pas les applications système) et vous pouvez ensuite utiliser le paquet de la commande ci-dessus dans aapt pour obtenir des informations sur le paquet - exemple :

adb shell /data/local/tmp/aapt-arm-pie d badging /data/app/com.facebook.katana-3/base.apk

Voici donc un script (pour un client Linux) permettant d'obtenir le nom "commun" des applications tierces :

for pkg in `adb shell pm list packages -3 -f | awk -F= '{sub("package:","");print $1}'`
do
  adb shell /data/local/tmp/aapt-arm-pie d badging $pkg | awk -F: '
      $1 == "application-label" {print $2}'
done

Si vous voulez aussi le paquet et la version, alors changez l'avant-dernière ligne de :

$1 == "application-label" {print $2}'

à :

$1 == "package" { split($2,space," ")
name=space[1];version=space[3]}
$1 == "application-label" {print name, version, $2 }'

Exemple de sortie :

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'

7voto

Milner Points 533

Ce n'est pas une réponse définitive, car elle n'est pas générique (elle ne fonctionne que sur certains appareils) - mais c'est au moins un début :

Comme nous avons compris Au moins les ROMs basées sur CM avec Kitkat (Android 4.4) et plus sont livrées avec l'option aapt binaire disponible en /system/bin 1 . Si votre ROM ne l'a pas, et que l'installation du binaire sur l'appareil est une option, vous pouvez trouvez-le ici .

Utilisation de aapt la récupération du nom de l'application est possible avec

aapt d badging <path to apk> | grep "application: label" |awk '{print $2}'

La sortie sera quelque chose comme label='Funny App' que vous pouvez ensuite facilement analyser pour trouver le nom de l'application, par ex.

aapt d badging <path to apk> | grep 'application: label' | sed -n \"s/.*label\='\([^']*\)'.*/\1/p\"

(ce qui n'est pas bon si le nom de l'application contient des guillemets simples, mais cela peut être considéré comme de la cosmétique - ou bien vous trouvez un moyen d'améliorer la partie sed pour gérer cela).


1 : Nous n'avons pas trouvé ce problème dans les ROMs stock Kitkat et plus que nous avons vérifiées, donc cela pourrait être uniquement les ROMs CM.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X