每一个Android应用程序包含一个manifest文件——AndroidManifest.xml,保存在工程的根目录中。该文件定义了应用程序的结构和元数据以及它们的组件。
它包含组件(Activity,Service,Content Provider和Broadcast Receiver)的节点,这些组件构成了整个应用程序。并且使用Intent Filter和Permission,来决定如何相互影响以及对其他应用程序的影响。
它同样提供了特性来指定应用程序的元数据(像icon或者theme等),另外,还提供了高层节点用来安全设定和单元测试。如下描述:
manifest文件由<manifest/>标签作为根,包含了package特性,来设定工程的包名。它通常还包含xmlns:android特性,来导入命名空间,提供一些系统特性。一个典型的manifest节点如下面的XML片段所示:
- <manifest xmlns:android=http:
-
- package=”com.my_domain.my_app”>
-
- [ ... manifest nodes ... ]
-
- </manifest>
<manifest/>标签包含了应用程序组成部分们的节点,它们是应用程序的组件,安全设定和测试类。下面的列表给出了可获得的manifest标签节点的概要以及XML片段的演示:
❑ application
manifest文件只能包含一个application节点。通过特性设定,指明了应用程序的title,icon,theme等元数据。同时,它又可以表现为一个容器,容纳Activity,Service,Content Provider,Broadcast Receiver的标签。
- <application android:icon=”@drawable/icon”
-
- android:theme=”@style/my_theme”>
-
- [ ... application nodes ... ]
-
- </application>
❑ activity
应用程序中显示的Activity都需要定义一个activity标签,通过android:name特性来指定类名。它必须包含启动Activity和其他一些屏幕或对话框中用到的Activity。尝试启动一个没有在manifest中定义的Activity会引发一个运行时异常。每一个Activity节点支持intent-filter子标签来指定哪些Intents启动Activity。
- <activity android:name=”.MyActivity” android:label=”@string/app_name”>
-
- <intent-filter>
-
- <action android:name=”android.intent.action.MAIN” />
-
- <category android:name=”android.intent.category.LAUNCHER” />
-
- </intent-filter>
-
- </activity>
❑ service
和activity标签一样,为应用程序中用到的Service(Service的细节将在第8章描述)类定义一个service标签。service标签同样支持Intents-filter子标签,用来允许后期运行时的绑定。
- <service android:enabled=”true” android:name=”.MyService”></service>
❑ provider
provider标签用来标明应用程序中的Content Provider。Content Provider用来管理数据库的存取以及应用程序间的共享(第6章中有练习)。
- <provider android:permission=”com.paad.MY_PERMISSION”
-
- android:name=”.MyContentProvider”
-
- android:enabled=”true”
-
- android:authorities=”com.paad.myapp.MyContentProvider”>
-
- </provider>
❑ receiver
通过添加receiver标签,你可以在还未启动应用程序之前注册一个Broadcast Receiver。如你在第5章中所见,Broadcast Receiver就像一个全局的事件监听者,一旦注册,就会在应用程序广播相应的Intents时执行。通过在manifest中注册Broadcast Receiver,当相应的Intent被广播了,应用程序就会自动地启动,并且注册的Broadcast Receiver会运行。
- <receiver android:enabled=”true”
-
- android:label=”My Broadcast Receiver”
-
- android:name=”.MyBroadcastReceiver”>
-
- </receiver>
❑ uses-permission
作为安全模型的一部分,uses-permission标签申明了应用程序正确运作所需要的授权。这些授权,包括在安装期间用户是否有权操作。设备本身中包含的许多Android服务需要授权,尤其是那些需要花钱或安全相关的服务(例如电话,收发SMS,或使用本地的服务等)。如下所示,第三方程序,包括你的,在提供共享的程序组件的使用权力之前都可以指定授权。
- <uses-permission android:name=”android.permission.ACCESS_LOCATION”>
-
- lt;/uses-permission>
❑ permission
在你限制应用程序组件的使用之前,你需要在manifest文件中定义一个授权。使用permission标签创建授权定义。应用程序组件通过增加android:permission特性来使用它。其他应用程序在使用那些后保护的组件之前,也需要在各自的manifest文件中包含uses-permission。
使用permission标签,你可以指定授权的等级(normal, dangerous, signature, signatureOrSystem),标签以及描述(定义在外部资源的字符串,解释得到授权的风险)等。
- <permission android:name=”com.paad.DETONATE_DEVICE”
-
- android:protectionLevel=”dangerous”
-
- android:label=”Self Destruct”
-
- android:description=”@string/detonate_description”>
-
- </permission>
❑ instrumentation
Instrumentation类为运行时测试Activity和Service提供了框架。它们提供了钩子,用来监视应用程序以及和系统资源的交互。为程序中定义的测试类创建节点。
- <instrumentation android:label=”My Test”
-
- android:name=”.MyTestClass”
-
- android:targetPackage=”com.paad.aPackage”>
-
- </instrumentation>
关于manifest和每个节点的更加详细描述参见:
http://code.google.com/android/devel/bblocks-manifest.html
ADT的新工程向导在创建新工程的同时自动的创建了manifest文件。当你为应用程序引入新的组件时,才会回到manifest文件中来。
分享到:
相关推荐
AS的Gradle插件默认会启用Manifest Merger Tool,若Library项目中也定义了与主项目相同的属性(例如默认生成的android:icon和android:theme),则此时会合并失败,并报上面的错误。 解决方法有以下2种: 方法1:在...
git clone git@github.com:Bresiu/android-manifest-merger.git mvn安装 java -jar target/manifest-merger-jar-with-dependencies.jar --main mainAndroidManifest.xml --log [VERBOSE, INFO, WARNING, ERROR] -...
Manifest_UFSFiles_Android.txt
第6章 使用Android Manifest文件定义应用程序 第7章 管理应用程序资源 第三部分 Android用户界面设计精髓 第8章 探索用户界面屏幕元素 第9章 使用布局设计用户界面 第10章 使用Fragment 第11章 ...
本地清单 - CyanogenMod 7.2 Android 2.3.7 用于替换特定于 BroadcomCM 的 CM ... cp local_manifest.xml /path/to/your/android/sourcetree/.repo cd /path/to/your/android/sourcetree/ 回购同步 学分 博通CM团队
android apk文件里MANIFEST.MF、CERT.SF、CERT.RSA三者的关系(csdn)————程序
博文介绍:http://blog.csdn.net/qq_21376985/article/details/51830991 Android开发工具资料Android Manifest 权限描述大全 随时随地查询权限描述。
[VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序的配置不正确,...
Android应用程序的升级(自身升级)全部过程,包括服务器端的配置,采用的是json方式
$ pip install check-manifest $ cd ~/src/mygreatpackage $ check-manifest 您可以要求脚本来帮助您更新MANIFEST.in: $ check-manifest -u -v listing source files under version control: 6 files and ...
Android 程序技术 本节课程内容:样式、主题、国际化 1 样式 样式(style)是包含一种或多种控件的属性集合,可以指定控件高度、宽度、字体...<manifest xmlns:android="/apk/res/android" package=".dialog" > ...
在程序升级/维护过程中,版本...Android系统会对程序manifest中描述的系统版本(minSdkVersion特性指定)进行检查。这样,应用程序可以指定兼容的最低系统API等级。了解更多信息,请参考“指定程序的系统API等级”。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.MangoMap" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission....
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.demo" android:versionCode="1" android:versionName="1.0" > android:minSdkVersion="8" android:targetSdk...
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.demo" android:versionCode="1" android:versionName="1.0" > android:minSdkVersion="8" android:targetSdk...
应用程序基础Application Fundamentals 4 关键类 4 应用程序组件 5 激活组件:intent 7 关闭组件 7 manifest文件 8 Intent过滤器 8 Activity和任务 10 Affinity(吸引力)和新任务 11 加载模式 12 清理堆栈 13 启动...
android manifest 解密jar
当我们需要运行一个与其他jar文件有关联jar文件时,如果jar文件里面的MANIFEST.MF文件没有配置好,那在运行时就要报异常:Exception in thread ...我提供的是一个生成MANIFEST.MF的Java程序,希望可以帮助大家的忙。
android应用程序开发manifest.xml详解
第三步:兼容Android N 及以上版本,在你应用的Manifest.xml添加如下代码! android:authorities="${applicationId}" 这个值必须与DownloadManager中的authorities一致(不设置则为应用包名)--> android:...