权限是对Android设备上代码或数据的访问所施加的一种限制,以防止关键数据和代码被滥用而给用户带来不同程度的损害。
Android应用程序权限的设定应该从两种不同的角度来分析:如果一个应用程序需要使用到系统提供的API及其他服务,而这些API和服务受权限保护,需要在AndroidManifest.xml文件中定义所需访问API以及服务的权限,这时此应用程序是权限的需求方;从另一角度来说,如果一个应用里提供了其他应用需要访问的功能,为安全起见,防止不具备访问条件的应用程序非法访问,需要在代码中指定访问这些功能所需要的访问权限,这时,该应用程序是授权方。无论是需求方还是授权方都需要对应用程序的权限进行设置。
Android提供了大约有130多种内置的权限,都是android.Manifest.permission类的静态成员。Android权限有时也称之为Manifest 权限,它们控制着各种系统操作,如电话呼叫(CALL_PHONE)、照相(CAMERA)、网络(INTERNET)、键盘输入(READ_INPUT_STATE)、写短信(WRITE_SMS)等。除了内置的权限以外,任何一个应用程序可以自定义适当的权限,以供其他应用程序访问。Android权限主要有4种级别:Normal、 Dangerous、Signature和SignatureOrSystem,它们的功能和描述如表3-3所示。
表3-3 Android的4种权限级别
Android权限机制的实现贯穿应用层、框架层、系统层。应用层通过设置Android-Manifest.xml中<uses-permission>指定对应权限,再映射到底层的用户和组权限;框架层通过设置platform.xml中<permission>指定其对应权限,platform.xml文件位于frameworks/base/data/etc/;系统层的权限定义在system/core/include/private/android_filesystem_config.h文件中。Android权限机制的实现流程图如图3-6所示。
(1) Android应用程序的AndroidManifest.xml权限
Android应用程序所需权限需要在AndroidManifest.xml中声明,并且在应用程序安装时由用户决定是否允许安装此应用程序。在安装时,通过读取AndroidManifest.xml文件,安装程序将产生一个所有权限的列表呈现给用户,用户只有选择接收应用程序所需的权限才能安装应用程序,否则只有放弃安装。而且权限在安装时一经确认后就不能再更改,一旦允许安装,该应用程序就拥有了它所声明的操作权限。
AndroidManifest.xml文件包含了Android系统里应用程序的主要信息,这些信息是任何代码在运行之前都必须具备的,描述了组成应用程序的每一个组件(活动、服务、内容提供器和广播接收器)的信息以及功能。AndroidManifest.xml定义了应用程序访问系统API及其他服务的所需权限,也定义了访问当前应用程序的其他应用程序应具备的权限。