Android 8支持6.0以下APP运行时权限

需求

运行时权限Runtime Permission是Android6.0才引入的,在6.0及以上的SDK中运行Android 5及以下的
APP是不支持运行时权限的,而是会默认获取到权限。
因为CTA入网认证需要让Android 6以下的APP也要有权限管理,因需要修改SDK源码。
不同版本表示不同,可看下另外一篇文章:
Android各版本运行时权限(Runtime Permission )表现

实现

第一步,禁用安装Android 6以下的APP会默认获取权限的功能

diff --git a/base/services/core/java/com/android/server/pm/PackageInstallerService.java b/base/services/core/java/com/android/server/pm/PackageInstallerService.java
index 1fa37b91..3a3433c9 100644
--- a/base/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/base/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -436,6 +436,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
             params.installFlags |= PackageManager.INSTALL_FROM_ADB;
 
         } else {
+            mAppOps = mContext.getSystemService(AppOpsManager.class);
             mAppOps.checkPackage(callingUid, installerPackageName);
 
             params.installFlags &= ~PackageManager.INSTALL_FROM_ADB;
@@ -705,6 +706,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
     @Override
     public ParceledListSlice<SessionInfo> getMySessions(String installerPackageName, int userId) {
         mPm.enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false, "getMySessions");
+        mAppOps = mContext.getSystemService(AppOpsManager.class);
         mAppOps.checkPackage(Binder.getCallingUid(), installerPackageName);
 
         final List<SessionInfo> result = new ArrayList<>();
diff --git a/base/services/core/java/com/android/server/pm/PackageManagerService.java b/base/services/core/java/com/android/server/pm/PackageManagerService.java
index aa43008b..5f0f66a4 100644
--- a/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -2279,8 +2279,9 @@ public class P

猜你喜欢

转载自blog.csdn.net/zmlovelx/article/details/129219054