Skip to content

DO 免删账号激活设备所有者 ​

适用版本:Android 13 及以上。 Android 12 及以下不适用本文方案。

设备所有者(Device Owner,简称 DO)是 AxManagerD 最高权限的提权通道之一。网上流传的说法是"激活 DO 必须先删掉设备上所有账号",实际上这只是其中一条调用通道的规则,并非系统对 DO 的普遍要求。

本文说明 AxManagerD 实际采用的免删账号方案:全程不读写任何账号数据,仅在几秒内调整一次开机向导状态。

前言:校验分成两条通道 ​

系统在发放设备所有者权限前,要先过一次状态校验。这段校验根据**"是谁在调用"**分成两条分支,两条分支读取的东西完全不同:

通道调用身份校验读取的内容
ADB 通道ADB / 电脑调试身份读取这台设备上已登录的账号列表
应用通道应用自身身份不读账号列表,只读两项:
① 设备所有者的用户是不是系统用户
② 这台设备有没有走完开机向导

也就是说,"必须删账号"只是 ADB 那条分支的规则。应用走的是另一条分支,判定依据里根本没有账号这一项。

核心:为什么不用删账号 ​

只要调用发生在"应用自身身份"这条分支上,账号存在与否根本不参与判断,所以不需要删任何账号。

走应用通道时,需要同时满足的只有两项:

  1. 设备所有者的目标用户是系统用户
  2. 设备"看起来"已经走完开机向导

第 1 项在正常设备上天然成立;需要处理的只有第 2 项。

向导状态的两份副本 ​

"开机向导是否完成"这同一个状态,系统里记了两份:

位置性质是否参与校验
系统设置持久保存不参与
系统内存运行时缓存参与

这里有两个关键特性,决定了方案的做法:

  • 校验只看内存里这份,设置里那份完全不参与判断。
  • 内存那份只单向变化:它只会从"未完成"变成"已完成",不会自己变回去。

由此可以推出一个反直觉的结论:

单改设置里的值,门不会开。

因为校验读的是内存副本,改设置只是改了一份没人看的记录,内存里的判定依据没有任何变化。

同步指令 ​

系统里有一条只做同步的指令。它的特殊性在于:

  • 它不参与判断,不会自己触发校验
  • 它只做一件事:按设置里的值原样覆盖内存副本

执行它之后,内存副本就等于设置里的值。这正是打通两步的关键——先用设置决定"应该是什么值",再用同步指令让内存副本接受这个值。

完整链路 ​

整个流程共 5 步,耗时以秒计:

  1. 写入设置:用 shell 身份把设置里的向导状态写成"未完成"
  2. 同步内存:应用执行同步指令,把内存副本刷成"未完成"
  3. 条件齐备:此时校验的两项全部满足——目标用户是系统用户,向导状态为未完成
  4. 发起激活:应用以自身身份调用设置设备所有者的接口,一次成功
  5. 恢复原状:随后把设置里的值恢复成"已完成",内存副本一并恢复

第 5 步是必须的,且执行时机很紧——成功拿到 DO 后立刻回滚,把设备状态还原成正常。

过程中的实际影响 ​

在设置处于"未完成"的那几秒里,系统会认为设备还没完成初始化,表现是:

行为状态
Home 键被按住(不响应)
最近任务键被按住(不响应)
返回键正常
手势导航正常

值恢复成"已完成"后,按键行为立即恢复正常,不需要重启,不需要重新登录,也不会留下任何需要手动清理的状态。

实际操作时建议:这几秒内不要锁屏、不要切后台、不要拔电源,等提示成功后再操作设备。

账号数据的安全性 ​

这是本方案与"删账号"方案最本质的区别:

  • 不删除账号
  • 不退出登录
  • 不清除账户数据
  • 系统里保存的账号从头到尾没有被读写过

整条链路里,没有任何一步涉及账号数据库。所谓"必须删账号"的限制,在这条调用通道上压根不存在。

前提条件 ​

项目要求
Android 版本13 及以上
提权通道已激活 Shizuku(提供 shell 身份)
设备状态未激活过 DO / PO / DP
账号无要求,登录状态不影响

实测情况 ​

该方案已实装在 AxManagerD 中。多名 Android 13 以上的测试人员均测试成功,激活过程中账号保持登录、数据完整无损。

排查思路 ​

如果激活没有成功,按链路顺序定位:

第 1 步失败(设置写不进去) shell 身份没拿到,或 Shizuku 授权未生效。检查 Shizuku 状态、AxManagerD 是否已获得 Shizuku 权限。

第 2 步后仍报"已有账号" 说明调用实际落在了 ADB 通道上,而不是应用自身身份。检查调用方身份,确认是由应用内部发起的调用,而不是通过 adb shell 或外部终端转发。

第 4 步报 already has a device owner 设备上已有 DO 残留,需要先清除旧的绑定,再重新走链路。

第 4 步报 Unknown admin AdminReceiver 组件名不匹配,确认应用里声明的 receiver 与调用时传入的组件一致。

激活后按键仍异常 第 5 步回滚没有执行到位。重新同步一次状态,或重启设备让内存副本重新初始化。

安全提示 ​

  • DO 是设备级最高权限,激活后应用可执行恢复出厂、强制锁屏、禁用相机等操作,请确认应用来源可信。
  • 本方案依赖系统内部的状态缓存行为,不同 ROM 实现可能存在差异,升级系统后需重新验证。
  • 不要在设置处于"未完成"状态时中断流程,务必让回滚步骤执行完毕。