如何用Python通过adb获取Android设备设置>应用列表的应用名称与版本号
解决思路
系统设置的应用列表默认不会展示无界面的系统服务包、底层框架包等内容,和pm list packages返回的全量包列表差异较大。你可以通过adb命令添加参数筛选符合要求的应用,再用Python解析输出结果即可,具体实现如下:
第一步:用到的核心adb命令
- 仅筛选第三方用户安装应用(和设置>应用默认展示列表匹配度99%):
adb shell pm list packages -3,其中-3参数就是指定只返回第三方应用 - 批量获取应用包名+版本号+显示名的整合命令:
adb shell "pm list packages -3 | cut -d: -f2 | while read pkg; do ver=$(dumpsys package $pkg | grep versionName | head -n1 | cut -d= -f2); name=$(pm dump $pkg | grep 'android:label' | head -n1 | cut -d= -f2 | cut -d' ' -f1); echo \"$pkg,$ver,$name\"; done"
直接执行上述命令可以一次性拿到所有目标应用的三个核心字段,不需要Python侧多次调用adb,效率更高。
第二步:Python实现代码
import subprocess import csv def get_target_android_apps(): # 先检测ADB和设备连接状态 try: subprocess.run(["adb", "devices"], check=True, capture_output=True, text=True) except subprocess.CalledProcessError: print("请先配置ADB环境并连接Android设备,开启USB调试权限") return [] # 执行批量查询命令 cmd = [ "adb", "shell", "pm list packages -3 | cut -d: -f2 | while read pkg; do ver=$(dumpsys package $pkg | grep versionName | head -n1 | cut -d= -f2); name=$(pm dump $pkg | grep 'android:label' | head -n1 | cut -d= -f2 | cut -d' ' -f1); echo \"$pkg,$ver,$name\"; done" ] result = subprocess.run(cmd, capture_output=True, text=True) if result.returncode != 0: print("命令执行失败,请检查设备的USB调试权限是否完全开启") return [] # 解析返回结果 app_list = [] for line in result.stdout.strip().split("\n"): if not line: continue parts = line.split(",", 2) if len(parts) == 3: package_name, version, display_name = parts app_list.append({ "应用显示名": display_name, "包名": package_name, "版本号": version }) return app_list if __name__ == "__main__": apps = get_target_android_apps() # 控制台打印结果 for app in apps: print(f"{app['应用显示名']} | {app['包名']} | {app['版本号']}") # 可选导出为CSV文件 with open("安卓应用列表.csv", "w", newline="", encoding="utf-8-sig") as f: writer = csv.DictWriter(f, fieldnames=["应用显示名", "包名", "版本号"]) writer.writeheader() writer.writerows(apps)
注意事项
- 如果需要包含设置里展示的可操作预装应用,把命令里的
-3参数删掉即可,后续可以自行过滤前缀为com.android.、android.的底层系统包 - Android 12及以上设备需要额外开启开发者选项里的「USB调试(安全设置)」,否则无法读取应用的显示名称
- 如果对应用名准确度要求更高,可以用
aapt工具从应用安装路径中解析label,比pm dump返回的结果更准确
内容的提问来源于stack exchange,提问作者dilek.yildirim
相关产品推荐
相关产品推荐

