web-dev-qa-db-fra.com

Obtenir le nom / l'étiquette de l'application via ADB Shell ou Terminal

Je développe une application qui utilise ADB Shell pour l’interface avec les périphériques Android) et j’ai besoin d’un moyen d’imprimer le nom ou l’étiquette de l’application d’une application, étant donné peut-être le nom de leur package.

En bref, il me faut un moyen d’obtenir des noms d’applications ("Angry Birds v1.0.0") pour les applications installées par les utilisateurs via adb Shell.

Une lumière sur le sujet? Toute aide est appréciée à ce sujet.

48
hamsteyr

adb Shell pm list packages vous donnera une liste de tous les noms de paquets installés.

Vous pouvez alors utiliser dumpsys | grep -A18 "Package \[my.package\]" pour récupérer les informations sur le paquet telles que les identificateurs de version, etc.

70
o0rebelious0o

il suffit d'entrer la commande suivante à l'invite de commande après le lancement de l'application:

adb Shell dumpsys window windows | find "mCurrentFocus"

si vous exécutez la commande sur le terminal linux, remplacez find par grep

20
akshay_k

Si vous connaissez l'identifiant d'application du paquet (comme org.mozilla.firefox), c'est facile. D'abord pour obtenir le chemin du fichier de package actuel de l'appId,

$  adb Shell pm list packages -f com.google.Android.apps.inbox
package:/data/app/com.google.Android.apps.inbox-1/base.apk=com.google.Android.apps.inbox

Vous pouvez maintenant utiliser la magie grep | sed pour extraire le chemin: /data/app/com.google.Android.apps.inbox-1/base.apk

Après, cet outil est utile:

$  adb Shell aapt dump badging /data/app/com.google.Android.apps.inbox-1/base.apk
...
application-label:'Inbox'
application-label-hi:'Inbox'
application-label-ru:'Inbox'
...

Encore une fois de la magie grep pour obtenir le label.

8
Love_for_CODE

Un script shell pour accomplir ceci:

#!/bin/bash

# Remove whitespace
function remWS {
    if [ -z "${1}" ]; then
        cat | tr -d '[:space:]'
    else
        echo "${1}" | tr -d '[:space:]'
    fi
}

for pkg in $(adb Shell pm list packages -3 | cut -d':' -f2); do
    apk_loc="$(adb Shell pm path $(remWS $pkg) | cut -d':' -f2 | remWS)"
    apk_name="$(adb Shell aapt dump badging $apk_loc | pcregrep -o1 $'application-label:\'(.+)\'' | remWS)"
    apk_info="$(adb Shell aapt dump badging $apk_loc | pcregrep -o1 '\b(package: .+)')"

    echo "$apk_name v$(echo $apk_info | pcregrep -io1 -e $'\\bversionName=\'(.+?)\'')"
done
2
smac89