---- by Shengwen.Wei
一、 概述
随着移动互联网的发展,用户对于自身的信息安全越来越重视,基于此,android系统对于用户自身的信息安全特别是android M(6.0)以后,对于权限的管理尤为严格。
二、 高级权限的使用限制及解限
目前,android系统按照安全级别大致将权限分两种:一般权限、危险权限。
对于一般权限,该类权限基本不会涉及用户的使用信息,如蓝牙、NFC等权限;对于这类权限,开发者只需在AndroidMenifest.xml中注册即可;
而对于危险权限,如读写联系人、读写短信等等涉及到用户隐私信息的开发者不仅仅要在AndroidMenifest.xml中注册,还需要在代码中动态注册然后由用户决定是否允许进程是否能支持该种权限的使用甚至很多权限需要拿到系统权限才能使用,这里不做累述,下面介绍的是有部分高级权限即使apk有系统权限,google依然会将其列入黑名单中,影响的系统版本从android M以后开始;
比如<uses-permission android:name="android.permission.INSTALL_PACKAGES"/> ,这类权限即使App得到了系统级的管理权限,若apk预置于/system/app或/system/pri-app/目录下,还是会有其他问题的存在,如CTS、GTS通不过,那这类情况该如何解决呢?
这里就以笔者项目中用到的INSTALL_PACKAGES自动安装的权限来说明。
由于项目需求,在无忧换机app中使用了INSTALL_PACKAGES自动安装App的权限,起初并没有觉得什么不对,因为权限可以正常使用,APP也可以正常自动安装,但是随着项目的进行,当进行CTS、GTS的时候发现GTS并不能通过,log如下:
GtsInstallPackagesWhitelistDeviceTestCases
- com.google.android.installpackageswhitelist.gts.GtsInstallPackagesWhitelistDeviceTest#testInstallerPackagesAgainstWhitelist
com.google.android.installpackageswhitelist.gts.GtsInstallPackagesWhitelistDeviceTest#testInstallerPackagesAgainstWhitelistfail: junit.framework.AssertionFailedError: