Android Manifest文件介绍
2015-01-14 18:04
197 查看
前言
开发Android程序的人都知道,Andorid程序一定有一个AndroidManifest文件。这个文件会告诉Android系统你自己app的信息,在运行你的app之前系统必须了解的信息。并且,你必须要在Android Manifest文件定义一些信息,比如这个程序的运行环境,app所需要的权限,app所包含四大组件的内容,等等。AndoridManifest文件的结构一般如下:<?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>
下面我们就一次来看看各标签所表达的意思。
action
动作标签,这是一个非常常见的标签,存在于intent-filter标签中。如果与一个activity绑定,可以表示该活动具有该动作,如果有一个意图发出来,并且带有这种一个Activity定义的动作,那么,它就有可能定位到该activity,一般与category一起用。Example: <action android:name="android.intent.action.MAIN" />
activity
活动标签,最常用的标签,定义活动,具有大量的属性,具体参考官方文档。activity-alias
活动标签的代替者,其最重要的属性是android:targetActivity,通过这个属性可以设定它指向的activity。一般可以理解为活动的别名。如果你向下面一样定义的话,你就可以获得两个程序的入口<activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity-alias android:name="MainActivityAlias" android:targetActivity="MainActivity" android:label="MainActivityAlias" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias>
application
对应用程序的声明,同样具有大量属性。我们常见的Activity,Service,Receiver全部定义在此标签内部。并且,它也有一种类似全局配置的作用,比如配置主题等。category
category标签一般与Action合用,它也是用来定位activity的,当action不可以确定唯一的activity时,这时候为Intent-filter添加category标签就可以进一步确定是哪一个activity,一个Intent-filter可以有多个activity。Example: <activity android:name=".MainActivity" android:theme="@android:style/Theme.NoDisplay" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
compatible-screens
一般不建议用该标签,该标签对程序本身没有影响,但是会影响Google Play等应用市场判定应用程序的兼容性。data
data也是用于Intent-filter。它提供了另外一个定位activity的方式。就像网络上一个URL地址可以定位到网页一样,你可以自己定义格式,然后跳转到特定的activity。如果你在浏览器中看到一个提示:打开或安装某某应用程序。这里面的实现原理就是这个。我之前写过这样的文章。grant-uri-permission
这是内容提供端向客户端提供数据所用到的一个属性。当grandUriPermisson被设置为true时,那么客户端可以获得内容提供端的任何数据,如果设置为false,那么就只能访问grant-uri-permission定义的路径。此标签主要用来让你在没有权限的情况下,访问其他应用程序提供的数据。此标签包含在Provider标签中,语法如下:<grant-uri-permission android:path="string" android:pathPattern="string" android:pathPrefix="string" />
instrumentation
此标签一般是单元测试中使用,你所创建的Instrumentation类可以监测你应用程序的交互,并且它会在你程序的任何组件之前被初始化。SYNTAX: <instrumentation android:functionalTest=["true" | "false"] android:handleProfiling=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:name="string" android:targetPackage="string" />
functionalTest属性决定它是否用于单元测试,handleProfiling决定是否开启分析功能,andorid:name则是你自己定义的Instrumentation子类,targetPackgage定义了你需要测试的应用程序。
intent-filter
定义了Activity,Service或者广播可以接收到的Intent.也是最常用的标签之一。必须包含action标签。SYNTAX: <intent-filter android:icon="drawable resource" android:label="string resource" android:priority="integer" > . . . </intent-filter> android:priority用来设置优先级。取值范围为-1000到1000,默认为0。通时这一可以在IntentFilter中的setPriority()中设置。
Manifest
这个没啥好说的,就好像web的html标签一样,不过在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>
meta-data
元数据标签,用来定义一些系统可以用到的数据。<meta-data android:name="string" android:resource="resource specification" android:value="string" />
你必须为元数据定义一个独一无二的名字,好让程序可以获得它的值,如果是一个字符串的话,一般可以这样定义:
<meta-data android:name="com.fyales.name" android:value="fyales" />
如果是图片的话,一般就用到了android:resource属性
<meta-data android:name="com.fyales.picture" android:value="@drawable/ic_launch" />
之后再activity中进行调用:
ActivityInfo info = this.getPackageManager().getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
info.metaData.getString(“com.fyales.picture”);
这里需要注意的是,你meta-data定义的位置不同,那么你获取这个元数据的方法也不同,上面我的meat-data是定义在activity中的,如果定义在Application中,就应该像下面一样调用,以此类推:
ApplicationInfo appInfo = this.getPackageManager() .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA); appInfo.metaData.getString("meta_name");
提示
Android Manifest在谷歌官网有详细讲解,有需要的同学也可以直接访问讲解。里面有标签的完整讲解。如果这篇文章有什么疏漏,欢迎拍砖。以上:
口号:Make things interesting!
.
相关文章推荐
- Android深入浅出系列课程---Lesson4-AAF110429_介绍Manifest文件的使用
- Android的Manifest配置文件介绍
- AndroidManifest.xml 文件里面的内容介绍
- Android中项目的AndroidManifest.xml文件的作用及改文件中相关属性的具体介绍
- Android manifest文件中的标签详细介绍
- Android的Manifest配置文件介绍
- AndroidManifest.xml文件详细介绍及用法解析
- Android下HelloWorld项目的AndroidManifest.xml文件介绍
- Android的Manifest配置文件介绍
- Android的Manifest配置文件介绍
- 【Android开发】Manifest配置文件详细介绍
- Android的Manifest配置文件介绍
- android的AndroidManifest.xml文件介绍
- Android入门(10)——AndroidManifest.xml配置文件介绍
- android的AndroidManifest.xml文件介绍
- android的AndroidManifest.xml文件介绍
- Android的Manifest配置文件介绍
- Android manifest文件中的标签详细介绍
- AndroidManifest配置文件介绍
- Android manifest文件中的标签详细介绍