一次性搞定 Android 设备管理员授权问题

前言

对于安卓玩家以及对使用体验比较有要求的用户来说,获取设备管理员是很常见的。许多冻结应用或管理系统的软件都需要用到这个权限,就例如 冰箱 这个软件。最近换了新手机,在正常激活冰箱为设备管理员的过程中遇到了一些问题。花了不少时间去查阅资料并解决问题。在此向各位分享完整的检查步骤与解决方案。

问题原因

首先,简单解释一下本文面向解决的问题。安卓系统在授权某特定软件为设备管理员时需要确保设备中没有用户登录,否则就会返回错误。所以本文主要讲解的是如何检查并清除设备中登录的账户以及用户。

当然,最简单的方法就是 恢复出厂设置。通常的方法是 打开设置 -> 然后找到账户 -> 退出里面的所有账户,以及 关闭应用分身 / 访客模式 / MIUI 优化等等,部分手机还需要拔掉 SIM 卡(不过这些在冰箱的文档里面应该都有写)。不过通常如果这样子就能解决,大家大概就不会来网上查教程了罢.. 所以今天还是要分享一些不一样的。(当然,还包含一个额外解决方法)


检查设备中用户

  • 首先下载 ADB 调试软件,然后连接上自己的手机。
  • 然后输入 adb shell pm list users 来查询设备中存在的用户

    adb-fastboot-tools> adb shell pm list users
    Users:
          UserInfo{0:机主:4c13} running
          UserInfo{999:FlymeParallelSpace:1010} running

    此处的 ID 为 0 的就是机主号,无需处理(如果显示的是乱码是命令行编码问题)。我们只需要删除额外的账户即可

  • 使用 adb shell pm remove-user <用户ID> 命令删除多余的用户。
    例如删除用户 999:adb shell pm remove-user 999。 注意删除可能会影响某些功能,注意文件的备份。
  • 重复操作直到只留下机主账户。

完成上面的步骤后,你可以试着再次授权一次,如果成功了就可以开香槟了。如果仍然不成功就跟着继续下一步操作。

检查设备中账户登录

同样,设备中的账户登录也会影响到设备管理员授权。所以我们也使用 ADB 来将它们找出来。

  • 完成手机与 ADB 调试软件的链接。
  • 使用命令 adb shell dumpsys account列出设备中登录的账户。

    adb-fastboot-tools> adb shell dumpsys account
    User UserInfo{0:机主:4c13}:
    Accounts: 6
      Account {name=xxxxxx, type=com.google}
      Account {name=xxxxxx, type=com.meizu.account}
      Account {name=xxxxxx, type=com.android.email}
      Account {name=xxxxxx, type=net.pixiv}
      Account {name=xxxxxx, type=com.twitter.android.auth.login}
      Account {name=xxxxxx, type=com.github.android}
  • 使用命令 adb shell pm clear <应用包名> 删除账户。
    例如 adb shell pm clear com.github.android
  • 重复直到设备上的账户数量为 0 。

通常,操作到这一步你就应该能正常授权设备管理员了。但如果还不行的话... 先别急,还有一张底牌。

特殊情况

在部分安卓设备中,你需要使用不同的命令来授权管理员:

在大多数安卓设备中,命令可能是这样的:adb shell dpm set-device-owner
但你或许可以试试看用另一个命令:adb shell dpm set-profile-owner

是的,就是这样,十分简单。你只需要将软件的授权命令简单修改一下,例如下面的冰箱授权命令:

// 原版
adb shell dpm set-device-owner --user current --name IceBoxcom.catchingnow.icebox/.receiver.DPMReceiver

// 修改后
adb shell dpm set-profile-owner --user current --name IceBoxcom.catchingnow.icebox/.receiver.DPMReceiver

如果软件提供的激活命令是执行某个脚本,例如冰箱官方提供的:

adb shell sh /sdcard/Android/data/com.catchingnow.icebox/files/start.sh

请获取到脚本中的命令文本并在 ADB 中执行。

目前已知的有这种情况的设备是帖子中提到的 Nord 20 5G 以及我使用的 MEIZU 21,也是找了好久才最终找到了这个解决方案。
如果有更多的问题与解决方法也欢迎在评论中分享!


参考资料

New Comment

Comments

暂无评论