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
重点: 查看包名是ADB应用管理的基石。无论是卸载、清除数据还是启动Activity,都离不开包名。我建议你把这个命令记在脑子里。

4.4 清除应用数据

有时候应用出问题了,或者你想让应用恢复到初始状态,就需要清除数据:

adb shell pm clear <包名>

比如清除微信的数据:

adb shell pm clear com.tencent.mm

执行后,应用的所有数据——包括登录状态、缓存、数据库、SharedPreferences——都会被删除。相当于你刚安装完的状态。

注意: 这个操作不可逆!我曾经在调试一个支付SDK时,想清除测试数据,结果不小心清错了应用,把同事的聊天记录全清了……嗯,从那以后我每次执行 pm clear 前都会再三确认包名。

清除数据后,应用通常需要重新初始化。比如微信会要求重新登录,游戏会从头开始。这在测试中非常有用——你想验证首次启动的引导流程,或者测试登录功能,直接清除数据比卸载重装快得多。

4.5 综合实战:一个完整的应用管理流程

假设我要在一台新设备上部署测试环境,流程通常是这样的:

  1. 先查看已安装的应用,确认没有旧版本:adb shell pm list packages | grep myapp
  2. 如果有旧版本,先卸载:adb uninstall com.example.myapp
  3. 安装新版本:adb install -g myapp-debug.apk
  4. 启动应用,测试功能
  5. 测试完毕后,清除数据恢复初始状态:adb shell pm clear com.example.myapp

你想想看,如果用手工操作,每一步都要在屏幕上点来点去。用ADB,一条命令就搞定。尤其是在多台设备上批量操作时,写个脚本循环执行,效率提升不是一点半点。

我的经验: 在持续集成(CI)环境中,我经常把这几条命令写成shell脚本。每次构建完成后自动部署到测试机,省去了人工干预。如果你也在做自动化测试,这套流程值得收藏。

好了,应用管理这块就讲到这里。下一章我们会聊聊文件管理——怎么用ADB往手机里传文件、拉文件出来,以及管理手机上的目录结构。