通过ADB Shell或Terminal获取应用程序名称/标签

ham*_*eyr 49 shell android label adb

我正在开发一个使用ADB Shell与Android设备接口的应用程序,我需要一些打印出应用程序名称或应用程序标签的方法,可能是它们的包名.

简而言之,我需要一种方法来获取用户安装的应用程序的应用程序名称(即"愤怒的小鸟v1.0.0")adb shell.

对此事有何看法?任何帮助表示赞赏.

o0r*_*s0o 72

adb shell pm list packages 将为您提供所有已安装软件包名称的列表.

然后,您可以使用dumpsys | grep -A18 "Package \[my.package\]"获取包信息,例如版本标识符等

  • 如上所述,我设法让上面的代码工作来转储包信息,但它没有给我我正在寻找的数据.我指的是类似于'aapt d badging`的东西,我会得到像'application-label:ES File Explorer`和`versionName ='1.6.2.5'这样的信息.有什么东西可以通过shell给我这个信息吗? (13认同)
  • 为什么在只需要`dumpsys package packages`时转储所有服务?也不需要grep - dumpsys包支持按包名过滤 (9认同)
  • 这个答案不起作用。`dumpsys` 不会输出任何匹配或附近的“Package [package.name]”文本,以帮助确定应用程序的标签。appLabel 由 `dumpsys package` 列出,但仅适用于少数应用程序(“BusyBox Pro”、“BusyBox”和“ES File Manager”是我得到的 5 个应用程序中的一些)。有人有其他解决方案吗? (2认同)
  • @o0rebelious0o 无法从您的`dumpsys | 中找到 [com.akh.livestream](https://play.google.com/store/apps/details?id=com.akh.livestream) 包的完整应用程序名称 grep -A18“包\[my.package\]”` (2认同)

小智 23

只需在启动应用程序后在命令提示符下输入以下命令:

adb shell dumpsys window windows | find "mCurrentFocus"
Run Code Online (Sandbox Code Playgroud)

如果在linux终端上执行命令,请用grep替换find


小智 8

如果你知道包的app 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
Run Code Online (Sandbox Code Playgroud)

现在你可以做一些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'
...
Run Code Online (Sandbox Code Playgroud)

再一些grep魔法来获得Label.

  • 最后一个命令不起作用,因为aapt只在你的开发者机器上.您需要先从设备中提取apk. (5认同)