Android-Framework clears application user data without clearing permissions

1. Environment

Qualcomm 865 Android 10

2. Specific details

Phenomenon: Permissions are granted to third-party applications by default. When clearing user data in application information, the permissions will also be cleared;

Hope: Only clean data, retain permissions

The relevant source code modifications are as follows:

frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -4064,6 +4064,8 @@ public class ActivityManagerService extends IActivityManager.Stub
     @Override
     public boolean clearApplicationUserData(final String packageName, boolean keepState,
             final IPackageDataObserver observer, int userId) {
+        //not remove Permission        
+        keepState=true;
         enforceNotIsolatedCaller("clearApplicationUserData");
         int uid = Binder.getCallingUid();
         int pid = Binder.getCallingPid();
@@ -4748,7 +4750,7 @@ public class ActivityManagerService extends IActivityManager.Stub
         }
 
         // Remove transient permissions granted from/to this package/user
-        mUgmInternal.removeUriPermissionsForPackage(packageName, userId, false, false);
+       // mUgmInternal.removeUriPermissionsForPackage(packageName, userId, false, false);
 
         if (doit) {
             for (i = mBroadcastQueues.length - 1; i >= 0; i--) {
   
   

 frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

                         InstallArgs args = data.args;
                         PackageInstalledInfo parentRes = data.res;
 
-                        final boolean grantPermissions = (args.installFlags
-                                & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;
+                        // final boolean grantPermissions = (args.installFlags
+                        //         & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;
+                        final boolean grantPermissions = true;
                         final boolean killApp = (args.installFlags
                                 & PackageManager.INSTALL_DONT_KILL_APP) == 0;
                         final boolean virtualPreload = ((args.installFlags
@@ -19953,7 +19954,7 @@ public class PackageManagerService extends IPackageManager.Stub
             }
 
             PackageSetting ps = (PackageSetting) pkg.mExtras;
-            resetUserChangesToRuntimePermissionsAndFlagsLPw(ps, userId);
+            //resetUserChangesToRuntimePermissionsAndFlagsLPw(ps, userId);
         }
 
         clearAppDataLIF(pkg, userId,

When installing an application, permissions are given by default. Please refer to another blog:

Android-Framework grants permissions to installed applications by default - CSDN Blog

Guess you like

Origin blog.csdn.net/banzhuantuqiang/article/details/134206685