一土水丰色今口 2026-01-05 00:10 采纳率: 98.5%
浏览 4
已采纳

如何通过ADB命令查看已安装应用的包名?

如何通过ADB命令查看Android设备上已安装应用的包名?在开发或测试过程中,经常需要获取特定应用的包名以进行自动化测试或调试。请详细说明使用ADB(Android Debug Bridge)命令列出所有已安装应用包名的方法,并指出常见问题,如系统应用与用户应用的区分、命令执行权限不足导致的失败,以及不同Android版本输出格式差异的影响。
  • 写回答

1条回答 默认 最新

  • 扶余城里小老二 2026-01-05 00:10
    关注

    一、ADB基础概念与环境准备

    Android Debug Bridge(ADB)是Android开发工具包(SDK)中的核心组件之一,用于在计算机与Android设备之间建立通信桥梁。通过ADB命令行工具,开发者可以执行设备管理、应用安装、日志查看以及获取系统信息等操作。

    在开始使用ADB查询应用包名前,需确保以下条件满足:

    1. 已安装最新版本的Android SDK Platform Tools
    2. 设备已开启“USB调试”模式(位于“开发者选项”中)
    3. 设备通过USB正确连接至主机,并被ADB识别(可通过adb devices验证)
    adb devices
    List of devices attached
    emulator-5554   device

    若设备未列出或状态为unauthorized,请检查授权提示是否已确认。

    二、基本命令:获取所有已安装应用包名

    最常用的ADB命令用于列出所有已安装应用的包名如下:

    adb shell pm list packages

    该命令将输出形如package:com.android.settings的列表,其中com.android.settings即为包名。

    命令变体功能描述
    adb shell pm list packages -3仅列出第三方(用户)应用
    adb shell pm list packages -s仅列出系统应用
    adb shell pm list packages com.google模糊匹配包含“com.google”的包名
    adb shell pm list packages --user 0指定用户空间(适用于多用户设备)

    三、深入分析:系统应用 vs 用户应用的区分机制

    在实际测试中,往往只需关注用户安装的应用。系统应用由OEM或Google预装,通常以com.android.*com.google.android.*开头。使用-3参数可有效过滤:

    adb shell pm list packages -3

    其底层逻辑基于PackageManager的标志位判断:ApplicationInfo.FLAG_SYSTEM为真表示系统应用。部分定制ROM可能将第三方应用标记为系统级(如厂商预装App),此时需结合其他属性进一步甄别。

    进阶技巧:结合grep排除特定命名空间:

    adb shell pm list packages | grep -v "android\|google"

    四、权限问题与执行失败的常见原因

    尽管ADB功能强大,但权限限制可能导致命令失败。典型场景包括:

    • 未启用USB调试 → 设备无法被识别
    • Root权限缺失 → 某些系统分区应用无法访问(尤其在安全增强型ROM上)
    • SELinux策略限制 → 即使root也可能被拦截

    例如,在某些华为或小米设备上执行高敏感命令时,会返回Permission denied错误。解决方案包括:

    1. 尝试以root身份运行shell:adb shell su -c "pm list packages"
    2. 使用Magisk等模块解除限制
    3. 切换至工程模式或解锁Bootloader

    五、不同Android版本对输出格式的影响

    随着Android版本演进,pm list packages的输出行为存在一定差异:

    graph TD A[Android 5.0-7.0] --> B[输出格式稳定] C[Android 8.0+] --> D[支持用户隔离] D --> E[需显式指定--user参数] F[Android 10+] --> G[Scoped Storage影响跨进程访问] G --> H[部分包名不可见除非白名单]

    例如,在Android 10及以上版本中,非系统应用默认无法获取其他应用的完整包名列表,除非声明QUERY_ALL_PACKAGES权限或配置queries元素。这直接影响了自动化脚本的兼容性。

    六、实战建议与高级用法

    为提升效率,推荐以下组合命令:

    # 导出当前设备所有第三方应用包名到本地文件
    adb shell pm list packages -3 | cut -d":" -f2 > installed_apps.txt
    
    # 统计应用数量
    adb shell pm list packages -3 | wc -l
    
    # 查找某应用精确包名(如微信)
    adb shell pm list packages | grep -i wechat

    此外,可编写Python脚本调用ADB并解析输出,实现批量设备监控与分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 1月6日
  • 创建了问题 1月5日