免root ADB命令卸载系统预装应用

“The Android Road”

【京东自营】Android Studio开发实战:从零基础到App上线(第2版)
【京东自营】Android软件安全权威指南
【京东自营】Android进阶解密
Android安全架构深究 (美)埃伦科夫(Nikolay Elenkov)
Android开发艺术探索 任玉刚 著
疯狂Android讲义(第3版)赠光盘 李刚


完整步骤:免Root卸载预置APP——完整版
已同步推送到微信公众号:灰灰的Rom笔记


首先要知道系统预装的应用分3种:

  1. 不可卸载
    这部分没有 root 权限,是不能卸载的。比如 Phone、Message、Calendar 等。
  2. 可卸载,可恢复
    这部分没有 root 权限,用户也可以卸载,但恢复出厂后又会回来。比如 EMUI 预置的很多第三方的 APP。
  3. 可卸载,不恢复
    这部分预置在 data 分区,data 分区是用户存储数据的分区,恢复出厂清空数据时也会清理掉这部分 APP。这种情况一般作特殊用途,比如出厂前测试硬件好坏的部分工具 APP,测完恢复出厂,用户也就感觉不到了。

通常说的卸载预置应用是指第1种的,但上面也说了,没有root权限是不能卸载的,岂不是标题党了?

实际上本文要介绍的方法处理起来与上面第2种情况类似,虽说可以免root卸载预置应用,但也不是彻底删除APK,让它不可恢复(root后的删除一般是彻底删除)。

好了,废话不多说,步骤如下:

1、激活开发者模式,打开 USB debug。

2、连接电脑,打开 cmd 窗口。

3、adb shell 进入 shell 模式。

4、获取要卸载的应用的包名,方法如下:

  • 方法1:
    借助第三方应用市场,比如全国最大的同性交友网站——酷安,在它上面打开某个应用的详情界面时,浏览器地址栏就会显示出这个应用的包名,比如华为音乐播放器的地址是:https://www.coolapk.com/apk/com.android.mediacenter
    包名就是最后一串:com.android.mediacenter
  • 方法2:
    列出所有包名,一个个看那个最像。
C:\Users\ShawnXia>adb shell
em_t8811a_emmc:/ $ pm list packages
package:com.android.fmradio
package:com.mediatek.camera
package:com.android.providers.calendar
……

这种方法比较考研耐心和运气(有可能你以为的不是你以为的),如果知道关键字可以这样搜一下:

em_t8811a_emmc:/ $ pm list packages | grep "camera"
package:com.mediatek.camera
em_t8811a_emmc:/ $
  • 方法3(推荐方法):
    先将 APP 打开,然后使用 ADB 命令查看当前界面的信息:
em_t8811a_emmc:/ $ dumpsys window | grep mCurrentFocus
  mCurrentFocus=Window{33613e4 u0 com.baidu.haokan/com.baidu.haokan.app.activity.HomeActivity}
em_t8811a_emmc:/ $

这里 window{} 中就是这个界面的包名类名,包名就是:com.baidu.haokan

5、拿到包名之后,接下来就是卸载应用了,命令如下:

pm uninstall -k --user 0 packageName

这个命令的意思就是将用户 0 的 packageName 应用卸载掉。以上一步的com.baidu.haokan为例:

em_t8811a_emmc:/ $ pm uninstall -k --user 0 com.baidu.haokan
Success
em_t8811a_emmc:/ $

-k 表示保存数据,如不需要,可去掉 -k
--user 指定用户 id,Android 系统支持多个用户,默认用户只有一个,id=0

至此,系统预置的应用就被卸载了。部分情况下,有可能在设置 > 应用列表中看到“未针对此用户安装”的字样,这个没有影响,重启一下就没有了。


此笔记已推送到微信公众号:灰灰的Rom笔记

推荐阅读更多精彩内容