You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将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. 手动修改系统配置文件并修复权限

之前手动创建文件没生效,大概率是权限或文件格式不对。按以下步骤操作:

  1. 挂载系统分区并获取root:
adb root
adb remount
  1. 创建/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" />
  1. 创建/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>
  1. 修复文件权限和所有者:
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
  1. 重启设备,系统会自动读取配置文件并设置设备所有者

注意事项

  • 如果设备之前已经设置过设备所有者,需要先清除:adb shell dpm remove-active-admin com.your.package/.MyDeviceAdminReceiver(如果命令执行失败,直接删除上述两个xml文件再重启)
  • 部分Android Things版本要求设备所有者应用必须是预安装的系统应用,所以方案2的成功率最高

内容的提问来源于stack exchange,提问作者sdabet

火山引擎 最新活动