You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:54:02