背景
安卓的应用卸载,可以在桌面进行滑动或者使用应用管理器卸载,这是最常见的卸载方法。
卸载解锁
对于预装的应用,通常进行停用或使用adb命令为当前用户卸载,这样至少自己是看不见了,但是并没有真正的卸载掉,软件包还在系统分区内,系统或者adb命令可以恢复。
通常情况下到这一步就够了,如果实在洁癖则需要root,修改系统分区内文件彻底卸载。
有时候我们会遇到adb卸载不掉软件的状况,就可以考虑是不是软件厂商用了今天这种方法进行了限制
卸载上锁
有的时候我们会需要主动对应用进行卸载上锁,防止app误删,如果家里有小孩或者手机要给不熟悉的人用的场景下,上卸载锁可以有效的保护我们的数据。
常见的方法如下:
1.root将软件移到系统分区,修改包名变成系统软件。治标治本,但是门槛和代价较大。
2.设备管理器应用可以防止卸载
3.本次的方法,adb命令上卸载锁。
方法来自酷安分享,源作者:
方法
电脑打开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]需要替换为系统对应的数字,具体安卓版本对应数字如下
数字查询方法:
查看安卓源代码中的/frameworks/base/core/java/android/content/pm/IPackageManager.aidl
从定义方法开始,找到setBlockUninstallForUser函数,记录一下这个函数是第几个函数即可。