安卓如何实现应用防卸载、无管理员权限禁止恢复出厂设置
Android 类儿童模式防卸载/防恢复出厂实现方案
普通第三方应用无系统级权限的前提下不可能实现你要的效果,同类儿童监护应用走的都是Android官方开放的设备管理权限体系,没有黑科技,具体实现路径按管控强度分两级:
基础管控:设备管理员权限方案
适合普通场景,能拦截普通用户在系统设置内的常规卸载、恢复出厂操作:
- 首先声明设备管理员组件
在项目res/xml目录下新建device_admin_config.xml,声明需要的管控策略:
接着在<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <wipe-data/> <force-lock/> <reset-password/> </uses-policies> </device-admin>AndroidManifest.xml里注册设备管理员广播接收器:<receiver android:name=".AdminReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_config"/> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/> </intent-filter> </receiver> - 引导管理员账号主动激活设备管理员权限,激活后系统会自动把应用的卸载按钮置灰,普通用户无法直接走常规路径卸载。
- 恢复出厂拦截:激活带
wipe-data权限的设备管理员后,普通用户在设置中点击恢复出厂选项时,系统会直接提示权限不足,无法执行操作。可以额外加一层兜底:监听系统页面跳转,检测到用户进入恢复出厂相关页面时,直接调用设备管理员接口触发锁屏,只有输入管理员预设的密码才能解锁继续操作,兼容不同厂商ROM的逻辑差异。
强管控:设备所有者(Device Owner)方案
要达到和主流儿童监护应用一致的管控强度(即使用户进Recovery模式双清也无法绕过、无法强制停用管理员权限),需要把应用设置为设备所有者,这是Android给MDM、儿童监护类应用开放的最高等级设备管理权限:
- 激活设备所有者后,普通用户完全无法在设置中关闭应用的管理员权限,也无法卸载应用,全局恢复出厂操作会被强制拦截,只有管理员在你的应用内完成身份校验后,才能主动触发卸载、恢复出厂操作。
- 普通消费级设备可以通过ADB命令完成激活,执行命令:
adb shell dpm set-device-owner 你的应用包名/.AdminReceiver;如果是定制ROM设备,可以直接把应用预置为系统分区应用,默认授予设备所有者权限,不需要用户手动操作。
踩坑提醒
- 不要尝试用进程保活、拦截卸载广播这类民间野路子方案,Android 6.0之后系统已经完全封堵了这类非官方实现路径,要么完全不生效,要么会被系统判定为恶意应用直接查杀。
- 所有权限激活流程必须明确告知用户,由管理员主动操作授权,隐瞒用户偷偷激活管控权限会违反应用商店规则,也符合恶意软件的判定特征。
内容的提问来源于stack exchange,提问作者Sanjay Kakadiya
相关产品推荐
相关产品推荐

