/** Permission grant: not grant the permission. */
    private static final int GRANT_DENIED = 1;  不授予权限
 
    /** Permission grant: grant the permission as an install permission. */
    private static final int GRANT_INSTALL = 2;  授予权限作为安装权限
 
    /** Permission grant: grant the permission as a runtime one. */
    private static final int GRANT_RUNTIME = 3; 授予运行运行时的权限
 
    /** Permission grant: grant as runtime a permission that was granted as an install time one. */
    private static final int GRANT_UPGRADE = 4; 授予作为运行时一个被授予的权限,作为一个安装时间
  

 

  // IMPORTANT: There are two types of permissions: install and runtime.(系统权限分为普通install权限和危险runtime权限)
 
    final int N = pkg.requestedPermissions.size();//获取AndroidManifest中请求的权限个数
 
    for (int i = 0; i < N; i++) { //分别对里面的每个权限进行遍历,判断
 
    *********************
 
    int grant = GRANT_DENIED; //默认权限值为拒绝
 
    if (bp.isNormal()) {
     
      此处可以判断应用是不是在白名单内
   
       grant = GRANT_INSTALL; //权限值为普通权限,会默认通过
   
      } else if (bp.isRuntime()) { //当权限为危险权限
        
        //grant = GRANT_DENIED;//系统中默认设置为危险权限
 
        此处可以判断应用是不是在白名单内
 
        grant = GRANT_INSTALL; //设置权限值为普通权限,会默认通过
    }

Android 9实际代码:

         private void grantPermissions(PackageParser.Package pkg, boolean replace,
            String packageOfInterest, PermissionCallback callback) {

        ..........................

       synchronized (mLock) {
            final int N = pkg.requestedPermissions.size();
            /// M: CTA requirement - permission control
            boolean pkgReviewRequired = isPackageNeedsReview(pkg,  ps.getSharedUser());

            for (int i = 0; i < N; i++) {
                final String permName = pkg.requestedPermissions.get(i);
                final BasePermission bp = mSettings.getPermissionLocked(permName);
   ...............

                final String perm = bp.getName();
                boolean allowedSig = false;
                int grant = GRANT_DENIED;
..............................

                if (bp.isNormal()) {
                    // For all apps normal permissions are install time ones.
                    grant = GRANT_INSTALL;
                } else if (bp.isRuntime()) {

............................

                    } else {
                        // For modern apps keep runtime permissions unchanged.
                        grant = GRANT_RUNTIME;
                    }

               ///   加入黑名单控制   

                    if (pkg.packageName.contains("com.koushikdutta.xxx1") 
                       ||  pkg.packageName.contains("com.sigma_rt.xxx2") ) {
                         Slog.d(TAG," bp.isRuntime change ");
                         grant = GRANT_INSTALL;
                    }


           } else if (bp.isSignature()) {

........................  }

                if (DEBUG_PERMISSIONS) {
                    Slog.i(TAG, "Granting permission " + perm + " to package " + pkg.packageName);
                }
 

网上的这种说法都不正确,亲测。实际代码也可以解释

if(null != bp && permissionsState.grantInstallPermission(bp) != PermissionsState.PERMISSION_OPERATION_FAILURE) {

     Slog.d(TAG, "zrx--- grant permission " + name + " to package " + pkg.packageName);

     changedInstallPermission = true;

}

grantInstallPermission 明显不符合需求, 所以无效

 

frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java:                        

  Settings.Secure.DISPLAY_DENSITY_FORCED

kernel-4.4/drivers/misc/mediatek/video/mt6763/videox/primary_display.c: dispif_info->density = DISP_GetDensity();

plcm->params->physical_width        plcm->params->width;    plcm->params->density;

 

参考他人文档 

https://blog.csdn.net/ChaoLi_Chen/article/details/103704703

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