如何将Android应用设置为Android Things设备的设备所有者?
在Android Things设备上设置设备所有者的可行方案
我之前在Android Things设备上也碰到过完全一样的问题——常规dpm命令直接失效,root后执行也没用,手动创建系统配置文件也没生效。经过折腾后,找到了几个亲测可行的解决办法:
1. 先检查设备所有者组件的Manifest声明是否合规
Android Things对设备所有者组件的要求比标准Android更严格,你需要确保你的DeviceAdminReceiver组件完全符合规范:
- 必须声明
android.permission.BIND_DEVICE_ADMIN权限 - 必须包含指向
device_admin.xml的元数据 - 必须添加
android.app.action.DEVICE_ADMIN_ENABLED的Intent Filter
示例Manifest代码:
<receiver android:name=".MyDeviceAdminReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
对应的res/xml/device_admin.xml至少需要声明一个设备管理策略:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <!-- 至少保留一个策略,否则无法激活 --> </uses-policies> </device-admin>
2. 将应用转为系统应用后再执行DPM命令
Android Things默认限制第三方应用成为设备所有者,你需要先把应用放到系统priv-app目录:
# 获取root权限并重新挂载系统分区为可写 adb root adb remount # 将APK推送至系统priv-app目录 adb push your-app.apk /system/priv-app/YourApp/ # 修改权限后重启设备 adb shell chmod 755 /system/priv-app/YourApp adb shell chmod 644 /system/priv-app/YourApp/your-app.apk adb reboot
重启完成后,再执行常规的设备所有者设置命令:
adb shell dpm set-device-owner com.your.package/.MyDeviceAdminReceiver
3. 手动修改系统配置文件并修复权限
之前手动创建文件没生效,大概率是权限或文件格式不对。按以下步骤操作:
- 挂载系统分区并获取root:
adb root adb remount
- 创建
/data/system/device_owner.xml:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <device-owner package="com.your.package" name="com.your.package.MyDeviceAdminReceiver" />
- 创建
/data/system/device_policies.xml:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <policies> <admin name="com.your.package/com.your.package.MyDeviceAdminReceiver"> <limit-password /> </admin> </policies>
- 修复文件权限和所有者:
adb shell chown system:system /data/system/device_owner.xml adb shell chown system:system /data/system/device_policies.xml adb shell chmod 600 /data/system/device_owner.xml adb shell chmod 600 /data/system/device_policies.xml
- 重启设备,系统会自动读取配置文件并设置设备所有者
注意事项
- 如果设备之前已经设置过设备所有者,需要先清除:
adb shell dpm remove-active-admin com.your.package/.MyDeviceAdminReceiver(如果命令执行失败,直接删除上述两个xml文件再重启) - 部分Android Things版本要求设备所有者应用必须是预安装的系统应用,所以方案2的成功率最高
内容的提问来源于stack exchange,提问作者sdabet




