一、环境
高通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,
安装应用时,默认给权限,请查阅另外一篇博客: