使我的DeviceAdminReceiver可移动

时间:2018-06-07 18:39:18

标签: android xamarin xamarin.android device-admin

我正在为Android编写一个xamarin应用程序,它使用设备admin api来实现“kiosk模式”。为此,我实现了DeviceAdminReceiver的子类,并通过adb命令“dpm set-device-owner”将该组件设置为设备管理员。我能够成功地做到这一点。

但是,在我将应用程序设置为设备管理员之后,我无法在不进行工厂擦除的情况下删除应用程序,这使得调试成为真正的皮塔饼。 dpm命令帮助输出表示如果在应用程序清单中声明了android:testOnly,则可以使用remove_active_admin子命令删除设备管理员。我尝试通过例如Application属性执行此操作。

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

然而,在Xamarin的应用程序属性中没有TestOnly属性。

我的问题是......

  1. 如何将testOnly属性添加到xamarin中的清单?
  2. 这是否有另一种方法可以将我的DeviceAdminReceiver移除?
  3. 以下是“设置”中的屏幕截图 - >安全 - >设备管理员菜单。

    1. 显示我的DeviceAdminReceiver已成功激活。
    2. 显示我的DeviceAdminReceiver的灰色删除选项。
    3. 在我的设备上显示不同的DeviceAdminReceiver,并选择删除已启用。
    4. 谢谢!

      更新

      非常感谢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 :(得分:1)

只需编辑并手动将其添加到项目的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>
~~~