自定义权限的声明

如果自定义的软件中因对外提供什么服务,而想声明一个权限,来限制此服务的使用,可以在Manifest中,声明权限。

以launcher2程序的访问provider的权限为例子:

在application 中注册provider

<provider android:authorities="com.android.launcher2.settings" 
        android:exported="true" 
        android:name="com.android.launcher2.LauncherProvider" 
        android:readPermission="com.android.launcher.permission.READ_SETTINGS" 
        android:writePermission="com.android.launcher.permission.WRITE_SETTINGS"/>



对外声明权限,包括权限名,权限所在组,权限级别


<permission 
    android:description="@string/permdesc_read_settings" 
    android:label="@string/permlab_read_settings" 
    android:name="com.android.launcher.permission.READ_SETTINGS" 
    android:permissionGroup="android.permission-group.SYSTEM_TOOLS" 
    android:protectionLevel="normal"/>
<permission 
    android:description="@string/permdesc_write_settings" 
    android:label="@string/permlab_write_settings" 
    android:name="com.android.launcher.permission.WRITE_SETTINGS" 
    android:permissionGroup="android.permission-group.SYSTEM_TOOLS" 
    android:protectionLevel="signatureOrSystem"/>



Android权限级别(protectionLevel)

通常情况下,对于需要付费的操作以及可能涉及到用户隐私的操作,我们都会格外敏感。
出于安全考虑,Android中对一些访问进行了限制,如网络访问(需付费)以及获取联系人(涉及隐私)等。应用程序如果想要进行此类访问,则需要申请相应权限。Android对这些权限进行了四类分级,不同级别的权限对应不同的认证方式。

  1. normal: 低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加<uses-permission>标签),安装时不需要用户确认;
  2. dangerous:高风险权限,安装时需要用户的确认才可使用;
  3. signature:只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它;
  4. signatureOrSystem:签名相同,或者申请权限的应用为系统应用(在system image中)。

上述四类权限级别同样可用于自定义权限中。如果开发者需要对自己的应用程序(或部分应用)进行访问控制,则可以通过在AndroidManifest.xml中添加<permission>标签,将其属性中的protectionLevel设置为上述四类级别中的某一种来实现。

android模拟器中需要的官方系统的系统签名key

如果使用了模拟器,有时候 一定希望可以拿到系统权限,有一种拿到系统权限的方式是使用该系统的系统签名key进行签名。
android 官方sdk中的模拟器镜像可以在android源码中拿到,位于:




android-5.0.0_r5\src\build\target\product\security\platform.x509.pem
android-5.0.0_r5\src\build\target\product\security\platform.pk8



同时其他几个key也可以在该目录下拿到.