android APP 权限基础

  1   权限(permission)的定义。
   系统本身定义了很多permission,例如

  • "android.permission.WAKE_LOCK",     
  • "android.permission.ACCESS_WIFI_STATE",
  • "android.permission.ACCESS_FINE_LOCATION" ,
  • "android.permission.ACCESS_FINE_LOCATION"

应用也可以定义一个自己的权限,例如
    <permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"
        android:label="@string/permlab_downloadManager"
        android:description="@string/permdesc_downloadManager"
        android:protectionLevel="signatureOrSystem" />

使用这些permission,第一步需要在AndroidManifest里面定义。例如

<uses-permission       android:name="android.permission.ACCESS_FINE_LOCATION" />  
        当然了系统不会对任何应用开放任何权限的。否则就等于没有权限,权限还是有级别的

2   android权限定义的级别。权限的级别是权限使用的一个维度
就拿上面定义的android.permission.ACCESS_DOWNLOAD_MANAGER权限来说。它的使用级别(定义:  android:protectionLevel="signatureOrSystem")是系统签名或者系统应用才可以使用。
        系统定义一下级别: normal , dangerous , signature , signatureorsystem
         normal 一般定义就可以使用到
         dangerous 在安装时会给用户提醒,如果用户关闭了这些权限,使用时一般的应用程序会提示用户打开这些权限。这种级别的权限是有限的

  •     GROUP  PERMISSIONS
  •     CALENDAR(日历): READ_CLENDER, WRITE_CLENDAR
  •      CAMERA(相机): CAMEAR
  •     CONTACTS(联系人):READ_CONTACTS , WRITE_CONTACTS, GET_ACCOUNTS
  •     LOCATION(定位): ACCESS_FINE_LOCATION, ACCESS_CORASE_LOCATION
  •     MICROPHONE(麦克风):RECORD_AUDIO
  •     PHONE(电话):READ_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG, ADD_VOICEMAIL, USE_SIP,         PROCESS_OUTGOING_CALLS
  • SMS(短信):SEND_SMS, RECEIVE_SMS, READ_SMS, RECEIVE_WAP_PUSH,RECEIVE_MMS
  •     SENSORS(传感器):BODY_SENSORS
  •     STORAGE(存储)

  signature 需要系统签名才可以使用。例如一下的权限
   <permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS"
          android:label="@string/permlab_downloadCompletedIntent"
          android:description="@string/permdesc_downloadCompletedIntent"
          android:protectionLevel="signature" />
   当然了回报相关权限的API会生效。
   signatureorsystem  表示需要系统签名,或者属于系统应用,(一般内置在system/app或者system/priv-app或者system/priv-app下面的应用)可   以使用系统的API。例如"android.permission.ACCESS_DOWNLOAD_MANAGER",

3   android 权限使用的用户维度 
   app安装的时候,android会为每一个引用程序分配一个UID(用户ID)和GID(用户组ID)。
   此外安装过程中还会生成一个GIDS。通过解析AndroidManifest,可以解析到应用运行时使用到的权限(<uses-permission>),如果安装过程中app  被赋予了permission的权限,而且它有自己的GID,那么这些权限的GID会被添加到这个应用的GID里面。从这个角度来说,app的GIDS会包含它使用  的权限的集合(前提是已经被赋予)。进一步就是说app能使用到那些权限或者资源都被定义在他的GUIDS里面。
   综合上述,一个应用程序会有一个UID。而且会有个一个GIDS。这个GIDS包含了运行时可以使用到的系统资源。
   Android利用沙盒来隔离每个应用程序,是之使用到独立的资源。每个应用程序都有独立的沙盒,这样就阻碍了应用程序之间的共享。但是如果需要做到两个应用程序之间的资源共享,则需要两个前提:1 是这两个应用程序有相同的签名。2 是两个应用程序定义相同的android:sharedUserId 这样两个应用程序就会运行同一进程里面,彼此共享权限。

4   其他,linux进程运行中的用户

  • uid(guid).真实用户(组),进程的真是所有者。
  • euid(geuid).有效用户(组),进程运行的时候需要的各种权限,依赖于suid。
  • suid(gsuid).保存设置用户(组),是有效用户的副本。当超级用户修改有效用用户时,会先生成一个有效用户的副本,即suid。这样就会有主于有效用户的恢复。
  • fuid(fuid). 文件用户(组)
时间: 2024-10-11 05:01:06

android APP 权限基础的相关文章

Android基础入门教程——1.2.1 使用Eclipse + ADT + SDK开发Android APP

