展讯FAQ95979:

我们在进行Google GTS DefaultPermissionGrantPolicyTest测试时,有时会遇见类似如下的报错log:

failed: testDefaultGrants(com.google.android.xts.permissions.DefaultPermissionGrantPolicyTest)
Permission:android.permission.ACCESS_COARSE_LOCATION cannot be granted by default to package:com.android.camera2
I TestRunner:
Permission:android.permission.ACCESS_FINE_LOCATION cannot be granted by
default to package:com.android.camera2

 下面就以上面的Camera应用的LOCATION_PERMISSIONS权限报错为例,分析如何解决GTS DefaultPermissionGrantPolicyTest报错问题。GTS DefaultPermissionGrantPolicyTest 出错的原因可以归纳为四类,您可以逐一排查解决。1、跑GTS测试前已经手动授予了该权限有时候在跑GTS测试前曾经打开过该应用,而该应用会有提示框问是否允许授予某个权限,当您同意之后再跑GTS测试时就会失败。排查是该原因导致GTS测试失败的方法:请将手机恢复出厂设置,然后单测case DefaultPermissionGrantPolicyTest,请注意在这次跑GTS测试前,如果弹出了权限申请的对话框,一定要点拒绝,否则会导致GTS测试失败!如果测试成功,说明是该原因导致的,否则的话请进行下面的排查。2、在DefaultPermissionGrantPolicy.java文件中修改了权限相关的代码有时候您在源码/frameworks/base/services/core/java/com/android/server/pm/目录下的DefaultPermissionGrantPolicy.java中添加了权限相关的代码,给应用多授予了权限,如下所示:原始版本代码:// CameraIntent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);PackageParser.Package cameraPackage = getDefaultSystemHandlerActivityPackageLPr(cameraIntent, userId);if (cameraPackage != null&& doesPackageSupportRuntimePermissions(cameraPackage)) {grantRuntimePermissionsLPw(cameraPackage, CAMERA_PERMISSIONS, userId);grantRuntimePermissionsLPw(cameraPackage, MICROPHONE_PERMISSIONS, userId);grantRuntimePermissionsLPw(cameraPackage, STORAGE_PERMISSIONS, userId);}修改后版本代码:// CameraIntent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);PackageParser.Package cameraPackage = getDefaultSystemHandlerActivityPackageLPr(cameraIntent, userId);if (cameraPackage != null&& doesPackageSupportRuntimePermissions(cameraPackage)) {grantRuntimePermissionsLPw(cameraPackage, CAMERA_PERMISSIONS, userId);grantRuntimePermissionsLPw(cameraPackage, MICROPHONE_PERMISSIONS, userId);grantRuntimePermissionsLPw(cameraPackage, STORAGE_PERMISSIONS, userId);grantRuntimePermissionsLPw(cameraPackage, LOCATION_PERMISSIONS, userId);//新加的代码}如上所示,给Camera应用添加了授予LOCATION_PERMISSIONS权限的逻辑,会导致GTS 测试失败。排查是该原因导致GTS测试失败的方法:直接打开DefaultPermissionGrantPolicy.java文件或者使用Beyond Compare、meld等对比工具比较新旧版本的差异,撤销所有对权限相关的代码修改。然后,在frameworks/base/services/目录下mm ,编译生成serivces.jar,将其push 至手机的system/framework/目录中,之后手机恢复出厂设置,然后单测case DefaultPermissionGrantPolicyTest,请注意在这次跑GTS测试前,如果弹出了权限申请的对话框,一定要点拒绝,否则会导致GTS测试失败!如果成功,说明是该原因导致的,否则的话请进行下面的排查。3、版本编译出了sprd-app-perms.xml请将手机连接电脑,然后使用命令 adb shell  , ls system/etc ,看看system/etc目录下是否存在sprd-app-perms.xml文件,存在的话使用命令 busybox vi ls system/etc/sprd-app-perms.xml,会看到类似如下的代码:
如果出现类似以上的情形,应该是该手机版本在system/etc目录下编译出了sprd-app-perms.xml,正常情况下只有CMCC版本才会编译出该文件。排查是该原因导致GTS测试失败的方法:打开源码/frameworks/base/services/core/java/com/android/server/pm/目录下的DefaultPermissionGrantPolicy.java,找到函数grantDefaultPermissions(int userId)的实现如下:public void grantDefaultPermissions(int userId) {grantPermissionsToSysComponentsAndPrivApps(userId);grantDefaultSystemHandlerPermissions(userId);grantSprdSystemPermissions(userId);//去掉这一行
}

