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