让你相见恨晚的android权限业务实践

在上一篇Android权限中,我们介绍了一些权限相关的知识,也简述了新的Android M带来的权限变化,我们如何应对这种变化?是摆着我们面前的紧要问题。

现在我们的业务的targetSdkVersion是小于23的,如果有一天我们需要升级到23,那么如何保证业务能按之前一样功能正常?

对我们来说,当升级到23后,在业务需要使用某项权限的时候,会弹窗让用户选择,当用户拒绝权限的时候,我们的业务如果没有正常处理,极有可能会导致程序异常,比如出现各种crash、页面异常显示、操作无响应等等问题。

针对上面的疑问,我们做了如下的工作:

主要分三大部分:梳理权限及功能的对应关系、屏蔽权限测试影响、机型权限检查,如下图。

下面分别介绍三部分实际的内容:

一、业务权限梳理

1.1梳理出业务所有权限

通过以下的手段把业务的权限列表梳理出来:

  1. 获取业务本身自己的权限

可以通过PackageManager.getPackageInfo.(pkgName, PackageManager.GET_PERMISSIONS).requestedPermissions获取到。

 2. 获取其他业务的权限

可以通过Android XmlResourceParser解析AndroidManifest.xml文件获取到。

 1.2找出各权限和功能的对应关系

可以通过和相应功能的开发进行沟通确定。

确定不了的,需要查看对应功能代码,找出关键的触发权限的API,参考这篇文档:
http://dx.doi.org/10.1145/2046707.2046779,这个是老外总结的api和权限对应关系,Google没有给出这个关系。

二、利用Xposed屏蔽权限进行测试

2.1安装Xposed框架安装器

前提:手机需要root过。

Xposed 框架需要使用安装器进行安装,所以我们需要先安装Xposed 框架安装器,安装完成打开后点击框架(如图中红框位置),进行框架的安装。

点击后进入框架安装、升级界面,我们点击“安装/更新”,会出现ROOT授权提示,许可即可。Xposed 框架安装完成后重启手机才能激活,可直接点击重启也可手动重启。

2.2安装权限修改器

安装Permission Master权限修改器,网上可以直接下载到。

2.3选用模块

勾选后模块就开始发挥作用了。

2.3选择应用,打开/禁止权限后测试

禁止/允许某个权限后,对权限相应的功能进行测试,看功能是否正常。

三、权限检查

针对Android的权限机制,做了一个简单的权限检查DEMO,主要功能如下:

  1. 根据输入的权限,检查手机上该权限是否可用。
  2. 如果权限不可用,尝试申请下该权限,返回结果。

3.1 targetSdkVersion、compileSdkVersion配置

在build.gradle中可以灵活的指定targetSdkVersion、compileSdkVersion版本,如果需要检查6.0以上的系统,请都设置成23,如6.0以下的,请根据实际项目情况设置。

3.2 检查输入

我们把所有待检查的权限都放到一个列表数组中,比如

做完后续的检查输入源。

3.3开始检查

如果是23版本的,使用checkSelfPermission进行检查,否则使用checkCallingOrSelfPermission进行检查,当然也可以直接用v4兼容库的ContextCompat.checkSelfPermission(),这样就不需要区分版本了。

当没有权限的时候,我们尝试用v4兼容库的ActivityCompat.requestPermissions去申请权限,根据onRequestPermissionsResult返回的结果来写结果文件。

提示:23版本的在demo运行的时候,可能会弹权限提示框。

附上一个简单的流程图:

3.4结果输出

根据权限列表,可以给出在某一机型上实际的权限结果。

比如:

通过权限检查,在机型A上得出了如下结果:

机型:A

固件版本:*

权限检查情况:

根据上面的权限和功能的梳理,我们得出弹窗、快捷方式对应的功能

在结合Xposed屏蔽权限后的测试结果

综合以上这些,基本可以评估业务在该机型上的表现结果了。

本章完~