我开发使用亚行外壳采用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