GTS DefaultPermissionGrantPolicyTest测试失败原因分析
展讯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测试失败原因分析相关推荐
- 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )
文章目录 一.使用 DexClassLoader 获取组件类失败报错 二.失败原因分析 一.使用 DexClassLoader 获取组件类失败报错 在上一篇博客 [Android 逆向]启动 DEX ...
- Solidworks异型孔打孔失败原因分析
Solidworks异型孔打孔失败原因分析 在使用异型孔给钣金件打孔时,弹出下面的对话框没有找到有效的用于生成装饰螺纹的边线 原因分析 底孔设置问题,按照正常的钻孔攻螺纹经验,一般材料攻M8的螺纹孔, ...
- RV1108 EMMC 程序下载失败原因分析
RV1108 EMMC 程序下载失败原因分析 目录 RV1108 EMMC 程序下载失败原因分析 1. 出现的现象 硬件环境 表现出的问题 2. 原因查找 检查硬件 3. rv1108 bootloa ...
- 梦幻西游 登入不显示服务器失败怎么办,《梦幻西游三维版》登录不进去怎么解决 登录失败原因分析...
导 读 梦幻西游三维版登录不进去如何解决想必还有不少小伙伴不太清楚,一起往下看九游小编整理的图文介绍,一起来看看吧. 梦幻西游三维版中,登录不进去解决办法有两种,第一种:稍等片刻再尝试登录即可.第二种 ...
- Github注册详细教程(含失败原因分析)
目录 前言 注册失败原因分析(若没时间请直接跳到下一步) 正确步骤(PC与手机一样) 跋文 前言 Github是我们程序员学习和开发必备的网站之一,资源很丰富.之前没接触过开发,都只是在这个网站上下载 ...
- VONR语音呼叫失败原因分析案例
现象概述 SA站点开通后,配合核心网进行VoNR业务调试,现场测试发现手机正常显示5G HD,但是发起语音电话会回落4G网络,无法在5G网络上进行语音业务. 流程图 原因分析 后台核查5G站点VONR ...
- Linux系统编程:lseek扩展文件大小失败原因分析
lseek函数原型 off_t lseek(int fd, off_t offset, int whence); 我们知道lseek可以显式地为一个打开文件设置偏移量.我们可以在文件末尾往后继续偏移, ...
- 淘宝网首页登录失败原因分析及解决…
本文分析及解决淘宝网首页登录失败等上网问题,希望对大家有所帮助.淘宝网首页登陆失败原因,登录地址可以参考另外一篇文章:淘宝网相关登录地址汇总 一:浏览器本身的故障导致不能登录 现象:什么网站都打不开, ...
- HTTP下载文件校验失败原因分析与解决
从7月中旬左右,我们客户端更新失败率由原来的2%上升到10%.更新后台数据统计显示更新失败中的90%为HTTP下载失败,具体的失败原因是文件下载完成后MD5与服务器预期的MD5不匹配. 在着手调查解决 ...
最新文章
- sql server 2005 sa登录失败解决方法
- php代码执行相关函数,关于当前PHP脚本运行时系统信息相关函数
- 全志和瑞芯微比较_哪家强_全志瑞芯微海思PK 智能芯片哪家强?
- 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
- 在CentOS6.5上安装Tomcat6
- 4.2 One-Shot 学习
- IBM携手三菱东京日联银行 将区块链用于合同管理
- IntelliJ IDEA for CleanCode
- linux 字幕制作工具,Arctime for Linux免费字幕软件
- mysql现象_Mysql编程中的怪现象
- 【数据标准】数据指标体系建立
- 【Excle】在方框内打勾
- 企业为什么着急签三方_学校又在催我签三方了、三方协议很重要吗、签完三方能毁约吗……...
- 我的世界服务器水流动配置文件,我的世界后台的水流动命令是什么
- python正态分布函数_数学之美_正态分布(Python代码)
- 【APICloud系列|16】苹果开发者账号如何更改双重认证的手机号
- 淘宝店铺装修代码大全
- 数学漫游 - 向量投影和最小二乘法
- 年度榜单!我整理了2020年优质的Python文章和资源。
- 自媒体运营中千万不能做的四件事情
热门文章
- Node.js学习笔记一
- android6.0升级名单,首批安卓6.0升级名单一览 有你的份吗?
- 微信属于计算机软件的应用软件吗,微信“卡”谁才说的算? 微信自测程序告诉你...
- 机器视觉之图像基础知识,让计算机去理解获取数字图像与视频中的信息
- 在Eclipse中编译运行Android4.3应用源码——Launcher2和Gallery2
- 计算机主机分为几部分,计算机系统的三大组成部分
- 2019年春季面试题
- 详解Python之find函数的使用
- c# oracle参数化查询,C#对Oracle数据库的语句进行参数化
- SpringBoot报错The bean ‘XXXDao‘, defined in null, could not be registered,overriding is disabled的问题