通过adb获取已安装的包名很简单
adb shell pm list packages
这里可以获取到所有app的包名,包括系统的和自己安装的,但是想获取app名字,比如"微信",就很困难。搜集了一些方法:
一、直接dumpsys
网上较多流传的一个命令可以获取到APP的详细信息
adb shell dumpsys package com.tencent.mm
但打印后发现,可以获取到版本号、权限等字段,就是没有app名字,而有些网友使用这个命令确实获取到了app名字。这个情况是普遍存在的,可能是兼容性问题。
二、在电脑端用AAPT工具解析apk文件
aapt工具在sdk里面自带了,可以解析apk文件,那么只要拿到你想解析的app的apk文件就行。
先查找所有包名及对应apk位置
adb shell pm list packages -f
打印出apk的位置和包名,把apk文件拉取到电脑端。
adb pull /data/app/com.leon.demo-ZMMnebZlBtlM_xwAxZyXPQ==/base.apk
用aapt工具解析这个拉到本地的apk文件,注意先把aapt工具所在目录加入Path
aapt d badging base.apk
应该就可以打印出所有信息,包括app名字了,如果出现中文乱码,改下编码
chcp 65001
再次打印即可。
但是这个方法显然效率太低,因为每个app你都需要复制到本地再解析,而一般手机上几十个甚至上百个app。所以换一个思路,把aapt工具直接在手机上跑呢。
三、把aapt工具推到手机上,直接在手机上跑shell命令
参考:https://android.stackexchange.com/questions/90141/obtain-package-name-and-common-name-of-apps-via-adb
先下载手机上可以运行的aapt文件:https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie
下载后,push到手机上并给与权限
adb push aapt-arm-pie /data/local/tmp
adb shell chmod 0755 /data/local/tmp/aapt-arm-pie
调用aapt来解析手机上的apk
adb shell /data/local/tmp/aapt-arm-pie d badging /data/app/com.facebook.katana-3/base.apk
可以看到解析出来的apk信息。
需要精简信息的话可以加入相关参数来格式化输出,也可以自己写个shell脚本,来循环查询所有app。