利用aapt工具查看它们的permission -------------------- aapt d permission *.apk
在安装的时候出现失败:
声明权限只能有一个app声明,如果有多个app声明一个权限,那它必须是签名也一样的。这样做的好处:保证世界范围内以签名为单位的声明permission只有一份,如果别的公司要用那只能以引用的形式(uses-permission)来获取权限,而不能再继续对这个权限进行声明了。(这里说的不同公司代表签名不同)
这样很好的限制了开发人员随便声明permission
Permission的声明里面有权限安全属性的。
android:description="stringresource"
android:icon="drawableresource"
android:label="stringresource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" |
"signature" | "signatureOrSystem"] />
android:description: 描述这个权限所针对的操作及用户授予这个权限的后果
android:label: 权限的一个简短描述
android:name: 权限的唯一标识,一般都是使用 报名加权限名
android:permissionGroup: 权限所属权限组的名称
android:protectionLevel:权限的等级
normal:
是最低的等级,声明次权限的app,系统会默认授予次权限,不会提示用户
dangerous:
权限对应的操作有安全风险,系统在安装声明此类权限的app时会提示用户
signature:
权限表明的操作只针对使用同一个证书签名的app开放
signatureOrSystem:
与signature类似,只是增加了rom中自带的app的声明
这由于权限可以通过定义来进行设置,所以不能随便声明,要用的时候只是user-permission
自个写的demo进行认证了这个结论:
1:我写了2个Demo
Demo1的AndroidManifest.xml中声明了
<permissionandroid:protectionLevel="normal"android:name="com.tutor.permission.VIEW">
permission>
<activityandroid:name=".ViewActivity"
android:label="自定义action与permission"
android:permission="com.tutor.permission.VIEW"
>
<intent-filter>
<actionandroid:name="android.tutor.action.VIEW"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
intent-filter>
activity>
Demo2的AndroidManifest.xml中引用:
这个形式在android4.4 和android5.0中多没问题。
如果在Demo2的AndroidManifest.xml中引用:
<permissionandroid:protectionLevel="normal"android:name="com.tutor.permission.VIEW">
permission>
这么写就有问题了,多了声明;
这个在android4.4还是没问题的
但是在在android5.0就提示安装不上了:
这个现象和我们在androidL上遇到应用安装不上是同样的问题,所以我们应该叫第三方把应用不是自己声明的应用删除掉,只应用就行了(即用user-permission的方式)