做过开发的都知道,如果想要为用户着想,可能需要添加个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)

图:

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. [对比]Android的差异设计和iOS的统一设计规范
  2. android 为什么需要签名
  3. 利用adb无线连接android手机进行调式 无需获得root权限
  4. Android(安卓)更改头像(图片)并上传服务器功能Demo详解
  5. Android(安卓)Q(10.0)版本新特性以及兼容性适配
  6. Android(安卓)UI设计秘笈
  7. Android开发指南-框架主题-安全和许可
  8. Android(安卓)6.0运行时权限勾选不再询问后该如何处理?
  9. 5条针对Honeycomb的UI设计建议

随机推荐

  1. android中dp和px的转换
  2. Android 应用软件开发(八)窗口布局
  3. Does Android Support Dual-Cores or Mul
  4. 通过ijetty获取android设备的截图
  5. Android 增量更新实例(Smart App Updates)
  6. Android 数据存储之SQLite数据库
  7. Android -- ContentProvider
  8. Android客户端与服务端通信乱码问题的解
  9. [置顶] 我的Android进阶之旅------>andro
  10. Retrofit简单使用(Kotlin)