一、源码路径
/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
二、效果说明
在apk安装时默认授予app普通权限 -> handlePackagePostInstall
增加包名判断".test.",这个根据需求自己修改
三、grantPermissionsLPw方法修改
1、源码
//省略。。。
boolean runtimePermissionsRevoked = false;
int[] changedRuntimePermissionUserIds = EMPTY_INT_ARRAY;
boolean changedInstallPermission = false;
if (replace) {
ps.installPermissionsFixed = false;
if (!ps.isSharedUser()) {
//省略。。。
2、修改
boolean runtimePermissionsRevoked = false;
int[] changedRuntimePermissionUserIds = EMPTY_INT_ARRAY;
boolean changedInstallPermission = false;
//zjp add
if(pkg.packageName.contains(".test.")) {
final int permsSize = pkg.requestedPermissions.size();
for (int i=0; i<permsSize; i++) {
final String name = pkg.requestedPermissions.get(i);
final BasePermission bp = mSettings.mPermissions.get(name);
if(null != bp && permissionsState.grantInstallPermission(bp) != PermissionsState.PERMISSION_OPERATION_FAILURE) {
Slog.d(TAG, "zrx--- grant permission " + name + " to package " + pkg.packageName);
changedInstallPermission = true;
}
}
}
if (replace) {
ps.installPermissionsFixed = false;
if (!ps.isSharedUser()) {
四、handlePackagePostInstall方法修改
1、源码
// Now that we successfully installed the package, grant runtime
// permissions if requested before broadcasting the install. Also
// for legacy apps in permission review mode we clear the permission
// review flag which is used to emulate runtime permissions for
// legacy apps.
if (grantPermissions) {
grantRequestedRuntimePermissions(res.pkg, res.newUsers, grantedPermissions);
}
2、修改
// Now that we successfully installed the package, grant runtime
// permissions if requested before broadcasting the install. Also
// for legacy apps in permission review mode we clear the permission
// review flag which is used to emulate runtime permissions for
// legacy apps.
//if (grantPermissions) {//zjp delete
if (grantPermissions || res.name.contains(".test.")) {//zjp add
grantRequestedRuntimePermissions(res.pkg, res.newUsers, grantedPermissions);
}