【问题标题】:adb dpm set-device-owner not working when installed outside of android studioadb dpm set-device-owner 在 android studio 之外安装时不起作用
【发布时间】:2022-02-18 18:56:01
【问题描述】:

我在尝试在我的 Android 设备上设置设备所有者时遇到问题。如果我通过点击播放按钮从 android studio 中将应用程序安装到物理设备上,我可以使用adb shell dpm set-device-owner package/.receiver 添加和删除设备所有者,而不会出现任何问题。我可以在 android studio 中或通过 cmd 执行此操作。

当我使用 apk 安装应用程序并手动安装或使用 android studio 之外的 adb 时,我无法再设置设备所有者。我总是收到错误Not allowed to set the device owner because there are already some accounts on the device

这是没有意义的,因为设备上没有帐户。我可以回到 android studio,在上面安装应用程序并再次运行 adb 命令,它就可以正常工作而无需执行任何其他操作。

我在这里迷路了,因为那里的错误似乎不正确,但我不知道为什么从 android studio 之外的 apk 安装不起作用。

编辑:一些注释

  • 我没有使用模拟器进行测试。当我说从 android studio 安装时,我的意思是直接安装到手机上,而不是模拟器上
  • 我有正确指向 xml 的清单 定义
  • 从 android studio 和 设置设备所有者,我将获得所有预期的权限
  • 当我从输出 apk 安装时,我不再能够设置设备 所有者(以前被清除,甚至尝试重新恢复 电话。帐户设置为空,未列出任何帐户)

【问题讨论】:

  • 添加了赏金,因为我对此没有任何帮助。我不相信我得到的错误是准确的。手机上没有帐户,如果重新恢复出厂设置,我会得到同样的结果。如果我直接从 android studio 重新安装应用程序作为调试,它就可以工作。仅在手动安装 APK 时才会失败。这是签名问题吗?
  • 您查看了这条评论吗?可能会有所帮助。 stackoverflow.com/a/44164769/9715339
  • 是的,我已经看到那个帖子了,谢谢。这不是帐户问题,因为在恢复出厂设置后已经测试过同样的问题。而且,如果我切换到通过 android studio 安装,即使它不是来自 apk 而不对设备进行任何更改,它也可以工作。
  • 已经曝光的一件事是,无论出于何种原因将 TestOnly 设置为 true 都将允许安装 apk,然后将其设置为设备所有者。这显然不理想,因为没有人应该只将应用程序留在测试中,但至少可以让我们走上一条道路
  • 仅供参考:source.android.com/compatibility/12/… 虽然您应该检查 CDD 以了解您支持的 Android 操作系统版本。

标签: android android-studio adb


【解决方案1】:

“不允许设置设备所有者,因为设备上已经有一些帐户”是指Settings > Passwords & accounts 中列出的任何帐户。这可能包括:

  • 谷歌
  • Gmail
  • 展望
  • 信号
  • 谷歌二重奏
  • 密码自动填充服务(Bitwarden、Lastpass 等)

您必须先从Settings > Passwords & accounts 页面中删除所有这些,然后才能设置设备/配置文件所有者。


更新:您可以通过查看adb logcat -b system 来检查正在发生的具体情况。请参阅 DevicePolicyManagerService 中的 hasIncompatibleAccountsOrNonAdbNoLock() 以获取有关要查找哪些日志的提示。


替代答案

如果您使用的 OEM/设备有什么特别之处(也许 Sonim 不允许安装非 testOnly DPM 应用程序),您可以尝试以“真实”方式安装您的 DPM 应用程序,即通过恢复出厂设置欢迎屏幕。

您可以通过NFCQr code 注册来做到这一点。

【讨论】:

  • @JeremyK 专门标记您以查看上面的更新。
  • 我们终于发现了这个问题。我们不知道 SIM 卡会添加一个对手机设置不可见的系统级帐户。取出 SIM 卡后,我们终于可以设置设备所有者了。将 testOnly 设置为 true 时,它​​忽略了 android studio 默认从那里启动的问题
  • @JeremyK 这很有趣!感谢您分享详细信息。
【解决方案2】:

我们终于找到了这个问题的原因。从 android studio 运行应用程序时,它会将 testOnly 标志设置为 true,这样做允许某些通常不会通过的事情。所以直到从 android studio 外部进行测试之前,我们都不知道有问题。

此问题:SIM 卡在 com.android.sim 包下添加了一个帐户,该帐户未显示在帐户设置中。所以对我们来说,手机似乎没有账户,因为它被隐藏了。

取出 SIM 卡后,我们终于可以设置设备所有者了。

感谢所有提出建议的人。

【讨论】:

    【解决方案3】:

    可能已经定义了设备所有者/管理员帐户。
    虽然这仅适用于模拟器......因为它是植根的。

    您所谓的“新恢复”在消费类设备上可能完全没有任何作用。

    【讨论】:

    • 我没有使用模拟器。我直接安装到设备上。我可以 100% 肯定地说,在尝试该命令时手机上没有帐户
    • 这是 Sonim 设备,恢复出厂设置绝对会清除所有以前的帐户。同样,如果您阅读了我的帖子,我可以在从 android studio 安装到手机时毫无问题地设置设备所有者,只有当我尝试从 apk 手动安装时
    • @JeremyK 在我看来,您似乎不知道自己在说什么。除非获得临时 root,否则您不会将设备所有者或管理员安装到任何设备上。而且总体趋势甚至是远离这一点......这就是为什么人们不能再向 Google 注册 DPC 应用程序了。
    • DevicePolicyManager 不需要生根。你在说什么?谷歌正在远离它以推动企业方法。然而,我们的解决方案要求我们走这条路,因为它是一个完全离线的解决方案。
    • @MartinZeitler “除非获得临时 root,否则您不会在任何设备上安装设备所有者或管理员。” - 这简直是不真实的。我在非根设备上使用自己的 MDM。您可以在恢复出厂设置后直接安装(通过 NFC 或二维码),也可以使用 ADB 命令安装。
    猜你喜欢
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多