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,


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部