当前位置: 代码迷 >> Android >> android 机器人:应用程序Manifest引见
  详细解决方案

android 机器人:应用程序Manifest引见

热度:46   发布时间:2016-05-01 14:19:52.0
android 机器人:应用程序Manifest介绍

每一个Android应用程序包含一个manifest文件——AndroidManifest.xml,保存在工程的根目录中。该文件定义了应用程序的结构和元数据以及它们的组件。

??

它包含组件(ActivityServiceContent ProviderBroadcast Receiver)的节点,这些组件构成了整个应用程序。并且使用Intent FilterPermission,来决定如何相互影响以及对其他应用程序的影响。

?

它同样提供了特性来指定应用程序的元数据(像icon或者theme等),另外,还提供了高层节点用来安全设定和单元测试。如下描述:

manifest文件由<manifest/>标签作为根,包含了package特性,来设定工程的包名。它通常还包含xmlns:android特性,来导入命名空间,提供一些系统特性。一个典型的manifest节点如下面的XML片段所示:

?

Java代码?
  1. <manifest?xmlns:android=http://schemas.android.com/apk/res/android??
  2. ??
  3. package=”com.my_domain.my_app”>??
  4. ??
  5. [?...?manifest?nodes?...?]??
  6. ??
  7. </manifest>??

?

<manifest/>标签包含了应用程序组成部分们的节点,它们是应用程序的组件,安全设定和测试类。下面的列表给出了可获得的manifest标签节点的概要以及XML片段的演示:

?

??application

manifest文件只能包含一个application节点。通过特性设定,指明了应用程序的titleicontheme等元数据。同时,它又可以表现为一个容器,容纳ActivityServiceContent ProviderBroadcast Receiver的标签。

?

Java代码?
  1. <application?android:icon=”@drawable/icon”??
  2. ??
  3. android:theme=”@style/my_theme”>??
  4. ??
  5. [?...?application?nodes?...?]??
  6. ??
  7. </application>??

?

??activity

应用程序中显示的Activity都需要定义一个activity标签,通过android:name特性来指定类名。它必须包含启动Activity和其他一些屏幕或对话框中用到的Activity。尝试启动一个没有在manifest中定义的Activity会引发一个运行时异常。每一个Activity节点支持intent-filter子标签来指定哪些Intents启动Activity

Java代码?
  1. ?<activity?android:name=”.MyActivity”?android:label=”@string/app_name”>??
  2. ??
  3. <intent-filter>??
  4. ??
  5. <action?android:name=”android.intent.action.MAIN”?/>??
  6. ??
  7. <category?android:name=”android.intent.category.LAUNCHER”?/>??
  8. ??
  9. </intent-filter>??
  10. ??
  11. </activity>??

??

??service

activity标签一样,为应用程序中用到的ServiceService的细节将在第8章描述)类定义一个service标签。service标签同样支持Intents-filter子标签,用来允许后期运行时的绑定。

Java代码?
  1. <service?android:enabled=”true”?android:name=”.MyService”></service>??

?

??provider

provider标签用来标明应用程序中的Content ProviderContent Provider用来管理数据库的存取以及应用程序间的共享(第6章中有练习)。

?

Java代码?
  1. <provider?android:permission=”com.paad.MY_PERMISSION”??
  2. ??
  3. android:name=”.MyContentProvider”??
  4. ??
  5. android:enabled=”true”??
  6. ??
  7. android:authorities=”com.paad.myapp.MyContentProvider”>??
  8. ??
  9. </provider>??

?

??receiver

通过添加receiver标签,你可以在还未启动应用程序之前注册一个Broadcast Receiver。如你在第5章中所见,Broadcast Receiver就像一个全局的事件监听者,一旦注册,就会在应用程序广播相应的Intents时执行。通过在manifest中注册Broadcast Receiver,当相应的Intent被广播了,应用程序就会自动地启动,并且注册的Broadcast Receiver会运行。

?

Java代码?
  1. <receiver?android:enabled=”true”??
  2. ??
  3. android:label=”My?Broadcast?Receiver”??
  4. ??
  5. android:name=”.MyBroadcastReceiver”>??
  6. ??
  7. </receiver>??

?

??uses-permission

作为安全模型的一部分,uses-permission标签申明了应用程序正确运作所需要的授权。这些授权,包括在安装期间用户是否有权操作。设备本身中包含的许多Android服务需要授权,尤其是那些需要花钱或安全相关的服务(例如电话,收发SMS,或使用本地的服务等)。如下所示,第三方程序,包括你的,在提供共享的程序组件的使用权力之前都可以指定授权。

?

Java代码?
  1. <uses-permission?android:name=”android.permission.ACCESS_LOCATION”>??
  2. ??
  3. lt;/uses-permission>??

?

??permission

在你限制应用程序组件的使用之前,你需要在manifest文件中定义一个授权。使用permission标签创建授权定义。应用程序组件通过增加android:permission特性来使用它。其他应用程序在使用那些后保护的组件之前,也需要在各自的manifest文件中包含uses-permission

使用permission标签,你可以指定授权的等级(normal, dangerous, signature, signatureOrSystem),标签以及描述(定义在外部资源的字符串,解释得到授权的风险)等。

?

Java代码?
  1. <permission?android:name=”com.paad.DETONATE_DEVICE”??
  2. ??
  3. android:protectionLevel=”dangerous”??
  4. ??
  5. android:label=”Self?Destruct”??
  6. ??
  7. android:description=”@string/detonate_description”>??
  8. ??
  9. </permission>??

?

??instrumentation

Instrumentation类为运行时测试ActivityService提供了框架。它们提供了钩子,用来监视应用程序以及和系统资源的交互。为程序中定义的测试类创建节点。

?

Java代码?
  1. <instrumentation?android:label=”My?Test”??
  2. ??
  3. android:name=”.MyTestClass”??
  4. ??
  5. android:targetPackage=”com.paad.aPackage”>??
  6. ??
  7. </instrumentation>??

?

关于manifest和每个节点的更加详细描述参见:

http://code.google.com/android/devel/bblocks-manifest.html

?

ADT的新工程向导在创建新工程的同时自动的创建了manifest文件。当你为应用程序引入新的组件时,才会回到manifest文件中来。

?

  相关解决方案