MTK 添加自定义PMS权限 Patch
应用场景:
当时给客户做了很多API, 需要很多权限, 太麻烦了 , 索性添加了自定义权限 , 客户pp调用Api的时候只需要添加自定义权限即可。
Add custom permissions
1.Manifest.permission.CUSTOM_INTERFACE
2.PackageManager.INSTALL_PACKAGES_CUSTOM_INTERFACEdiff --git a/frameworks/base/core/java/android/content/pm/PackageManager.java b/frameworks/base/core/java/android/content/pm/Pack
old mode 100644
new mode 100755
index ef8f84b..6f3e16c
--- a/frameworks/base/core/java/android/content/pm/PackageManager.java
+++ b/frameworks/base/core/java/android/content/pm/PackageManager.java
@@ -819,6 +819,13 @@ public abstract class PackageManager {*/public static final int INSTALL_VIRTUAL_PRELOAD = 0x00010000;+ /**
+ * Flag parameter for {@link #installPackage} to indicate that this package
+ * is a virtual preload.
+ *
+ * @hide
+ */
+ public static final int INSTALL_PACKAGES_CUSTOM_INTERFACE = 0x00020000;/** @hide */@IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = {DONT_KILL_APP
diff --git a/frameworks/base/core/res/AndroidManifest.xml b/frameworks/base/core/res/AndroidManifest.xml
old mode 100644
new mode 100755
index 8c0da4f..d2c7d42
--- a/frameworks/base/core/res/AndroidManifest.xml
+++ b/frameworks/base/core/res/AndroidManifest.xml
@@ -2053,6 +2053,8 @@ +
diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/
old mode 100644
new mode 100755
index 899678b..20d5cb4
--- a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -5419,6 +5419,11 @@ public class PackageManagerService extends IPackageManager.Stub.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION, userId)) {return PackageManager.PERMISSION_GRANTED;}
+ //leon add start
+ if (permissionsState.hasPermission(Manifest.permission.CUSTOM_INTERFACE,userId)) {
+ return PackageManager.PERMISSION_GRANTED;
+ }
+ //leon add end} else {ArraySet perms = mSystemPermissions.get(uid);if (perms != null) {
@@ -5429,6 +5434,11 @@ public class PackageManagerService extends IPackageManager.Stub.contains(Manifest.permission.ACCESS_FINE_LOCATION)) {return PackageManager.PERMISSION_GRANTED;}
+ //leon add start
+ if (perms.contains(Manifest.permission.CUSTOM_INTERFACE)) {
+ return PackageManager.PERMISSION_GRANTED;
+ }
+ //leon add end}}}
@@ -14949,8 +14959,14 @@ public class PackageManagerService extends IPackageManager.Stub@Overridepublic void installPackageAsUser(String originPath, IPackageInstallObserver2 observer,int installFlags, String installerPackageName, int userId) {
- mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
-
+ //leon add start
+ final boolean isCustomInterface = ((installFlags & PackageManager.INSTALL_PACKAGES_CUSTOM_INTERFACE) != 0) ? true
+ if (isCustomInterface == false){
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
+ }else {
+ installFlags &= ~PackageManager.INSTALL_PACKAGES_CUSTOM_INTERFACE;
+ }
+ //leon add endfinal int callingUid = Binder.getCallingUid();enforceCrossUserPermission(callingUid, userId,true /* requireFullPermission */, true /* checkShell */, "installPackageAsUser");
@@ -19371,8 +19387,11 @@ public class PackageManagerService extends IPackageManager.Stubpublic void deletePackageVersioned(VersionedPackage versionedPackage,final IPackageDeleteObserver2 observer, final int userId, final int deleteFlags) {final int callingUid = Binder.getCallingUid();
- mContext.enforceCallingOrSelfPermission(
- android.Manifest.permission.DELETE_PACKAGES, null);
+ //leon add start
+ if((deleteFlags & PackageManager.INSTALL_PACKAGES_CUSTOM_INTERFACE) == 0){
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DELETE_PACKAGES, null);
+ }
+ //leon add endfinal boolean canViewInstantApps = canViewInstantApps(callingUid, userId);Preconditions.checkNotNull(versionedPackage);Preconditions.checkNotNull(observer);
@@ -19391,7 +19410,7 @@ public class PackageManagerService extends IPackageManager.Stubfinal int uid = Binder.getCallingUid();if (!isOrphaned(internalPackageName)
- && !isCallerAllowedToSilentlyUninstall(uid, internalPackageName)) {
+ && !isCallerAllowedToSilentlyUninstall(uid, internalPackageName)&& ((deleteFlags & PackageManager.INSTALL_PACKAGtry {final Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);intent.setData(Uri.fromParts(PACKAGE_SCHEME, packageName, null));
@@ -19449,17 +19468,17 @@ public class PackageManagerService extends IPackageManager.Stubif (doDeletePackage) {if (!deleteAllUsers) {returnCode = deletePackageX(internalPackageName, versionCode,
- userId, deleteFlags);
+ userId, (deleteFlags & (~PackageManager.INSTALL_PACKAGES_CUSTOM_INTERFACE)));//leon modify} else {int[] blockUninstallUserIds = getBlockUninstallForUsers(internalPackageName, users);// If nobody is blocking uninstall, proceed with delete for all usersif (ArrayUtils.isEmpty(blockUninstallUserIds)) {returnCode = deletePackageX(internalPackageName, versionCode,
- userId, deleteFlags);
+ userId, (deleteFlags & (~PackageManager.INSTALL_PACKAGES_CUSTOM_INTERFACE)));//leon modify} else {// Otherwise uninstall individually for users with blockUninstalls=false
- final int userFlags = deleteFlags & ~PackageManager.DELETE_ALL_USERS;
+ final int userFlags = (deleteFlags & ~PackageManager.DELETE_ALL_USERS) & (~PackageManager.INSTALL_PAfor (int userId : users) {if (!ArrayUtils.contains(blockUninstallUserIds, userId)) {returnCode = deletePackageX(internalPackageName, versionCode,
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
