日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MTK 添加自定义PMS权限 Patch

發布時間:2024/10/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。