Android 的权限管理是怎么实现的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 的权限管理是怎么实现的相关的知识,希望对你有一定的参考价值。
1、android开发获取真机的权限,无非就是能够查看手机中所有的文件。但是由于android安全性的原因,这些文件是看不到的。但是做android开发,又不得不查看手机中文件,要解决的就是这样的问题。2、android获取真机查看文件权限,最重要也是第一步要做的就是获取手机的root权限,可以在网上搜索第三方root工具对手机进行root,在root之前一定要有手机变砖的准备,虽然几率很小。root成功之后,在工程环境中打开DDMS,发现有的文件文件权限是drwxrwx--x这是linux的文件权限,第一个代表文件类型d是directory目录,后面三个是创建者的权限r读w写x执行。这是文件还是打不开的。
3、这时,安装文件的目录找到sdk\platform-tools路径 shift 右键打开命令提示符,输入命令adb shell su -c "chmod 777 /想打开的路径"。这里要注意的是,如果目录是多层的,就要一条一条的输入,一层一层的输入这行命令,每输入一次,目录深一层。到这里结束后,就获得了真机的权限,可以查看手机中的文件了。 参考技术A Android 系统在 /system/core/private/android_filesystem_config.h 头文件中对 Android 用户 / 用户组作了如下定义,且权限均基于该用户 / 用户组设置。
#define AID_ROOT 0 /* traditional unix root user */
#define AID_SYSTEM 1000 /* system server */
#define AID_RADIO 1001 /* telephony subsystem, RIL */
#define AID_BLUETOOTH 1002 /* bluetooth subsystem */
#define AID_GRAPHICS 1003 /* graphics devices */
#define AID_INPUT 1004 /* input devices */
#define AID_AUDIO 1005 /* audio devices */
#define AID_CAMERA 1006 /* camera devices */
#define AID_LOG 1007 /* log devices */
#define AID_COMPASS 1008 /* compass device */
#define AID_MOUNT 1009 /* mountd socket */
#define AID_WIFI 1010 /* wifi subsystem */
#define AID_ADB 1011 /* android debug bridge (adbd) */
#define AID_INSTALL 1012 /* group for installing packages */
#define AID_MEDIA 1013 /* mediaserver process */
#define AID_DHCP 1014 /* dhcp client */
#define AID_SDCARD_RW 1015 /* external storage write access */
#define AID_VPN 1016 /* vpn system */
#define AID_KEYSTORE 1017 /* keystore subsystem */
#define AID_USB 1018 /* USB devices */
#define AID_DRM 1019 /* DRM server */
#define AID_DRMIO 1020 /* DRM IO server */
#define AID_GPS 1021 /* GPS daemon */
#define AID_NFC 1022 /* nfc subsystem */
#define AID_SHELL 2000 /* adb and debug shell user */
#define AID_CACHE 2001 /* cache access */
#define AID_DIAG 2002 /* access to diagnostic resources */
/* The 3000 series are intended for use as supplemental group id's only.
* They indicate special Android capabilities that the kernel is aware of. */
#define AID_NET_BT_ADMIN 3001 /* bluetooth: create any socket */
#define AID_NET_BT 3002 /* bluetooth: create sco, rfcomm or l2cap sockets */
#define AID_INET 3003 /* can create AF_INET and AF_INET6 sockets */
#define AID_NET_RAW 3004 /* can create raw INET sockets */
#define AID_NET_ADMIN 3005 /* can configure interfaces and routing tables. */
#define AID_MISC 9998 /* access to misc storage */
#define AID_NOBODY 9999
#define AID_APP 10000 /* first app user */
值得注意的是:每个应用程序在安装到 Android 系统后,系统都会为其分配一个用户 ID,如 app_4、app_11 等。以下是 Calendar 和 Terminal 软件在 Android 系统中进程浏览的结果(其中,黑色字体标明的即为应用分配的用户 ID):
USER PID PPID VSIZE RSS WCHAN PC NAME
app_16 2855 2363 216196 20960 ffffffff afd0ee48 S com.android.providers.calendar
app_91 4178 2363 218872 25076 ffffffff afd0ee48 S jackpal.androidterm
在 Android 系统中,上述用户 / 用户组对文件的访问遵循 Linux 系统的访问控制原则,即根据长度为 10 个字符的权限控制符来决定用户 / 用户组对文件的访问权限。该控制符的格式遵循下列规则:
第 1 个字符:表示一种特殊的文件类型。其中字符可为 d( 表示该文件是一个目录 )、b( 表示该文件是一个系统设备,使用块输入 / 输出与外界交互,通常为一个磁盘 )、c( 表示该文件是一个系统设备,使用连续的字符输入 / 输出与外界交互,如串口和声音设备 ),“.”表示该文件是一个普通文件,没有特殊属性。
2 ~ 4 个字符:用来确定文件的用户 (user) 权限;
5 ~ 7 个字符:用来确定文件的组 (group) 权限;
8 ~ 10 个字符:用来确定文件的其它用户 (other user,既不是文件所有者,也不是组成员的用户 ) 的权限。
第 2、5、8 个字符是用来控制文件的读权限的,该位字符为 r 表示允许用户、组成员或其它人可从该文件中读取数据。短线“-”则表示不允许该成员读取数据。
第 3、6、9 位的字符控制文件的写权限,该位若为 w 表示允许写,若为“-”表示不允许写。
第 4、7、10 位的字符用来控制文件的制造权限,该位若为 x 表示允许执行,若为“-”表示不允许执行。
举个例子,“drwxrwxr-- 2 root root 4096 2 月 11 10:36 lu”表示的访问控制权限(黑色字体标明)为:因为 lu 的第 1 个位置的字符是 d,所以由此知道 lu 是一个目录。第 2 至 4 位置上的属性是 rwx,表示用户 root 拥有权限列表显示 lu 中所有的文件、创建新文件或者删除 lu 中现有的文件,或者将 lu 作为当前工作目录。第 5 至 7 个位置上的权限是 rwx,表示 root 组的成员拥有和 root 一样的权限。第 8 至 10 位上的权限仅是 r--,表示不是 root 的用户及不属于 root 组的成员只有对 lu 目录列表的权限。这些用户不能创建或者删除 lu 中的文件、执行 junk 中的可执行文件,或者将 junk 作为他们的当前工作目录。 参考技术B 在AndroidManifest.xml文件中 添加你要加的权限 比如我们将满足网络的需要,我们需要添加所需的网络权限:
<uses-permission android:name="android.permission.INTERNET" />
若我们要添加广播权限,则
<receiver android:name=".MyBroadcastReceiver" > <intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
这个看你要加的是什么权限,在Android官方文档中可以查寻我们需要使用的权限。
http://developer.android.com/reference/android/Manifest.permission.html
不同的api有着不同的权限
具体问题你可以具体问我
以上是关于Android 的权限管理是怎么实现的的主要内容,如果未能解决你的问题,请参考以下文章