我正在为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属性。
我的问题是......
以下是“设置”中的屏幕截图 - >安全 - >设备管理员菜单。
谢谢!
非常感谢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
答案 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>
~~~