作为apk开发人员,经常会遇到要在已预装自家apk的设备上调试新版的apk,这时候就会遇到签名冲突或者已安装错误提示 INSTALL_FAILED_ALREADY_EXISTS。
这个时候就需要卸载掉该预装app。
由于预装app比较特殊,通常很难通过下面常用方法卸载掉:
方法一:用户通过遥控器在机顶盒上卸载,尝试卸载预装app时可能会提示“系统app,无法卸载”
方法二:通过adb 命令 “adb uninstall pacakgename”, 对于预装app, 通常操作结果是 “Failure”
对于需要版本迭代、调试的开发者或者QA,此时就需要通过其他方法卸载掉预装app。
经过多次实验,本人尝试出以下操作步骤可以卸载掉一部分设备上的预装app:
1. Adb 连接后 执行命令: adb shell
2. 查询安装包
#find . -name “packagename”
然后会list所有包含该packagename
然后手动到各个目录下执行 # rm -rf packagename
3. 查询预装apk的位置
#find . -name “package.apk”
执行完后通常会发现/system/app/ 或者/system/priv_app/ 目录下有之前预装进去的apk。这个apk文件必须删除,否则每次设备启动后系统去检查该预装app是否安装,如果没有安装,系统在启动时就会通过该apk完成安装。删掉该预装apk文件,系统再次启动时就不会安装了。
4. 删除预装apk文件
通常/system 目录下的文件无法正常删除的,会提示“Read only file system”
这时就需要通过命令”mount -o remount,rw /system” 来修改文件模式,使得只读模式变成可读写模式。
然后再到apk所在的目录 /system/app 或者/system/priv_app/ 下, 通过“rm -rf package.apk” 来删除该预装apk文件
完成上述步骤后,预装apk文件和安装好的目录都已删除掉了。重启下android 设备,再次adb 连接后,可以到安装目录/data/data/下查看到预装的app目录是否还在。
如果不存在,且查不到该app其他安装目录了,那么恭喜你!大功告成!