去掉 grantSprdSystemPermissions(userId);这一行代码,即函数grantDefaultPermissions(int userId)的实现变成:

public void grantDefaultPermissions(int userId) {grantPermissionsToSysComponentsAndPrivApps(userId);grantDefaultSystemHandlerPermissions(userId);
}然后在frameworks/base/services/目录下mm ,编译生成serivces.jar,将其push 至手机的system/framework/目录中,之后手机恢复出厂设置,然后单测case DefaultPermissionGrantPolicyTest,请注意在这次跑GTS测试前,如果弹出了权限申请的对话框,一定要点拒绝,否则会导致GTS测试失败!如果测试成功,说明是该原因导致的,否则的话请进行下面的排查。4、在手机里面预置了多个同种功能的应用   在6.0版本中,有时候您在编译版本时预置了多个同种功能的应用,例如预置了两个music应用,并且使用的GTS测试包是3.0_r2及以上的版本,再去跑GTS测试,有可能会fail。排查是该原因导致GTS测试失败的方法:看看您的手机里面是否多预置以下的同种功能的应用:Music、 Camera 、 Email 、Browser、 Gallery 、Maps 、Calendar、Contacts、 Dialer、SMS 、SetupWizard、 Cell Broadcast Receiver、Carrier Provisioning Service、Device provisioning 、Downloads UI CertInstaller,可以删除多预置的应用,之后编译新的版本进行烧机,然后单测case DefaultPermissionGrantPolicyTest,如果成功,说明是该原因导致的。如果您既想保留预置的多个同种功能的应用又想通过GTS测试,可以使用以下方案:在6.0源码/frameworks/base/services/core/java/com/android/server/pm/目录下的DefaultPermissionGrantPolicy.java中,将函数getDefaultSystemHandlerActivityPackageLPr( Intent intent, int userId)的实现改为如下内容:

private PackageParser.Package getDefaultSystemHandlerActivityPackageLPr(
Intent intent, int userId) {
ResolveInfo handler = mService.resolveIntent(intent,
intent.resolveType(mService.mContext.getContentResolver()),
PackageManager.GET_DISABLED_COMPONENTS, userId);
if (handler == null || handler.activityInfo == null) {
return null;
}
ActivityInfo activityInfo = handler.activityInfo;
if (activityInfo.packageName.equals(mService.mResolveActivity.packageName)
&& activityInfo.name.equals(mService.mResolveActivity.name)) {
return null;
}
return getSystemPackageLPr(handler.activityInfo.packageName);
}

修改后,在frameworks/base/services/目录下mm ,编译生成serivces.jar,将其push 至手机的system/framework/目录中,之后手机恢复出厂设置,然后单测case DefaultPermissionGrantPolicyTest,请注意在这次跑GTS测试前,如果弹出了权限申请的对话框,一定要点拒绝,否则会导致GTS测试失败! 如果经过以上四步排查,GTS  DefaultPermissionGrantPolicyTest测试失败的问题依然还不能解决,您可以另提CQ,同时你可以向展讯FAE提供如下文件以更好地解决该问题,

(1)在GTS DefaultPermissionGrantPolicyTest 失败的手机上执行 adb shell dumpsys package com.android.XXX > dumppackage.txt,上传dumppackage.txt;

(2)将源码frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java文件上传;
(3)如果手机system/etc/目录下有sprd-app-perms.xml,请上传该文件。

