背景

安卓的应用卸载,可以在桌面进行滑动或者使用应用管理器卸载,这是最常见的卸载方法。

卸载解锁

对于预装的应用,通常进行停用或使用adb命令为当前用户卸载,这样至少自己是看不见了,但是并没有真正的卸载掉,软件包还在系统分区内,系统或者adb命令可以恢复。

通常情况下到这一步就够了,如果实在洁癖则需要root,修改系统分区内文件彻底卸载。

有时候我们会遇到adb卸载不掉软件的状况,就可以考虑是不是软件厂商用了今天这种方法进行了限制

卸载上锁

有的时候我们会需要主动对应用进行卸载上锁,防止app误删,如果家里有小孩或者手机要给不熟悉的人用的场景下,上卸载锁可以有效的保护我们的数据。

常见的方法如下:

1.root将软件移到系统分区,修改包名变成系统软件。治标治本,但是门槛和代价较大。

2.设备管理器应用可以防止卸载

3.本次的方法,adb命令上卸载锁。

方法来自酷安分享,源作者:https://github.com/WuDi-ZhanShen

方法

电脑打开powershell

启动adb

(adb安装参考之前的文章)

adb pair 192.168.x.x:port code #adb配对
adb connect 192.168.x.x #adb连接

adb调试

adb shell #exit退出
am monitor #安卓设备上打开软件查看包名,按q退出

shell模式下管理卸载锁

service call package [code] s16 [package name] i32 1 i32 0
#上锁
#返回结果Result: Parcel( 00000000 00000001   '........')

service call package [code]+1 s16 [package name] i32 0
#锁状态查看

service call package [code] s16 [package name] i32 0 i32 0
#解锁
#返回结果Result: Parcel( 00000000 00000001   '........')

service call package [code] s16 [package name] i32 [0/1] i32 [userid]
#多用户的卸载锁,多开应用好像属于其它用户

其中service是安卓调试的一个常用命令,call就是调用,package是安装管理器

[code]需要替换为系统对应的数字,具体安卓版本对应数字如下

安卓版本

14

13

12

11

10

9

8.1

8.0

7.1.2

code

134

133

136

136

156

151

152

151

145

数字查询方法:
查看安卓源代码中的/frameworks/base/core/java/android/content/pm/IPackageManager.aidl
从定义方法开始,找到setBlockUninstallForUser函数,记录一下这个函数是第几个函数即可。

但行好事,莫问前程。