Android manifest文件中的标签详细介绍
概要
每一个Android应用都应该包含一个manifest文件,即AndroidManifest.xml。它包含了程序运行的一些必备信息,比如:
--为Java应用程序指定一个独一无二的名字。
--描述程序所包括的成分,如activities, services, broadcast receivers和content providers等内容。
--定义哪一个成分是主要的。比如主线程等。
--声明程序正常运行所需要的权限。比如,读写SD卡等。
--声明该程序的API Level,低于该API Level的机器不能运行该程序。
--声明程序需要使用的设备
--声明程序支持的分辨率
...
manifest示例如下:
<?xml version="1.0" encoding="utf-8"?> <manifest> <uses-permission /> <permission /> <permission-tree /> <permission-group /> <instrumentation /> <uses-sdk /> <uses-configuration /> <uses-feature /> <supports-screens /> <compatible-screens /> <supports-gl-texture /> <application> <activity> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </activity> <activity-alias> <intent-filter> . . . </intent-filter> <meta-data /> </activity-alias> <service> <intent-filter> . . . </intent-filter> <meta-data/> </service> <receiver> <intent-filter> . . . </intent-filter> <meta-data /> </receiver> <provider> <grant-uri-permission /> <meta-data /> <path-permission /> </provider> <uses-library /> </application> </manifest>
PART--01 manifest标签
<manifest>
语法:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="string" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" | "preferExternal"] > . . . </manifest>
描述:
manifest是AndroidManifest.xml的根节点。它必须包括一个<application>节点, 并且设定xmlns:android和包属性。
属性:
A xmlns:android
定义android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。
B package
指定本应用内java主程序包的包名,它也是一个应用进程的默认名称。它也是生成的应用程序资源文件的索引类(R)的包名。
C sharedUserId
表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据, 第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。
D sharedUserLabel
一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义
E、versionCode
是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等。
F、versionName
这个名称是给用户看的,你可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等。。。
G、installLocation
程序的安装位置,有三个值可以选择:internalOnly、auto、preferExternal
internalOnly--APK必须安装到内部存储空间。而且安装了之后,不能将程序移动到SD卡上。
auto--系统将会根据存储空间去选择将APK安装在内部存储空间还是SD卡上。安装之后,可以在内部存储空间和SD卡之间移动。
preferExternal--系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上)
PART--02 安全机制和permission
01, Android 安全机制概述 Permission
PART--02.01 permission标签
点击查看:Android manifest之系统自带的permission
语法:
<permission android:description="string resource" android:icon="drawable resource" android:label="string resource" android:name="string" android:permissionGroup="string" android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />
说明:
定义一个安全访问许可。其它程序或组件若要访问该程序,必须先获取该permission。
属性:
android:description
权限描述。是用户可读的,它稍稍有点不同于android:label属性。label属性可以直接赋值为字符串,而description必须指定定义在string资源文件中的字符串。
android:icon
图标
android:label
标签
android:name
权限的名称。这个非常重要!因为其它程序或组建若要获取该权限,必须通过权限的名称来指定。
android:permissionGroup
该权限所属的权限组。若不设定,则默认不属于任何权限组。
android:protectionLevel
设置权限的安全级别。用来指出权限的安全级别,是否对系统的安全构成威胁。有以下4个值:
normal--表示权限是低风险的,不会对系统、用户或其他应用程序造成危害。用户使用该权限时,不会弹出对话框让用户确认是否允许使用该权限。
dangerous--表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限。用户使用该权限时,会弹出确认对话框是否同意使用该权限。
signature告诉Android,只有当应用程序所用数字签名与声明此权限的应用程序所有数字签名相同时,才能将权限授给它。
signatureOrSystem告诉Android,将权限授给具有相同数字签名的应用程序或Android包类,这一级别适用于非常特殊的情况,比如多个供应商需要通过系统影像共享功能时。
PART--02.02 permission-group标签
<permission-group android:description="string resource" android:icon="drawable resource" android:label="string resource" android:name="string" />
说明:
描述permission是所属的组。permission-group本身并不定义权限,它只是权限所属的一个组。作用是来先区别不同的权限。
属性:
android:description
权限组描述。它稍稍有点不同于android:label属性。label属性可以直接赋值为字符串,而description必须指定定义在string资源文件中的字符串。
android:icon
图标
android:label
标签
android:name
权限组的名称。当某权限要设置权限组时,就将该权限的permissionGroup设置权限组即可。
参考:
01, android中permission_group与permisson区别、作用
PART--02.03 permission-tree标签
语法:
<permission-tree android:icon="drawable resource" android:label="string resource" ] android:name="string"/>
说明:
权限树是一个能够放置更多权限的命名空间,这个元素本身并不声明权限。
它的主要作用是用来动态添加一些所谓 Dynamic 的 permission ,这些 permission 可以动态修改。这些 permission 名称要以 permission-tree 的名称开头。它本身不是一种权限,没有 protectedLevel 和所属 group 。只是保存了所属的 packge 和权限名(带有 package 前缀的)
属性(ATTRIBUTES):
android:icon
图标
android:label
标签
android:name
这个属性定义了权限树根节点的名称。它被用于树中所有权限名称的前缀。应该使用Java样式命名规则,以确保名称的唯一性。在命名中必须要有两个以上的”.”来进行分离,例如:com.example.base是正确的,但com.example就是错误的。
PART--02.04 uses-permission标签
语法:
<uses-permission android:name="string" />
说明:
程序需要指定<uses-permission>以获取权限来进行有关操作。这里的权限值可以是Android系统自带的,也可以是自定义的。
比如,android.permission.READ_CONTACTS是读取通讯录的必备权限;android.permission.SET_WALLPAPER是设置墙纸的必备权限。
属性:
android:name
参考:
01, Android声明和使用权限
02, permission和uses-permission的区别
PART--03 instrumentation标签
语法:
<instrumentation android:functionalTest=["true" | "false"] android:handleProfiling=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:targetPackage="string"/>