Ich entwickle eine Anwendung, die ADB Shell für die Schnittstelle zu Android) - Geräten verwendet, und ich benötige eine Möglichkeit, den Anwendungsnamen oder die Bezeichnung einer Anwendung auszudrucken, wenn der Paketname angegeben wird.
Kurz gesagt, ich benötige eine Möglichkeit, App-Namen (d. H. "Angry Birds v1.0.0") für vom Benutzer installierte Anwendungen über adb Shell
Abzurufen.
Gibt es Licht in die Sache? Jede Hilfe wird auf diesem geschätzt.
adb Shell pm list packages
zeigt eine Liste aller installierten Paketnamen an.
Sie können dann dumpsys | grep -A18 "Package \[my.package\]"
, um die Paketinformationen wie Versionskennungen usw
geben Sie einfach den folgenden Befehl in die Eingabeaufforderung ein, nachdem Sie die App gestartet haben:
adb Shell dumpsys window windows | find "mCurrentFocus"
wenn Sie den Befehl auf einem Linux-Terminal ausführen, ersetzen Sie find durch grep
Wenn Sie die App-ID des Pakets kennen (z. B. org.mozilla.firefox), ist dies ganz einfach. Erstens, um den Pfad der eigentlichen Paketdatei der AppId zu erhalten,
$ 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
Jetzt kannst du etwas grep | sed-Magie anwenden, um den Pfad zu extrahieren: /data/app/com.google.Android.apps.inbox-1/base.apk
Danach bietet sich das aapt-Tool an:
$ 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'
...
Wieder ein bisschen Grep-Magie, um das Label zu bekommen.
Ein Shell-Skript, um dies zu erreichen:
#!/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