MTK 添加自定义PMS权限 Patch
生活随笔
收集整理的這篇文章主要介紹了
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 @@<!-- ==================================================== --><eat-comment />+ <permission android:name="android.permission.CUSTOM_INTERFACE" + android:protectionLevel="normal"/><!-- Allows applications to read the sync settings.<p>Protection level: normal--> 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<String> 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,總結
以上是生活随笔為你收集整理的MTK 添加自定义PMS权限 Patch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 常用的函数记录
- 下一篇: MTK Read/Write Ether