GTS DefaultPermissionGrantPolicyTest测试失败原因分析相关推荐

  1. 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )

    文章目录 一.使用 DexClassLoader 获取组件类失败报错 二.失败原因分析 一.使用 DexClassLoader 获取组件类失败报错 在上一篇博客 [Android 逆向]启动 DEX ...

  2. Solidworks异型孔打孔失败原因分析

    Solidworks异型孔打孔失败原因分析 在使用异型孔给钣金件打孔时,弹出下面的对话框没有找到有效的用于生成装饰螺纹的边线 原因分析 底孔设置问题,按照正常的钻孔攻螺纹经验,一般材料攻M8的螺纹孔, ...

  3. RV1108 EMMC 程序下载失败原因分析

    RV1108 EMMC 程序下载失败原因分析 目录 RV1108 EMMC 程序下载失败原因分析 1. 出现的现象 硬件环境 表现出的问题 2. 原因查找 检查硬件 3. rv1108 bootloa ...

  4. 梦幻西游 登入不显示服务器失败怎么办,《梦幻西游三维版》登录不进去怎么解决 登录失败原因分析...

    导 读 梦幻西游三维版登录不进去如何解决想必还有不少小伙伴不太清楚,一起往下看九游小编整理的图文介绍,一起来看看吧. 梦幻西游三维版中,登录不进去解决办法有两种,第一种:稍等片刻再尝试登录即可.第二种 ...

  5. Github注册详细教程(含失败原因分析)

    目录 前言 注册失败原因分析(若没时间请直接跳到下一步) 正确步骤(PC与手机一样) 跋文 前言 Github是我们程序员学习和开发必备的网站之一,资源很丰富.之前没接触过开发,都只是在这个网站上下载 ...

  6. VONR语音呼叫失败原因分析案例

    现象概述 SA站点开通后,配合核心网进行VoNR业务调试,现场测试发现手机正常显示5G HD,但是发起语音电话会回落4G网络,无法在5G网络上进行语音业务. 流程图 原因分析 后台核查5G站点VONR ...

  7. Linux系统编程:lseek扩展文件大小失败原因分析

    lseek函数原型 off_t lseek(int fd, off_t offset, int whence); 我们知道lseek可以显式地为一个打开文件设置偏移量.我们可以在文件末尾往后继续偏移, ...

  8. 淘宝网首页登录失败原因分析及解决…

    本文分析及解决淘宝网首页登录失败等上网问题,希望对大家有所帮助.淘宝网首页登陆失败原因,登录地址可以参考另外一篇文章:淘宝网相关登录地址汇总 一:浏览器本身的故障导致不能登录 现象:什么网站都打不开, ...

  9. HTTP下载文件校验失败原因分析与解决

    从7月中旬左右,我们客户端更新失败率由原来的2%上升到10%.更新后台数据统计显示更新失败中的90%为HTTP下载失败,具体的失败原因是文件下载完成后MD5与服务器预期的MD5不匹配. 在着手调查解决 ...

最新文章

  1. sql server 2005 sa登录失败解决方法
  2. php代码执行相关函数,关于当前PHP脚本运行时系统信息相关函数
  3. 全志和瑞芯微比较_哪家强_全志瑞芯微海思PK 智能芯片哪家强?
  4. 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
  5. 在CentOS6.5上安装Tomcat6
  6. 4.2 One-Shot 学习
  7. IBM携手三菱东京日联银行 将区块链用于合同管理
  8. IntelliJ IDEA for CleanCode
  9. linux 字幕制作工具,Arctime for Linux免费字幕软件
  10. mysql现象_Mysql编程中的怪现象
  11. 【数据标准】数据指标体系建立
  12. 【Excle】在方框内打勾
  13. 企业为什么着急签三方_学校又在催我签三方了、三方协议很重要吗、签完三方能毁约吗……...
  14. 我的世界服务器水流动配置文件,我的世界后台的水流动命令是什么
  15. python正态分布函数_数学之美_正态分布(Python代码)
  16. 【APICloud系列|16】苹果开发者账号如何更改双重认证的手机号
  17. 淘宝店铺装修代码大全
  18. 数学漫游 - 向量投影和最小二乘法
  19. 年度榜单!我整理了2020年优质的Python文章和资源。
  20. 自媒体运营中千万不能做的四件事情

热门文章

  1. Node.js学习笔记一
  2. android6.0升级名单,首批安卓6.0升级名单一览 有你的份吗?
  3. 微信属于计算机软件的应用软件吗,微信“卡”谁才说的算? 微信自测程序告诉你...
  4. 机器视觉之图像基础知识,让计算机去理解获取数字图像与视频中的信息
  5. 在Eclipse中编译运行Android4.3应用源码——Launcher2和Gallery2
  6. 计算机主机分为几部分,计算机系统的三大组成部分
  7. 2019年春季面试题
  8. 详解Python之find函数的使用
  9. c# oracle参数化查询,C#对Oracle数据库的语句进行参数化
  10. SpringBoot报错The bean ‘XXXDao‘, defined in null, could not be registered,overriding is disabled的问题