我開發使用亞行外殼採用Android設備到接口的應用程序,我需要打印出的應用程序名稱或應用程序的標籤的一些方法,也許由於其包名稱。獲取應用程序名稱/標籤或終端
總之,我需要通過adb shell
獲取應用程序的名稱(如「憤怒的小鳥V1.0.0」)爲用戶安裝的應用程序的方式。
對此事的任何輕?任何幫助表示讚賞。
我開發使用亞行外殼採用Android設備到接口的應用程序,我需要打印出的應用程序名稱或應用程序的標籤的一些方法,也許由於其包名稱。獲取應用程序名稱/標籤或終端
總之,我需要通過adb shell
獲取應用程序的名稱(如「憤怒的小鳥V1.0.0」)爲用戶安裝的應用程序的方式。
對此事的任何輕?任何幫助表示讚賞。
adb shell pm list packages
會給你所有已安裝的軟件包名稱的列表。
然後可以使用dumpsys | grep -A18 "Package \[my.package\]"
搶到包信息,比如版本標識符等
如果你知道軟件包(如org.mozilla.firefox)的應用程序ID,很容易。 率先拿到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的魔力,以獲取標籤。
最後一個命令不起作用,因爲aapt只在你的開發者機器上。你需要先從設備上取得apk。 – Six
即使你在本地機器上使用它,「-f」後面的參數就像通配符一樣,所以如果有多個包含該字符串的包,它將顯示多個包。最好的辦法是: 'adb shell pm list packages -f'然後過濾掉結果。 – Smeterlink
@Six,我的手機上有'aapt',所以它仍然有效 – smac89
只需輸入上的命令提示符運行以下命令啓動應用後:
adb shell dumpsys window windows | find "mCurrentFocus"
如果執行Linux終端上的命令替換用grep的
一個shell腳本發現來實現:
#!/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
當你只需要'dumpsys軟件包'時,爲什麼要轉儲所有服務?也不需要grep - dumpsys包支持按包名過濾 –
我知道那個命令,當然,這是一個開始,給我所有安裝的應用程序的包名稱。 我使用dumpsys,但不是很成功,讓我相信,我可以不使用它的權利審判。它只適用於運行應用程序嗎?或者它是否也適用於尚未啓動的程序。 另外,我是否可以獲得一個使用示例以防萬一?非常感謝您的幫助。 – hamsteyr
按照上面的說法,我設法讓上面的代碼能夠處理包信息,但是它沒有提供我正在查找的數據。我指的是類似於'aapt d badging'的地方,我會得到像'application-label:ES File Explorer'和'versionName ='1.6.2.5''這樣的信息。有什麼可以通過shell給我這些信息嗎? – hamsteyr