【安卓系统源码学习之permission】 系统源代码AndroidManifest.xml分析之permission解读

上一节,我们讲到了怎么去查找安卓源码中AndroidManifest.xml文件,打开这个文件,你会发现里面有很多<permission ... />的标签,如下图所示:


这个是用来做什么的呢?

通常在我们安装app的时候,都会提示一些app对手机的一些访问权限说明,如下图:



接下来我们分析下下面这段的含义

<permission android:name="android.permission.READ_SMS"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"       
android:label="@string/permlab_readSms"
android:description="@string/permdesc_readSms" />

这是一个读取短信的权限,各个字段的具体含义如下:
android:name:权限的名字,在应用层中也是使用这个名称来声明
android:permissionGroup:权限的分类,在提示用户安装时会把某些功能差不多的权限放到一类。比如读取短信、读取彩信放在一块(注意:红米4.4.2版本没将该相同分组的放在一类)。
android:protectionLeve:分为Normal、Dangerous、Signature、SignatureOrSystem。有些权限需要用户同意,有些权限可以通过用户决定是否用不用,可以通过手机管理软件进行设置
android:label:提示给用户的权限名,就是在用户手机上显示的一些名称,通过label对应到String.xml中,里面就包含了具体的文字提示
android:description:提示给用户的权限描述。当你打开手机应用点击某个权限的时候,会弹出对话框,给你对这个权限的详细描述。


1.android:name
在我们开发app应用中,通常也要在AndroidManifest.xml文件中进行声明,如下:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
这里面的android:name就要和以上的android:name一一对应
2.android:permissionGroup
我们可以看下分组的具体定义内容。

<permission-group android:name="android.permission-group.MESSAGES"
android:label="@string/permgrouplab_messages"   
android:description="@string/permgroupdesc_messages" />

在对应的string.xml中,如下定义:

<string name="permgrouplab_messages" msgid="7521249148445456662">"您的信息"</string>
<string name="permgroupdesc_messages" msgid="7821999071003699236">"读写短信、电子邮件和其他消息。"</string>
在红米4.4.2版本没将该相同分组的放在一类,可以看到我之前的截图就知道了,

正如,网上一篇题为【android中permission_group与permisson区别、作用】(http://www.cnblogs.com/0616--ataozhijia/p/4244738.html)博客所解释:

【在定义 permission 时, 为每个Permission都进行了分组, 每一个Permission都有一个PermissionGroup属性。而PermissionGroup在定义时,仅仅制定了label和descrip , 就是说明一下这个权限组的作用,没什么其他用处。】

而在另一部手机上面测试的结果如下:



这里可以看出安卓会将相同组的组合在一起显示,比如 【读取您的讯息(短信或彩信)】和【接收讯息】放置一起显示,共享左侧的同一个【短信】logo,点击时,弹出 分组信息。但是在红米手机上面测试,这个分组是没有功能,只是内部分类,点击也不会弹出任何信息,有分组和没有分组在ui界面上面显示是没有区分的。可能导致这个测试结果的原因,要么和ui有关系(小米手机是用定制的MIUI界面),要么和手机的安卓版本有关系,具体大家可以再测试测试。
3.android:protectionLeve
共有四个属性
(1)Normal
风险较低的权限,任何应用都可以申请,在安装应用时,不会直接提示给用户,点击全部才会展示。
(2)Dangerous
风险较高的权限,任何应用都可以申请,安装时需要用户确认才能使用。
(3)Signature
仅当申请该权限的应用程序与声明该权限的程序使用相同的签名时,才赋予该权限。
(4)SignatureOrSystem
仅当申请该权限的应用程序位于相同的Android系统镜像中,或申请该权限的应用程序与声明该权限的程序使用相同的签名时,才赋予该权限。
其中 读取短信是一种Dangerous级别


4.android:label
我们打开
http://androidxref.com/4.1.1/xref/frameworks/base/core/res/res/values-zh-rCN/strings.xml
,很遗憾,我们看到,里面的中文都显示为乱码,可能很编码有关系,最终还是没有弄好,没有关系,
因为我手机用的是4.4.2版本,所以打开
http://androidxref.com/4.4.2_r1/xref/frameworks/base/core/res/res/values-zh-rCN/strings.xml#201
看下,中文显示不是乱码,

<string name="permlab_readSms" msgid="8745086572213270480">"读取您的讯息(短信或彩信)"</string>
 <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"允许该应用读取您平板电脑或 SIM 卡上存储的短信。此权限可让该应用读取所有短信,而不考虑短信内容或机密性。"</string>
 <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"允许该应用读取您手机或 SIM 卡上存储的短信。此权限可让该应用读取所有短信,而不考虑短信内容或机密性。"</string>
注意下,是不是和以下的显示是一样一样的?


5.注意点1,如果非要查看4.1.1版本的string.xml,上一节我们还告诉大家另一个网站,打开
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/frameworks/base/core/res/res/values-zh-rCN/strings.xml?av=f
这次就可以看到了,如下:

 <string name="permlab_readSms" msgid="8745086572213270480">"读取您的文字讯息(短信或彩信)"</string>
<string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"允许该应用读取您平板电脑或 SIM 卡上存储的短信。此权限可让该应用读取所有短信,而不考虑短信内容或机密性。"</string>
 <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"允许该应用读取您手机或 SIM 卡上存储的短信。此权限可让该应用读取所有短信,而不考虑短信内容或机密性。"</string>
string.xml在不同的安卓版本中,对应的字符串内容也不一样,甚至连定义的变量名也不一样


好了,今天就讲到这里


转载请注明出处:http://blog.csdn.net/ljb568838953/article/details/52188715

相关文章:【安卓系统源码学习之在线阅读】Android程序员必备本领--查看系统源代码











  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值