Android-Framework 清除应用用户数据,不清除权限

一、环境

高通865 Android 10

二、具体详情

现象:默认赋予第三方应用的权限,在应用信息中清理用户数据的时候,权限也会被清理掉;

希望:只清理数据,保留权限

相关源码修改如下:

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,

安装应用时,默认给权限,请查阅另外一篇博客:

Android-Framework 默认给安装的应用赋权限-CSDN博客

猜你喜欢

转载自blog.csdn.net/banzhuantuqiang/article/details/134206685