使用 adb 获取应用程序版本名

有没有一种简单的方法可以使用 adb shell 获得 Android 设备上应用程序的版本名称?

I found the application version number (not the version name) in /data/system/packages.xml.

如果有一个包含应用程序信息的文件就好了。

132368 次浏览
adb shell dumpsys package my.package | grep versionName

正如 @ David@ Jeremy Fishman所提到的,这将比以下方法快得多:

adb shell dumpsys | grep -A18 "Package \[my.package\]"

Dumpsys package is your friend

~/# adb shell
shell@mo:/ dumpsys package tld.comp.app_name | grep version


会回来的

versionCode=X targetSdk=YY
versionName=Z.Z

如果有人需要所有的应用程序版本进行比较,那么这里是我的一条线:

for p in `adb shell pm list package | awk -F"package:" '{print $2}'`; do echo -n "$p: "; adb shell dumpsys package $p | grep -i versionName | awk -F"=" '{print $2}'; done

也许它对某些人会有帮助,但请注意,我使用的是 versionName 而忽略了 versionCode,因此使用时要小心。

如果你不想安装 * 。但你需要得到应用程序的版本,你可以这样做

$ANDROID_HOME/build-tools/28.0.3/aapt dump badging app/build/outputs/apk/app.app

如果您想获得所有软件包版本,请尝试下面的 awk 脚本:

adb shell dumpsys package | awk '/^[ ]*Package \[.*\] (.*)/ { i = index($0, "[") + 1; pkg = substr($0, i, index($0, "]") - i); } /[ ]*versionName=/ { { print pkg "\t" substr($0, index($0, "=") + 1); pkg = ""; } }'

如果您想知道软件包安装的版本/风格的 version Code 和 version Name,可以使用

adb shell dumpsys package |
awk '/^[ ]*Package \[.*\] (.*)/ { i = index($0, "[") + 1; pkg = substr($0, i, index($0, "]") - i); printf "\n%s", pkg; } /[ ]*versionName=/ { { printf "\t%s", $0; } }  /[ ]*versionCode=/ { { printf  "\t%s", $0; } } ' |
grep my.package

to return something like

my.package.foo         versionCode=5 minSdk=21 targetSdk=33    versionName=1.2.2
my.package.foo.debug   versionCode=7 minSdk=22 targetSdk=33    versionName=1.2.2 (dev)
...

(基于@user541686和@MonoThreaded 的答案)