Android基础入门教程--1.2.1 使用Eclipse + ADT + SDK开发Android APP 标签(空格分隔): Android基础入门教程 1.前言 这里我们有两条路可以选,直接使用封装好的用于开发Android的ADT Bundle,或者自己进行配置 因为谷歌已经放弃了ADT的更新,官网上也取消的下载链接,这里提供谷歌放弃更新前最新版本的 ADT Bundle供大家下载! 2.直接使用打包好的Eclipse 32位版:adt-bundle-windows-x86-20140

Android基础新手教程——1.2.1 使用Eclipse + ADT + SDK开发Android APP

Android基础新手教程--1.2.1 使用Eclipse + ADT + SDK开发Android APP 标签(空格分隔): Android基础新手教程 1.前言 这里我们有两条路能够选,直接使用封装好的用于开发Android的ADT Bundle,或者自己进行配置 由于谷歌已经放弃了ADT的更新,官网上也取消的下载链接.这里提供谷歌放弃更新前最新版本号的 ADT Bundle供大家下载! 2.直接使用打包好的Eclipse 32位版:adt-bundle-windows-x86-2014

Android 基础总结:(二)Android APP基础及组件

1.Android APP基础 Android应用程序是用Java编程语言写的.编译后的Java代码--包括应用程序要求的任何数据和资源文件,通过aapt工具捆绑成一个Android包,归档文件以.apk为后缀.这个文件是分发应用程序和安装到移动设备的中介或工具,用户下载这个文件到他们的设备上.一个.apk文件中的所有代码被认为是一个应用程序. aapt: aapt是Android Asset Packaging Tool的首字母缩写,这个工具包含在SDK的tools/目录下.查看.创建.更新与

Android基础入门教程——1.2.2 使用Android Studio开发Android APP

Android基础入门教程--1.2.2 使用Android Studio开发Android APP 标签(): Android基础入门教程 写在前面 本节将介绍如何使用Android Studio开发Android APP,和前面Eclipse + ADT + SDK搭建Android开发环境一样,本节也只是介绍一些基本东西,深入的,比如快捷键,小技巧等会再另一篇文章中详细地介绍! 1.下载Android Studio 官网下载:Android Studio for Window - 百度云下

关于Android的app权限申请问题

关于Android8.1的app权限申请问题 例如如何让普通app可以写/sdcard/Android/ 目录 / # cat /data/system/packages.xml | grep bluetooth<package name="com.mediatek.bluetooth.dtt" codePath="/system/app/BtTool" nativeLibraryPath="/system/app/BtTool/lib"

Android应用开发基础篇(12)-----Socket通信(转载)

转自:http://www.devdiv.com/android_socket_-blog-258060-10594.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络编程是非常有必要的,而我觉得socket编程是网络编程的基础.在进入正题之前,先介 绍几点网络知识,一:socket编程有分TCP和UDP两种,TCP是基于连接的,而UDP是无连接的:二:一个TCP连接包括了输入和输出两条独立的 路径:三:服务器必须先运行然后客户端才能与它进行通信.四:客户端与服务

低功耗蓝牙(BLE)在 Android APP 中的应用

低功耗蓝牙(BLE)在 Android APP 中的应用 前言 最近公司接了一个新项目,用户可以把自己的乐器跟Phone或Pad连接起来,当弹奏乐器的时候,会把演奏情况同步反馈到设备上,方便用户练习,有点类似于之前玩过的一款叫[ 吉他英雄 ]的游戏.不过这次不用插线,直接蓝牙无线连接就可以了. 那么问题来了,因为弹奏的时候数据传输一直在进行,但是如果要一直打开蓝牙的话是很费电的,也许没几首曲子下来设备的电量就耗掉了不少,这当然是无法接受的.那有没有什么好的解决方案呢? 运气真好,Android在

Android应用开发基础篇(12)-----Socket通信

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378669.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络编程是非常有必要的,而我觉得socket编程是网络编程的基础.在进入正题之前,先介绍几点网络知识,一:socket编程有分TCP和UDP两种,TCP是基于连接的,而UDP是无连接的:二:一个TCP连接包括了输入和输出两条独立的路径:三:服务器必须先运行然后客户端才能与它进行通信.四:客户端与服

Android安全机制(2) Android Permission权限控制机制

1.概述 Android 是一个权限分离的系统 . 这是利用 Linux 已有的权限管理机制,通过为每一个 Application 分配不同的 uid 和 gid , 从而使得不同的 Application 之间的私有数据和访问( native 以及 java 层通过这种 sandbox 机制,都可以)达到隔离的目的 . 与此 同时, Android 还 在此基础上进行扩展,提供了 permission 机制,它主要是用来对 Application 可以执行的某些具体操作进行权限细分和访问控制,