Android中的权限机制

来源:互联网 发布:网络号码发短信 编辑:程序博客网 时间:2024/05/21 03:54

做过开发的都知道,如果想要为用户着想,可能需要添加个Uses Permission,这样有些操作才能够进行,然后,谷歌才会给出用户该软件都需要什么权限。 就是用户在安装过程中,会给出用户 该软件需要的权限有:


这里写图片描述


看着权限也还真是多哦。大家猜猜 ,它搜索其他的应用是为了什么呢?

当然在开发中还可能用到自定义权限,不在本文范围之内。

本博客主要讲的是整个android系统在权限方面是如何操作的。


android的内核是Linux,android权限机制是借助于Linux进行权限的分配的。

· Linux权限

学过Linux的应该知道 Linux分为 本地用户(User)、同组用户(Group)、其他用户(Others).


这里写图片描述


我们随便到系统里面一个目录,然后列出文件和目录的具体信息。

大家看蓝色框里面的东西,总共分为四个部分


  1. d 代表目录结构,”-“代表文件
  2. rwx .第二、第三、第四部分都是由 rwx组合而成。

图片上数字: 2代表本地用户 3代表组用户 4 代表其他用户 下面是具体讲解rwx是什么意思


i.读 :Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

ii.写 :Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

iii.执行:execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限


·android权限


Android 的权限分离的基础是建立在 Linux 已有的 uid 、 gid 、 gids 基础上的 。

UID 。 Android 在 安装一个应用程序,就会为 它 分配一个 uid 其中普通 A ndroid 应用程序的 uid 是从 10000 开始分配
10000 以下是系统进程的 uid 。

GID 。对 于普通应用程序来说, gid 等于 uid 。由于每个应用程序的 uid 和 gid 都不相同, 因此不管是 native
层还是 java 层都能够达到保护私有数据的作用 。

GIDS 。 gids 是由框架在 Application 安装过程中生成,与 Application 申请的具体权限相关。 如果
Application 申请的相应的 permission 被 granted ,而且 中有对应的 gid s , 那么 这个
Application 的 gids 中将 包含这个 gid s 。


android结构层次中所周知 应该如下

操作系统层(OS)

各种库(Libraries)和 Android 运行环境(RunTime)

应用程序框架(Application Framework)

应用程序(Application)

图:


android结构图


1、其中底层就是蓝牙驱动、照相机驱动、显示驱动等各种驱动


2、Libraries是C语言写的各种库,比如Sqlite数据库就是C语言写的,然后framework层封装好,让广大程序员来进行调用的。 还有SSL网络通信协议,矢量图 字体等功能的定义都在这一层。


3、应用framework层其中就是封装好的各种控件集合 还有各种API。比如有Views ( 视图组件 ) 包括 lists( 列表 ), grids( 栅格 ), text boxes( 文本框 ), buttons( 按钮 ) 等,甚至一个嵌入式的 Web 浏览器。一个 Android 的应用程序可以利用应用程序框架中的以下几个部分: Activity (活动)、Broadcast Intent Receiver (广播意图接收者)、Service (服务)、Content Provider (内容提供者)。


4、应用程序层其中就是我们写的和系统自带的各种应用程序了。


安卓中的权限:


应用程序权限:android应用程序访问系统资源时,可能需要一些权限,这些权限是应用程序的权限。比如读短信的权限、访问网络的权限、监听来电到来的权限等。

root权限:root以后,很多厂商就会不保修了,因为root后,系统是非常危险的,任何一个应用程序都可以偷偷的进行非法的操作,系统底层的东西可以随意删除和修改。


我们做的最多的就是在清单文件中声明Users Permission用户权限, 然后该应用程序就会将该权限发送给系统底层去校验,其中的process也是一门重要的学问,需要好好研究研究。


我是想到哪里,写到哪里。。。。


安卓自定义权限:


举例:


<permission android:label="”自定义权限”"    android:description=”@string/testandroid:name=”com.example.project.TEST”    android:protectionLevel=”normal”    android:icon=”@drawable/ic_launcher”>

其中声明字段的含义如下:

android:label:权限名字,显示给用户的,值可是一个 string 数据,例如这里的“自定义权限”。

android:description:比 label 更长的对权限的描述。值是通过 resource 文件中获取的,不能直接写 string 值,例如这里的”@string/test”。 android:name:权限名字,如果其他 app 引用该权限需要填写这个名字。

android:protectionLevel:权限级别,分为 4 个级别:

normal:低风险权限,在安装的时候,系统会自动授予权限给 application。

dangerous:高风险权限,系统不会自动授予权限给 app,在用到的时候,会给用户提示。

signature:签名权限,在其他 app 引用声明的权限的时候,需要保证两个 app 的签名一致。这样系统就会自动授予权限给第三方 app,而不提示给用户。

signatureOrSystem:这个权限是引用该权限的 app 需要有和系统同样的签名才能授予的权限,一般不推荐使用。


关于权限的知识,就先写到这。后面在补充知识。

1 0