android权限代码分析(三)

4 :apk四个权限配置

使用eclipse创建两个demo,为test1和test2。我们使用test2来进行调用test1,来进行验证这几个权限的限制问题。

4.1第一种情况,不配置,默认可以随意调用。

Test1的AndroidManifest.xml文件:

android权限代码分析(三)_第1张图片

Test1的MainActivity:

teandroid权限代码分析(三)_第2张图片se1的代码基本就是生成的原样,我们不需要修改。

Test2的AndroidManifest.xml文件:


此种情况是和Test1的配置一致,只是包名不同而已。

Test2的MainActivity文件的内容:这里只显示关键部分:



这个是默认的方式,点击button是可以直接启动起来的。

4.2第二种方式,增加权限访问normal:

修改test1的AndroidManifest.xml文档: 增加自定义权限,并给mainactivity配置权限,具体如下:


这时我们使用test2去启动test1时,便会出错,出现的错误信息为:

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.example.test1/.MainActivity } from ProcessRecord{416e1478 5367:com.example.test2/10063} (pid=5367, uid=10063) requires com.lxm.test

这里可以看到,启动此activity需要权限com.lxm.test,这个权限便是我们配置的启动权限。我们对test2的AndroidManifest.xml进行修改,增加


android权限代码分析(三)_第3张图片

增加此权限,则再次启动,则正常启动,未出现异常。这种方式的权限是最普通的权限,只要我们主动的在AndroidManifest.xml 配置,便可以获得到。

我们可以去android\frameworks\base\core\res里面的AndroidManifest.xml,这个里面可以看到更多的系统权限配置表。我们这里随便拿出两个是normal等级的权限:


可以看到,应用在AndroidManifest.xml配置这两个权限,则可以顺利的得到读取网络和wifi的状态信息。这个权限normal只是一个提醒作用,因为我们直接配置就可以无阻碍的使用,其目的只是提示用户使用了此权限而已。

4.3第三种方式,增加权限访问dangerous

Test1 AndroidManifest.xml配置为:

android权限代码分析(三)_第4张图片

这个跟normal的区别仅仅为显示的方式,这个会已警告的方式提供给客户,使客户可以直观的看到此权限具有一定的危险性,其余的跟normal一致,test2直接申请此权限,也是可以顺利启动test1.

系统里面的dangerous的权限有:



4.4第四种方式,增加权限访问signatures

此权限则比较高级了。

Test1 AndroidManifest.xml配置为:




然后我们手动给test2签名,使用保存的文档去生成一个key,使用此key给test2进行签名,然后启动test2,发现启动不起来test1,提示错误:

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.example.test1/.MainActivity } from ProcessRecord{41289530 6524:com.example.test2/10063} (pid=6524, uid=10063) requires com.lxm.test

报的错跟未申请权限现象一致,然而此处的原因便是签名不同导致。如果出现此问题,除非你有test1的签名key,否则是无法直接进行启动test1的MainActivity的,这时便可以完全的屏蔽掉其他应用恶意的调用,做出屏蔽。一般第三方软件的key,只有自己本公司内部持有,因此别人是无法拿到此key,这种保护算是最高级别的,此种情况只能通过合作进行使用和test1的签名一致,才能正常访问。


4.5第五种方式,增加权限访问signaturesOrSystem

此权限算是一个折中权限:

Test1配置为:

android权限代码分析(三)_第5张图片


这个便是签名或者属于系统应用便可以访问。我们使用如下命令,使得应用放置到system/app里面:



然后再去启动应用,发现已经ok了。


你可能感兴趣的:(android,权限,安全,实例剖析)