【发布时间】:2018-06-07 18:39:17
【问题描述】:
我正在为 android 编写一个 xamarin 应用程序,它使用设备管理 api 来实现“kiosk 模式”。为此,我实现了 DeviceAdminReceiver 的子类,并通过 adb 命令“dpm set-device-owner”将该组件设置为设备管理员。我能够成功地做到这一点。
但是,在我将应用程序设置为设备管理员后,我无法在不执行工厂擦除的情况下删除该应用程序,这使得调试成为真正的皮塔饼。 dpm 命令帮助输出表明,如果在应用清单中声明了 android:testOnly,您可以使用 remove_active_admin 子命令删除设备管理员。我试图通过例如 Application 属性来做到这一点。
[Application(Debuggable = true, TestOnly = true )]
public class MyApp: Application
{
}
但是,TestOnly 属性在 xamarin 中的应用程序属性上不可用。
我的问题是……
- 如何将 testOnly 属性添加到我在 xamarin 中的清单中?
- 还有其他方法可以让我的 DeviceAdminReceiver 可移动吗?
以下是设置 -> 安全 -> 设备管理员菜单的屏幕截图。
- 显示我的 DeviceAdminReceiver 已成功激活。
- 我的 DeviceAdminReceiver 的删除选项显示为灰色。
- 在我的设备上显示不同的 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
【问题讨论】:
标签: android xamarin xamarin.android device-admin