![](/img/trans.png)
[英]How to make my app device owner without NFC and ADB shell command?
[英]How to make my app a device owner?
实际上除了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.
更新: dpm
实用程序实际上非常简单。 它的目标是创建一个名为新文件device_owner.xml
下/data/system/device_owner.xml
引用设备/配置文件所有者的应用程序。
Android平台随后将读取此文件以检查哪个应用程序被视为设备所有者或配置文件所有者应用程序 。
在root设备上 ,您确实可以自己创建此文件 ,但由于dpm
工具正在执行此操作,因此您最好使用它(DRY原则):
例如,通过Runtime.exec()
命令:
Runtime.getRuntime().exec("dpm set-device-owner com.foo.deviceowner/.DeviceAdminRcvr");
另请注意,只有在用户未设置帐户(确保在设置>帐户中未设置帐户 )之前,此工具才有效。
Android 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" />
现在执行以下步骤
adb push device_owner.xml /sdcard/
adb shell
su
cp /sdcard/device_owner.xml /data/system/
cd /data/system/
chown system:system device_owner.xml
重启
注意:在重新启动设备之前,请确保已安装了您尝试设备所有者的应用程序。 如果你不这样做,你将获得无限时间的启动动画。
更新:
在我的Android 7.1.2机顶盒(AOSF和rooted)上,我发现了一些随着时间的推移而发展的东西。
exec("dpm set-device-owner ...")
抛出异常,除非在AndroidManifest.xml中声明<uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
。 但这带来了其他问题,更多关于此问题 。 /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文档中隐藏的名为setProfileOwner
的DevicePolicyManager
方法来使用自反性。
不要忘记取消它,否则你会与Google Play发生冲突;)
刚试过, dpm
命令需要在真实设备上使用root权限(例如Samsung T550),否则它将因SecurityException
而失败。 adb shell
只在Android模拟器上授予root权限。 所以你必须首先根设备。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.