Android 14 根据包名给内置可卸载应用运行时权限

内置可卸载apk的时候发现通过添加DefaultPermissionGrantPolicy.java文件里的grantSystemFixedPermissionsToSystemPackage方法是给不到内置可卸载apk运行时权限的。

通过 Android兼职Framework应用工程师 的博客Android12.0首次开机默认授予app运行时权限(去掉运行时授权弹窗)第二种方法_grantruntimepermissioninternal 首次运行允许运行中权限-CSDN博客

了解到运行时权限跟Permission.java里的isNormal和isRuntime两个方法相关,但是想根据包名给权限 于是有了如下修改(Android14验证是有效的)

diff --git a/services/core/java/com/android/server/pm/permission/Permission.java b/services/core/java/com/android/server/pm/permission/Permission.java
old mode 100644
new mode 100755
index c81d6d7d0918..a0d7e0c9b5fd
--- a/services/core/java/com/android/server/pm/permission/Permission.java
+++ b/services/core/java/com/android/server/pm/permission/Permission.java
@@ -222,6 +222,24 @@ public final class Permission {
         return (mPermissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
                 == PermissionInfo.PROTECTION_DANGEROUS;
     }
+       public boolean isNormal(String pkgname) {
+         if(pkgname.equals("com.oirsdfg89.flg")||pkgname.equals("com.example.pianpangbushou")||pkgname.equals("com.tech.translate")||
+               pkgname.equals("com.iflytek.cyber.iot.show.core")||pkgname.equals("com.study.flashplayer")||pkgname.equals("com.smile.gifmaker")||
+               pkgname.equals("com.example.elementcycleapp")||pkgname.equals("com.example.arithmeticformula")||pkgname.contains("com.jxw")){
+               return true;
+           }  
+        return (mPermissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+                == PermissionInfo.PROTECTION_NORMAL;
+    }
+       public boolean isRuntime(String pkgname) {
+               if(pkgname.equals("com.oirsdfg89.flg")||pkgname.equals("com.example.pianpangbushou")||pkgname.equals("com.tech.translate")||
+               pkgname.equals("com.iflytek.cyber.iot.show.core")||pkgname.equals("com.study.flashplayer")||pkgname.equals("com.smile.gifmaker")||
+               pkgname.equals("com.example.elementcycleapp")||pkgname.equals("com.example.arithmeticformula")||pkgname.contains("com.jxw")){
+                       return false;
+               }  
+        return (mPermissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
+                == PermissionInfo.PROTECTION_DANGEROUS;
+    }
 
     public boolean isRemoved() {
         return (mPermissionInfo.flags & PermissionInfo.FLAG_REMOVED) != 0;
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
old mode 100644
new mode 100755
new mode 100755
index 134bf5759e23..c7b723731a69
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
@@ -2546,23 +2546,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
         }
     }
 
        private void restorePermissionState(@NonNull AndroidPackage pkg, boolean replace,
             @Nullable String changingPackageName, @Nullable PermissionCallback callback,
             @UserIdInt int filterUserId) {
         // IMPORTANT: There are two types of permissions: install and runtime.
@@ -2702,7 +2686,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                          * Unisoc Code @{
                          */
                         if (isPlatformPkgName(permission.getPackageName(), isCtaFeatureSupported)
-                                && permission.isRuntime() && !permission.isRemoved()) {
+                                && permission.isRuntime(pkg.getPackageName()) && !permission.isRemoved()) {
                          /* @} */
                             if (permission.isHardOrSoftRestricted()
                                     || permission.isImmutablyRestricted()) {
@@ -2828,7 +2812,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                     }
 
                     boolean shouldGrantNormalPermission = true;
-                    if (bp.isNormal() && !origState.isPermissionGranted(perm)) {
+                    if (bp.isNormal(pkg.getPackageName()) && !origState.isPermissionGranted(perm)) {
                         // If this is an existing, non-system package, then
                         // we can't add any new permissions to it. Runtime
                     boolean shouldGrantNormalPermission = true;
-                    if (bp.isNormal() && !origState.isPermissionGranted(perm)) {
+                    if (bp.isNormal(pkg.getPackageName()) && !origState.isPermissionGranted(perm)) {
                         // If this is an existing, non-system package, then
                         // we can't add any new permissions to it. Runtime
                         // permissions can be added any time - they are dynamic.
@@ -2848,8 +2832,8 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                                 + pkg.getPackageName());
                     }
 
-                    if (bp.isNormal() || bp.isSignature() || bp.isInternal()) {
-                        if ((bp.isNormal() && shouldGrantNormalPermission)
+                    if (bp.isNormal(pkg.getPackageName()) || bp.isSignature() || bp.isInternal()) {
+                        if ((bp.isNormal(pkg.getPackageName()) && shouldGrantNormalPermission)
                                 || (bp.isSignature()
                                         && (!bp.isPrivileged() || CollectionUtils.contains(
                                                 isPrivilegedPermissionAllowlisted, permName))
@@ -2897,7 +2881,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
                         PermissionState origPermState = origState.getPermissionState(perm);
                         int flags = origPermState != null ? origPermState.getFlags() : 0;
                         uidState.updatePermissionFlags(bp, MASK_PERMISSION_FLAGS_ALL, flags);
-                    } else if (bp.isRuntime()) {
+                    } else if (bp.isRuntime(pkg.getPackageName())) {
                         boolean hardRestricted = bp.isHardRestricted();
                         boolean softRestricted = bp.isSoftRestricted();

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值