私はADBシェルを使用してAndroidデバイスとインターフェイスするアプリケーションを開発しています。パッケージ名を指定して、アプリケーションの名前またはラベルを印刷する方法が必要です。
要するに、adb Shell
。
問題について何か光がありますか?これに関してどんな助けも歓迎します。
adb Shell pm list packages
は、インストールされているすべてのパッケージ名のリストを提供します。
その後、dumpsys | grep -A18 "Package \[my.package\]"
を使用して、バージョン識別子などのパッケージ情報を取得できます。
アプリを起動した後、コマンドプロンプトで次のコマンドを入力します。
adb Shell dumpsys window windows | find "mCurrentFocus"
linux端末でコマンドを実行する場合は、findをgrepに置き換えます
パッケージのアプリID(org.mozilla.firefoxなど)を知っていれば、簡単です。最初に、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
これで、いくつかのgrep | sedマジックを実行してパスを抽出できます:/data/app/com.google.Android.apps.inbox-1/base.apk
その後、aaptツールが役立ちます。
$ 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'
...
ここでも、ラベルを取得するためのgrepマジックがあります。
これを実現するシェルスクリプト:
#!/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