Сделать мой DeviceAdminReceiver съемным - PullRequest
0 голосов
/ 07 июня 2018

Я пишу приложение xamarin для Android, которое использует API администратора устройства для реализации «режима киоска».Для этого я реализовал подкласс DeviceAdminReceiver и установил этот компонент в качестве администратора устройства с помощью команды adb "dpm set-device-owner".Я могу сделать это успешно.

Однако после того, как я сделал приложение администратором устройства, я не могу удалить приложение, не выполнив заводскую очистку, которая делает отладку настоящей питой.В выводе справки команды dpm говорится, что вы можете использовать подкоманду remove_active_admin для удаления администратора устройства, если в манифесте приложения объявлено android: testOnly.Я попытался сделать это с помощью атрибута приложения, например,

[Application(Debuggable = true, TestOnly = true )]
public class MyApp: Application
{
}

Однако свойство TestOnly недоступно для атрибута приложения в xamarin.

Мои вопросы ...

  1. Как добавить свойство testOnly в мой манифест в xamarin?
  2. Есть ли другой способ сделать мой DeviceAdminReceiver съемным?

Ниже приведены скриншоты из настроек-> Безопасность -> Меню администратора устройства.

  1. Показывает, что мой DeviceAdminReceiver успешно активирован.
  2. Показывает параметр удаления, выделенный серым цветом для моего DeviceAdminReceiver.
  3. Показывает другой DeviceAdminReceiverна моем устройстве с возможностью удаления включен.

Спасибо!

Обновление

Большое спасибо SushiHangover за ответ.Я хотел добавить, что если вы установите этот флаг в своем манифесте, apk больше не будет правильно устанавливаться при отладке проекта.Вместо этого вам придется использовать команду adb pm для установки пакета.Я сделал следующие скрипты, чтобы упростить установку / удаление apk.Примечание: команда dpm не работает, если корневое пространство имен начинается с заглавной буквы.

Для установки

adb push com.bla.myproject.apk /sdcard/app.apk
adb shell pm install -t /sdcard/app.apk
adb shell dpm set-device-owner com.bla.myproject/com.bla.myproject.AdminRx

Для удаления

adb shell dpm remove-active-admin com.bla.myproject/com.bla.myproject.AdminRx
adb shell pm uninstall com.bla.myproject

My DeviceAdminReceiver set as device administrator

Unable to remove my DeviceAdminReceiver

Different DeviceAdminReceiver, is able to be removed

1 Ответ

0 голосов
/ 07 июня 2018

Просто отредактируйте и добавьте его вручную в существующий манифест в папках Properties вашего проекта:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.sushihangover.Android_BottomBar">
    <uses-sdk android:minSdkVersion="16" />
    <application android:testOnly="true" android:label="@string/app_name" android:theme="@android:style/Theme.Holo.Light.DarkActionBar">
    </application>
</manifest>

Вместе с вашими ApplicationAtrributes:

#if DEBUG
    [Application(Debuggable = true, AllowBackup = false, Icon = "@mipmap/icon_debug")]
#else
    [Application(Debuggable = false, AllowBackup = true, Icon = "@mipmap/icon")]
#endif
    public class App : Application
    {
       ~~~

Они будутоба объединяются в процессе сборки и становятся:

~~~
<application android:testOnly="true" android:label="@string/app_name" android:theme="@android:style/Theme.Holo.Light.DarkActionBar" android:allowBackup="false" android:debuggable="true" android:icon="@mipmap/icon_debug" android:name="md59b195add2a2dc8f3ae98a691cd945df5.App">
    ~~~
</application>
~~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...