ADB(Android Debug Bridge)是连接计算机与Android设备的核心调试工具,它建立通信桥梁,使开发者能在设备上执行命令、调试应用及管理文件。
在Android开发和系统管理中,pm
命令(Package Manager)是一个极其重要的工具,它允许你通过命令行与Android设备上的应用包进行深度交互,它通常通过adb shell
环境执行。不当使用pm
命令(尤其是卸载或禁用核心系统应用)可能导致设备不稳定、功能失效甚至无法启动(变砖),操作前请务必理解命令含义,并建议在非关键设备或模拟器上测试,普通用户请谨慎使用。
- 启用开发者选项:在设备的
设置
>关于手机
中,连续点击版本号
7次。 - 启用USB调试:进入
设置
>系统
>开发者选项
,开启USB调试
。 - 连接设备:用USB线将设备连接到电脑,在设备上授权弹出的
允许USB调试
提示。 - 启动ADB Shell:
- 打开电脑上的命令提示符(CMD)或终端(Terminal)。
- 导航到ADB工具所在目录(或确保ADB在系统PATH中)。
- 输入
adb devices
确认设备已连接(列出设备序列号)。 - 输入
adb shell
进入设备的命令行环境,提示符通常会变成类似device_name:/ $
或 。
现在你已进入adb shell
,可以开始使用pm
命令:
基本语法结构
pm <command> [options] <arguments>
常用命令详解与示例
-
列出应用包 (
list packages
)- 作用:列出设备上安装的所有或符合条件的应用包名。
- 常用选项:
-f
: 显示关联的APK文件路径。-s
: 只列出系统应用。-3
: 只列出第三方应用(用户安装)。-i
: 显示安装来源(Installer)。-u
: 同时列出卸载后保留数据的应用。--user <user_id>
: 指定用户ID(多用户设备)。0
通常是主用户。
- 过滤:使用
grep
(Linux/macOS) 或findstr
(Windows) 过滤结果。 - 示例:
pm list packages # 列出所有包名 pm list packages -f # 列出包名及APK路径 pm list packages -s # 只列出系统应用 pm list packages -3 # 只列出用户安装的应用 pm list packages | grep gmail # 查找包含"gmail"的包名 (Linux/macOS) pm list packages | findstr gmail # 查找包含"gmail"的包名 (Windows) pm list packages -u # 列出所有应用(包括已卸载但保留数据的) pm list packages --user 0 # 列出主用户(ID 0)的应用
-
安装应用 (
install
)- 作用:将APK文件安装到设备上。
- 常用选项:
-r
: 重新安装现有应用,保留数据(覆盖安装)。-t
: 允许安装测试APK(即使AndroidManifest.xml
中未声明android:testOnly
)。-d
: 允许降级安装(安装比当前版本更旧的APK)。-g
: 授予清单文件中声明的所有运行时权限(Android 6.0+)。--user <user_id>
: 指定安装到哪个用户。-i <installer_package_name>
: 指定安装来源包名(如应用商店)。
- 示例:
pm install /sdcard/Download/myapp.apk # 安装SD卡上的APK pm install -r /sdcard/Download/update.apk # 覆盖安装更新 pm install -t -g /sdcard/Download/test.apk # 安装测试APK并授予所有权限 pm install --user 10 /sdcard/Download/app.apk # 安装到用户ID 10
-
卸载应用 (
uninstall
)- 作用:从设备上卸载应用。
- 常用选项:
-k
: 卸载应用但保留数据和缓存,不加此选项则同时删除数据。--user <user_id>
: 指定卸载哪个用户的应用。
- 示例:
pm uninstall com.example.badapp # 卸载包名为com.example.badapp的应用(删除数据) pm uninstall -k com.example.keepdata # 卸载应用但保留其数据 pm uninstall --user 10 com.example.app # 卸载用户ID 10上的应用
-
清除应用数据 (
clear
)- 作用:清除指定应用的所有数据(相当于设置里的“清除数据”)。
- 示例:
pm clear com.example.cacheheavyapp # 清除该应用的所有用户数据
-
启用/禁用应用组件 (
enable
/disable
)- 作用:启用或禁用应用或其特定组件(Activity, Service, Receiver, Provider),禁用后,应用图标可能消失,无法运行。禁用核心系统应用极其危险!
- 禁用用户应用:相对安全(可通过
enable
或设置重新启用)。 - 禁用系统应用:可能导致严重问题。强烈建议使用
--user 0
仅对当前用户禁用,而非全局禁用。 - 语法:
pm enable <package_name/component_name> pm disable <package_name/component_name> pm disable-user [--user <user_id>] <package_name/component_name> # 推荐方式
- 示例:
pm disable-user com.example.bloatware # 安全:仅对当前用户禁用用户应用 pm disable com.android.bloatware # 危险:全局禁用系统应用(可能导致问题) pm enable com.example.bloatware # 重新启用 pm disable com.example.app/.MainActivity # 禁用特定Activity (较少用)
-
授予/撤销运行时权限 (
grant
/revoke
)- 作用:管理Android 6.0 (API 23) 及以上应用的运行时权限。
- 权限名:通常是
android.permission.XXX
格式(如android.permission.CAMERA
)。 - 示例:
pm grant com.example.cameraapp android.permission.CAMERA # 授予相机权限 pm revoke com.example.locationapp android.permission.ACCESS_FINE_LOCATION # 撤销精确位置权限
-
设置应用安装位置 (
set-install-location
)- 作用:更改默认的APK安装位置(需设备支持),值:
0
[auto]: 让系统决定(默认)。1
[internal]: 强制安装到内部存储。2
[external]: 强制安装到外部存储(SD卡)。
- 示例:
pm set-install-location 2 # 设置默认安装到SD卡(如果支持) pm set-install-location 0 # 恢复默认(自动)
- 作用:更改默认的APK安装位置(需设备支持),值:
-
获取应用信息 (
path
,dump
)- 作用:获取应用的APK路径或详细dump信息。
- 示例:
pm path com.example.app # 显示该应用APK的完整路径 pm dump com.example.app # 输出该应用的详细配置信息(包名、版本、权限、组件等)
-
创建/删除用户 (
create-user
,remove-user
)- 作用:在多用户设备上管理用户(通常需要root或系统权限)。
- 示例:
pm create-user Guest # 创建一个名为"Guest"的新用户 pm remove-user 10 # 删除用户ID为10的用户
重要提示与最佳实践
- 权限要求:许多
pm
命令(尤其是涉及系统应用、用户管理的)需要root权限或在具有足够权限的ADB Shell会话(如adb root
或adb shell su -c 'pm ...'
)中执行,普通用户权限下只能操作自己安装的应用或获取信息。 - 包名准确性:卸载、禁用等操作必须提供完整的、正确的包名,使用
pm list packages
仔细确认。 - 系统应用风险:对
com.android.*
,com.google.android.*
等系统应用进行uninstall
或disable
操作风险极高,极易导致系统崩溃或功能缺失。强烈建议仅使用disable-user --user 0
来对当前用户禁用不需要的系统应用/组件(如预装推广软件),这通常是可逆且相对安全的。 - 备份:在进行任何可能影响系统稳定性的操作(卸载、禁用系统应用)前,确保设备已备份。
- 模拟器测试:学习或测试
pm
命令,优先在Android模拟器中进行。 - 查看帮助:在
adb shell
中直接输入pm
(不带参数)或pm help
可以查看所有可用命令的简要说明。
pm
命令是Android开发者和高级用户管理设备应用的强大工具,它涵盖了从查询、安装、卸载、权限管理到深度配置(启用/禁用)等核心功能。理解其功能并谨慎操作至关重要,特别是涉及系统应用时。 熟练掌握pm
命令能极大提升设备管理和应用调试的效率,但务必牢记操作风险,优先使用安全选项(如disable-user --user 0
),并在非关键设备或模拟器上练习。
引用说明:
- 本文档中关于
pm
命令的功能描述、参数选项及行为主要基于Android开源项目(AOSP)的官方文档和源代码实现,以及Android开发者社区长期积累的实践经验,具体命令行为可能因设备制造商(OEM)的定制、Android系统版本(特别是权限模型在Android 6.0 Marshmallow的重大变化)以及设备是否获取root权限而略有差异,最权威的底层接口定义可参考Android官方开发者文档中的PackageManager
类说明。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6561.html