如何使我的应用程序成为设备所有者



设备策略管理器API文档和android 5.0概述都提到了设备所有者应用程序。如何将我的应用程序设置为设备所有者

编辑:除了生根和NFC,还有其他方法吗?如果可以的话,请分享。

实际上,除了NFC和root之外,还有一种方法可以将应用程序设置为设备所有者应用程序。您可以从adb shell使用dpm命令行工具。

用法:

usage: dpm [subcommand] [options]
usage: dpm set-device-owner <COMPONENT>
usage: dpm set-profile-owner <COMPONENT> <USER_ID>
dpm set-device-owner: Sets the given component as active admin, and its package as device owner.
dpm set-profile-owner: Sets the given component as active admin and profile owner for an existing user.

UPDATE:dpm实用程序实际上非常简单。其目标是在/data/system/device_owner.xml下创建一个名为device_owner.xml的新文件,该文件引用设备/配置文件所有者应用程序。

Android平台随后读取此文件,以检查哪个应用程序被视为设备所有者配置文件所有者应用程序

在根设备上,您确实可以自己创建此文件,但由于dpm工具正在执行此操作,您最好使用它(DRY原则):

例如通过Runtime.exec()命令:

Runtime.getRuntime().exec("dpm set-device-owner com.foo.deviceowner/.DeviceAdminRcvr");

还要注意,只有在使用前未为用户设置帐户(请确保在设置>帐户中未设置帐户),此工具才能工作。

安卓shell命令工具上的源代码和更多信息:设备策略管理器

如果您是设备的root用户,您可以按照此方法成为设备所有者。

首先,创建一个包含以下内容的文件device_owner.xml

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<device-owner package="your.owner.app.package.id" name="Your app name" />

现在执行以下步骤

  1. adb push device_owner.xml /sdcard/

  2. adb shell

  3. su

  4. cp /sdcard/device_owner.xml /data/system/

  5. cd /data/system/

  6. chown system:system device_owner.xml

  7. 重新启动

注意:在重新启动设备之前,请确保您安装了应用程序,您正试图使其成为设备所有者。如果您不这样做,您将获得无限时间的引导动画。

更新:

在我的Android 7.1.2机顶盒(AOSF和root)上,我发现了一些随着时间的推移而演变的东西。

  1. exec("dpm set-device-owner ...")抛出和异常,除非在AndroidManifest.xml中声明了<uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />。但这会带来其他问题,更多信息请参阅此处
  2. 文件/data/system/device_policy.xml不再出现。相反,现在是/data/system/device_policy_2.xml,模式略有不同。通过adb shell运行dpm set-device-owner com.myDomain.myPackage/.myComponent会生成如下文件:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<root>
<device-owner package="com.myDomain.myPackage" name="" component="com.myDomain.myPackage/com.myDomain.myPackage.myComponent" userRestrictionsMigrated="true" />
</root>

您还可以通过调用隐藏在SDK文档中的名为setProfileOwnerDevicePolicyManager方法来使用自反性。

别忘了取消它,否则你会和Google Play发生一些冲突;)

刚刚尝试过,dpm命令需要在实际设备上具有root权限(例如Samsung T550),否则SecurityException将失败。adb shell仅在android模拟器上授予root权限。因此,您必须首先root设备。

相关内容

  • 没有找到相关文章

最新更新