044android初级篇之android app中的权限及自定义权限

自定义权限的声明

如果自定义的软件中因对外提供什么服务,而想声明一个权限,来限制此服务的使用,可以在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也可以在该目录下拿到。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

【批处理学习笔记】第十二课:常用DOS命令(2)

 文件管理 type 显示文本文件的内容。 copy 将一份或多份文件复制到另一个位置。 del 删除一个或数个文件。 move 移动文件并重命名文件和目录。(...

30540
来自专栏蓝天

通用的进程监控重拉起bash脚本process_monitor.sh

9910
来自专栏SDNLAB

SDN开发笔记(四):md-sal应用程序开发

环境搭建 继前3篇文章SDN开发环境的搭建(win7环境)、SDN控制器的使用(ubuntu环境搭建、controller使用、mininet的使用)和ODL源...

34750
来自专栏向治洪

android Native堆

Android 应用开发大家都知道可以通过DDMS来查看应用程序进程占用的内存大小;然而Native 内存并不能在虚拟堆上看到;Android系统基于Li...

26160
来自专栏数据分析

Windows PowerShell 学习之——Cmdlet处理生命周期

这一次介绍一下Cmdlet处理过程的生命周期 1. 概述 下图展示Windows PowerShell怎样处理一个管道请求指令。 这个流程包括: 指令参数(pa...

29960
来自专栏Java面试笔试题

JDBC中如何进行事务处理?

Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显式提交事务;如果...

18620
来自专栏java技术学习之道

数据库事务的四大特性以及事务的隔离级别详解

12430
来自专栏linux驱动个人学习

proc文件系统

一、proc文件系统是什么? proc是一个伪文件系统,伪文件系统的定义: 它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接...

41570
来自专栏专注数据中心高性能网络技术研发

如何解压RPM包

Mellanox的驱动源码在centos7下面是使用RPM包封装的,需要解压此格式的包来获取源文件 RPM包括是使用cpio格式打包的,因此可以先转成cpio然...

88950
来自专栏性能与架构

Redis3 添加新节点到集群

向集群中添加新节点,有两种情况: (1)添加一个新节点,做为master,需要移动一部分slot到此节点 (2)添加一个新节点,做为slave,设置为集群中某个...

36970

扫码关注云+社区

领取腾讯云代金券