在android方案定制中,如果需求是apk不可卸载,那么你肯定会想到一种解决办法,就是把apk内置在系统中,再给个系统签名,就噢了.嗯这确实是一种简单易用的方案,这样内置的app安装在系统的system/app/目录下,拥有系统权限,即是系统应用了.无法卸载,(当然,有root权限进去目录删除除外)

但是,但是来了,我今天给你们介绍一种直接安装也能实现无法卸载的处理办法,请听我细细道来,我们都知道在安装中直接在文件管理器中点击apk包去安装或者用adb命令的方式去安装,都是可以的,apk的安装路径是在data/app/目录下,这时apk也就是可卸载的,

首先介绍方案一, 我们可以在系统设置的应用列表的应用详情里把卸载按钮置为不可点击,或者直接隐藏掉这个按钮,但是如果是可以拖动卸载的呢,比如Lunahcer3,那不是每个地方都得处理,这里我们可以做个一次性解决的办法.android系统有个负责安装和卸载apk的服务应用PackageInstaller,在这里面我们可以去在卸载的地方,弹出输入密码框来进行确认卸载,

在packages/apps/PackageInstaller/src/com/android/packageinstaller/UninstallAppProgress.java 文件是具体的实现卸载的,如图

Android禁止卸载 安卓设置手机禁止卸载_adb命令

 这样就实现了,卸载通用api卸载,设置里点击卸载输入密码的功能了,可是这时候有人会问了,如果使用的是adb命令来卸载呢,adb uninstall com.*; 是啊,往往总有人不按常理出牌,没事,这就要引入我们的第二种方式了.

方案二,终极杀人魔,哈哈哈哈哈

adb uninstall 方式卸载apk,看源码是在frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java 这里执行的具体卸载实现的,那么我们是不是也可以做下处理呢,命令行的处理,听着高大上把

Android禁止卸载 安卓设置手机禁止卸载_Android禁止卸载_02

 然后我们可以在这个命令里判断,输入密码的话就可以使用Scanner,标准的输入输出流,哈哈,这就可以随便你发挥了,这样就也就可以实现,adb卸载密码同样保护的作用

Android禁止卸载 安卓设置手机禁止卸载_adb命令_03