web-dev-qa-db-ja.com

ADBシェルまたはターミナル経由でアプリケーション名/ラベルを取得する

私はADBシェルを使用してAndroidデバイスとインターフェイスするアプリケーションを開発しています。パッケージ名を指定して、アプリケーションの名前またはラベルを印刷する方法が必要です。

要するに、adb Shell

問題について何か光がありますか?これに関してどんな助けも歓迎します。

48
hamsteyr

adb Shell pm list packagesは、インストールされているすべてのパッケージ名のリストを提供します。

その後、dumpsys | grep -A18 "Package \[my.package\]"を使用して、バージョン識別子などのパッケージ情報を取得できます。

70
o0rebelious0o

アプリを起動した後、コマンドプロンプトで次のコマンドを入力します。

adb Shell dumpsys window windows | find "mCurrentFocus"

linux端末でコマンドを実行する場合は、findをgrepに置き換えます

20
akshay_k

パッケージのアプリ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マジックがあります。

8
Love_for_CODE

これを実現するシェルスクリプト:

#!/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