Android 10中出现‘No active admin’ SecurityException的解决办法
Google Play Console预启动报告Android 10设备管理权限异常问题
仅在Android 10(SDK 29)版本的预启动测试中出现以下错误:
java.lang.SecurityException: No active admin ComponentInfo{com.google.android.apps.mtaas.deviceadmin/com.google.android.apps.mtaas.deviceadmin.DeviceAdminReceiver}
完整错误堆栈信息:
Exception Process: com.google.android.apps.mtaas.deviceadmin, PID: 4380 java.lang.SecurityException: No active admin ComponentInfo{com.google.android.apps.mtaas.deviceadmin/com.google.android.apps.mtaas.deviceadmin.DeviceAdminReceiver} at android.os.Parcel.createException (Parcel.java:2088) at android.os.Parcel.readException (Parcel.java:2056) at android.os.Parcel.readException (Parcel.java:2004) at android.app.admin.IDevicePolicyManager$Stub$Proxy.setNetworkLoggingEnabled (IDevicePolicyManager.java:15305) at android.app.admin.DevicePolicyManager.setNetworkLoggingEnabled (DevicePolicyManager.java:11627) at com.google.android.apps.mtaas.deviceadmin.EnableNetworkLogging.onStart (EnableNetworkLogging.kt:27) at android.app.Instrumentation$InstrumentationThread.run (Instrumentation.java:2209) Caused by android.os.RemoteException: Remote stack trace: at com.android.server.devicepolicy.DevicePolicyManagerService.getActiveAdminWithPolicyForUidLocked (DevicePolicyManagerService.java:3259) at com.android.server.devicepolicy.DevicePolicyManagerService.getActiveAdminOrCheckPermissionForCallerLocked (DevicePolicyManagerService.java:3155) at com.android.server.devicepolicy.DevicePolicyManagerService.getActiveAdminForCallerLocked (DevicePolicyManagerService.java:3136) at com.android.server.devicepolicy.DevicePolicyManagerService.enforceCanManageScopeOrCheckPermission (DevicePolicyManagerService.java:7218) at com.android.server.devicepolicy.DevicePolicyManagerService.enforceCanManageScope (DevicePolicyManagerService.java:7204)
解决方案
- 检查设备管理员组件注册:确保
DeviceAdminReceiver在AndroidManifest.xml中正确配置,包含绑定权限、元数据和意图过滤器:
<receiver android:name="com.google.android.apps.mtaas.deviceadmin.DeviceAdminReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_config" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
对应的res/xml/device_admin_config.xml需声明所需设备管理策略,比如网络日志权限:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <network-logging /> </uses-policies> </device-admin>
- 验证管理员激活状态:调用
setNetworkLoggingEnabled前,通过DevicePolicyManager检查组件是否已激活:
val componentName = ComponentName(context, DeviceAdminReceiver::class.java) val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager if (!dpm.isAdminActive(componentName)) { // 引导用户激活设备管理员 val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply { putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName) putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "需要激活设备管理员以启用网络日志功能") } startActivity(intent) return } // 执行网络日志启用操作 dpm.setNetworkLoggingEnabled(componentName, true)
Android 10权限适配:Android 10收紧了设备管理权限,确保应用请求管理员权限的流程符合系统规范,避免在未激活状态下调用受限API。
预启动测试适配:在Google Play Console预启动测试流程中,确保测试场景包含设备管理员激活步骤,或调整测试逻辑,跳过未激活状态下的相关操作。
内容的提问来源于stack exchange,提问作者Diadem
相关产品推荐
相关产品推荐

