4、ADB应用管理:安装、卸载、查看与清除数据
应用管理,是ADB日常使用中最频繁的操作之一。说白了,就是通过命令行控制手机上的App——装上去、卸下来、看看装了啥、把数据清干净。我刚开始接触ADB时,觉得这跟图形界面点几下没啥区别,直到有一次在批量测试设备上部署几十个APK,才真正体会到命令行的威力。
4.1 安装应用:adb install
安装应用是最基础的操作。命令格式很简单:
adb install <APK文件路径>
比如我要装一个微信的APK:
adb install wechat.apk
嗯,这里要注意——如果设备上已经安装了同名应用,会报错提示「INSTALL_FAILED_ALREADY_EXISTS」。这时候需要加个参数:
adb install -r wechat.apk
-r 表示覆盖安装,保留原有数据。我个人习惯在测试版本迭代时,一直用这个参数,省得每次都要先卸载。
还有一些常用参数,我整理了一张表:
| 参数 | 作用 | 使用场景 |
|---|---|---|
| -r | 覆盖安装,保留数据 | 升级测试、版本迭代 |
| -d | 允许降级安装 | 从高版本回退到低版本 |
| -g | 授予所有运行时权限 | 测试时免去手动点权限 |
| -t | 允许安装测试APK | 安装带有android:testOnly的应用 |
adb install -g -r 组合参数。既覆盖安装,又自动授予权限,省掉不少重复操作。
为什么会需要降级安装?我在项目中遇到过,有一次测试环境需要验证旧版本的一个bug,但新版本已经装上了。直接装旧版会报错,加上 -d 参数就搞定了。
4.2 卸载应用:adb uninstall
卸载命令更直接:
adb uninstall <包名>
注意,这里用的是包名,不是应用名称。比如卸载微信:
adb uninstall com.tencent.mm
怎么知道包名?别急,下一节就讲。如果你不确定包名,可以先用 adb shell pm list packages 查一下。
卸载时也可以加参数:
adb uninstall -k <包名>
-k 表示卸载应用但保留数据和缓存目录。这个参数在Android 4.0之后其实已经不太推荐了,但某些特殊场景下还能用。
4.3 查看已安装应用列表
这个命令我几乎每天都要用:
adb shell pm list packages
执行后,会列出设备上所有应用的包名。输出大概长这样:
package:com.android.phone
package:com.android.settings
package:com.tencent.mm
package:com.google.android.gms
...
如果只想看第三方应用(非系统预装),加个参数:
adb shell pm list packages -3
其他常用过滤参数:
-s:只显示系统应用-f:显示APK文件路径-i:显示安装来源(比如Google Play、adb等)grep关键词:搜索特定应用,比如adb shell pm list packages | grep tencent
4.4 清除应用数据
有时候应用出问题了,或者你想让应用恢复到初始状态,就需要清除数据:
adb shell pm clear <包名>
比如清除微信的数据:
adb shell pm clear com.tencent.mm
执行后,应用的所有数据——包括登录状态、缓存、数据库、SharedPreferences——都会被删除。相当于你刚安装完的状态。
pm clear 前都会再三确认包名。
清除数据后,应用通常需要重新初始化。比如微信会要求重新登录,游戏会从头开始。这在测试中非常有用——你想验证首次启动的引导流程,或者测试登录功能,直接清除数据比卸载重装快得多。
4.5 综合实战:一个完整的应用管理流程
假设我要在一台新设备上部署测试环境,流程通常是这样的:
- 先查看已安装的应用,确认没有旧版本:
adb shell pm list packages | grep myapp - 如果有旧版本,先卸载:
adb uninstall com.example.myapp - 安装新版本:
adb install -g myapp-debug.apk - 启动应用,测试功能
- 测试完毕后,清除数据恢复初始状态:
adb shell pm clear com.example.myapp
你想想看,如果用手工操作,每一步都要在屏幕上点来点去。用ADB,一条命令就搞定。尤其是在多台设备上批量操作时,写个脚本循环执行,效率提升不是一点半点。
好了,应用管理这块就讲到这里。下一章我们会聊聊文件管理——怎么用ADB往手机里传文件、拉文件出来,以及管理手机上的目录结构。