如何通过ADB命令查看已安装应用的包名?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
扶余城里小老二 2026-01-05 00:10关注一、ADB基础概念与环境准备
Android Debug Bridge(ADB)是Android开发工具包(SDK)中的核心组件之一,用于在计算机与Android设备之间建立通信桥梁。通过ADB命令行工具,开发者可以执行设备管理、应用安装、日志查看以及获取系统信息等操作。
在开始使用ADB查询应用包名前,需确保以下条件满足:
- 已安装最新版本的Android SDK Platform Tools
- 设备已开启“USB调试”模式(位于“开发者选项”中)
- 设备通过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错误。解决方案包括:- 尝试以root身份运行shell:
adb shell su -c "pm list packages" - 使用Magisk等模块解除限制
- 切换至工程模式或解锁Bootloader
五、不同Android版本对输出格式的影响
随着Android版本演进,
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[部分包名不可见除非白名单]pm list packages的输出行为存在一定差异:例如,在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并解析输出,实现批量设备监控与分析。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报