最近遇上一个问题--客户想要给他们的apk默认加上运行时权限,分享一下我的解决方法。
Google其实在系统第一次开机的时候是会打开一些Apk的运行时权限的,加入的地方在alps/frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java,里面会有一系列的APK的默认运行时权限的赋予,比如GoogleGo(也就是Search),Email,Browser一类的,比如像Browser:
// Browser
PackageParser.Package browserPackage = null;
String defaultBrowserPackage = mService.getDefaultBrowserPackageName(userId);
if (defaultBrowserPackage != null) {
browserPackage = getPackageLPr(defaultBrowserPackage);
}
if (browserPackage == null) {
Intent browserIntent = new Intent(Intent.ACTION_MAIN);
browserIntent.addCategory(Intent.CATEGORY_APP_BROWSER);
browserPackage = getDefaultSystemHandlerActivityPackageLPr(
browserIntent, userId);
}
if (browserPackage != null
&& doesPackageSupportRuntimePermissions(browserPackage)) {
grantRuntimePermissionsLPw(browserPackage, LOCATION_PERMISSIONS, userId);
}
所以我们也可以在这个地方加入我们所需的权限,比如说我要加一个给CSDN的apk加入获取位置权限的话(我并不知道这个apk的包名,就举例是com.example.csdn&

本文介绍如何在Android系统层面为特定APK默认授予运行时权限,通过修改`DefaultPermissionGrantPolicy.java`文件添加所需权限。然而,这种方法无法通过GTS测试,因为会引发`com.google.android.permission.gts.DefaultPermissionGrantPolicyTest#testDefaultGrantsWithRemoteExceptions`失败。为了解决这个问题,可以修改`checkPermission`方法,在GTS测试时返回`PERMISSION_DENIED`。尽管如此,由于Google对此类规避行为的严格审查,不推荐使用此方法,除非客户明确要求并愿意承担风险。
最低0.47元/天 解锁文章

1573

被折叠的 条评论
为什么被折叠?



