gtx com.google.android.xts.permissions.DefaultPermissionGrantPolicyTest -- testDefaultGrants fail

本文探讨了Android系统中默认权限授予策略导致的测试失败问题,特别是针对具有相同功能的多个应用之间的权限冲突,并提供了修改DefaultPermissionGrantPolicy的具体解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

com.google.android.xts.permissions.DefaultPermissionGrantPolicyTest
– testDefaultGrants

在log中可以中可以看到
junit.framework.AssertionFailedError: Permission:android.permission.READ_PHONE_STATE cannot be granted by default to package:com.deviceinfo.device_info
Permission:android.permission.WRITE_EXTERNAL_STORAGE cannot be granted by default to package:com.deviceinfo.device_info
Permission:android.permission.READ_EXTERNAL_STORAGE cannot be granted by default to package:com.deviceinfo.device_info
Permission:android.permission.ACCESS_COARSE_LOCATION cannot be granted by default to package:com.android.chrome
Permission:android.permission.ACCESS_FINE_LOCATION cannot be granted by default to package:com.android.chrome
Permission:android.permission.WRITE_EXTERNAL_STORAGE cannot be granted by default to package:com.android.dialer
Permission:android.permission.READ_EXTERNAL_STORAGE cannot be granted by default to package:com.android.dialer
Permission:android.permission.CAMERA cannot be granted by default to package:com.android.gallery3d
Permission:android.permission.WRITE_EXTERNAL_STORAGE cannot be granted by default to package:com.android.gallery3d
Permission:android.permission.READ_EXTERNAL_STORAGE cannot be granted by default to package:com.android.gallery3d

出现这种情况的主要原因是系统中存在 Browser + Chrome, Gallery3d + Google Photos ,Email + Gmail
分析:如果有两个相同功能应用的话,这样的权限只能grant给默认的应用,如果还有其它同样功能的应用,那么将不会默认获取到权限授权。所以就会测试失败。GTS失败是因为GTS的判断默认apk的标准和系统判别的标准不同导致的。我们也不太知晓它判断的标准
Solution
不要给任何app默认权限
frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
拿com.android.gallery3d 这个包为例在DefaultPermissionGrantPolicy.java找到如下代码:

            // Gallery
            Intent galleryIntent = new Intent(Intent.ACTION_MAIN);
            galleryIntent.addCategory(Intent.CATEGORY_APP_GALLERY);
            PackageParser.Package galleryPackage = getDefaultSystemHandlerActivityPackageLPr(
                    galleryIntent, userId);
            if (galleryPackage != null
                    && doesPackageSupportRuntimePermissions(galleryPackage)) {
             //cts   grantRuntimePermissionsLPw(galleryPackage, STORAGE_PERMISSIONS, userId);
              //cts  grantRuntimePermissionsLPw(galleryPackage, CAMERA_PERMISSIONS, userId);
            }

将 grantRuntimePermissionsLPw(galleryPackage, STORAGE_PERMISSIONS, userId); //read and write storage permission

       grantRuntimePermissionsLPw(galleryPackage, CAMERA_PERMISSIONS, userId); 

// camera permissiond
默认权限去掉即可pass

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值