如何仅为Android instrumentation test正确添加PACKAGE_USAGE_STATS权限
仅为androidTest添加PACKAGE_USAGE_STATS权限的解决步骤
- 第一步:移除build.gradle中手动配置的androidTest manifest sourceSet
AGP 3.0及以上版本默认会自动读取src/androidTest/AndroidManifest.xml文件并和主Manifest合并,手动配置路径极易导致测试Manifest未被正确打包进测试APK,直接删除如下配置即可:sourceSets { androidTest { manifest.srcFile 'src/androidTest/AndroidManifest.xml' } } - 第二步:修正androidTest目录下的AndroidManifest.xml配置
新版AGP使用build.gradle中定义的namespace生成包名,Manifest中手动声明的package属性会被忽略,错误的package声明会导致权限绑定异常,修改后Manifest内容如下:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" /> </manifest> - 第三步:卸载旧的测试包避免缓存冲突
执行命令卸载已安装的测试包,防止旧版本缓存影响权限声明:adb uninstall com.example.dummy.test - 第四步:重新编译安装测试APK
重新构建测试包并安装到设备,可直接通过Android Studio运行测试用例触发自动安装,也可手动执行构建命令安装。 - 第五步:验证权限声明状态
执行以下命令确认测试包已正确声明该权限:
如果输出中包含该权限,说明声明已生效。adb shell dumpsys package com.example.dummy.test | grep android.permission.PACKAGE_USAGE_STATS - 第六步:重新执行权限授予命令
此时不会再出现权限未申请的报错,测试应用即可正常使用该权限获取应用运行状态。adb shell pm grant com.example.dummy.test android.permission.PACKAGE_USAGE_STATS
内容的提问来源于stack exchange,提问作者Yulia
相关产品推荐
相关产品推荐

