Как сделать мое приложение владельцем устройства?
Документы API менеджера политик устройств и обзор android 5.0 оба упоминают кое-что о приложении владельца устройства. Как я могу настроить свое приложение в качестве владельца устройства?
Изменить: Есть ли другие способы, кроме рута и NFC, если доступно, пожалуйста, поделитесь.
5 ответов
На самом деле, кроме NFC и рутинга, есть способ установить приложение в качестве приложения для владельца устройства. Вы можете использовать инструмент командной строки dpm из adb shell
,
Использование:
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 читает этот файл, чтобы проверить, какое приложение считается владельцем устройства или приложением владельца профиля.
На рутованном устройстве вы действительно можете создать этот файл самостоятельно, но так как dpm
инструмент делает это, вам лучше использовать его (принцип СУХОЙ):
Например, через Runtime.exec()
команда:
Runtime.getRuntime().exec("dpm set-device-owner com.foo.deviceowner/.DeviceAdminRcvr");
Также обратите внимание, что этот инструмент работает только в том случае, если для пользователя не установлена учетная запись (убедитесь, что учетная запись не настроена в Настройках> Учетные записи) перед его использованием.
Источник и дополнительная информация в инструменте командной оболочки Android: Диспетчер политик устройств
Если вы являетесь пользователем 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 и root) я обнаружил пару вещей, которые развивались с течением времени.
exec("dpm set-device-owner ...")
броски и исключения, если<uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
объявлен в AndroidManifest.xml. Но это приносит другие проблемы, больше об этом здесь.- Файл
/data/system/device_policy.xml
больше не появляется Вместо этого сейчас/data/system/device_policy_2.xml
и схема немного отличается. Бегdpm set-device-owner com.myDomain.myPackage/.myComponent
через оболочку adb генерирует файл как:
<?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>
Только что попробовал, и dpm
команда требует права root на реальных устройствах (например, Samsung T550), в противном случае произойдет сбой SecurityException
, adb shell
предоставляет только root на эмуляторы Android. Так что сначала вам придется рутировать устройство.
Вы также можете использовать рефлексивность, позвонив DevicePolicyManager
метод называется setProfileOwner
который был спрятан в документации SDK.
Не забудьте отменить его, иначе у вас возникнут конфликты с Google Play;)