Android API Guides---App Manifest

应用清单

每个应用程序都必须在其根目录中的Andr??oidManifest.xml文件(正是名)。清单文件提供了关于您的应用程序到Android系统,该系统必须具备才可以运行任何应用程序的代码信息的基本信息。除其他事项外,清单执行以下操作:

它的名字的Java包的应用程序。该包名作为应用程序的唯一标识符。

它描述了应用程序的组件 - 该应用程序是由活动,服务,广播接收机,和内容提供商。它指定了实现每个组件并公布它们的能力(例如,其意图的消息,他们可以处理)类。这些声明使Android系统知道这儿有什么组件和下它们可以被载入什么条件。

它决定那些进程将容纳应用程序组件。

它声明其权限的应用程序必须拥有访问API的被保护部分,并与其他应用程序进行交互。

它也声明了其他需要有以与应用程序的组件进行交互的权限。

它列出了Instrumentation类,可以在应用程序运行时提供简档和其他信息。这些声明出现在清单中仅当应用程序被开发和测试;在应用程序发布之前他们删除。

它声明应用程序所需的Andr??oid API的最低水平。

它列出了该应用程序必须链接的库。

清单文件的结构

下面的图显示了清单文件,并且它可以包含每一元件的一般结构。每个元素,与所有它的属性一起被记录在全在一个单独的文件中。要查看有关的任何元素的详细信息,点击该元素的名称在图中,在下面的图,或元素名称的任何其他提及的元素的字母顺序排列。

?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>

所有可以出现在manifest文件里的元素按字母顺序列出。这是唯一合法的元素;您不能添加自己的元素或属性。

<action>

<activity>

<activity-alias>

<application>

<category>

<data>

<grant-uri-permission>

<instrumentation>

<intent-filter>

<manifest>

<meta-data>

<permission>

<permission-group>

<permission-tree>

<provider>

<receiver>

<service>

<supports-screens>

<uses-configuration>

<uses-feature>

<uses-library>

<uses-permission>

<uses-sdk>

文件约定

一些约定和规则普遍适用于在清单中的所有元素和属性:

分子

只有<清单>和<应用>元素是必需的,它们都必须存在,并且只能出现一次。大部分的人都可以发生多次或根本不出现 - 尽管至少他们中的一些必须存在的清单来完成任何有意义的事。

如果一个元素包含任何东西,它包含其他元素。所有值都通过属性设置,而不是一个元素内的字符数据。

在同一水平的元素之间通常是无序。例如,<活动>,<提供商>和<服务>元素可以任意顺序混合。 (安<活动别名>元素是例外:它必须遵循<活动>它是一个别名)。

属性

在形式上,所有的属性都是可选的。然而,也有一些必须为实现其目的的元件被指定。使用文件作为指导。对于真正的可选属性,它记载了默认值或状态在没有规范的会发生什么。

除了根<清单>元素的一些属性,所有的属性名开头的机器人:前缀 - 例如,Android版:alwaysRetainTaskState。因为前缀是共通的,文件的名字提及一个属性时忽略它。

声明类名

许多元素对应的Java对象,包括应用程序本身(<application>元素)和它的主要成分元素 - 活动(<活动>),服务(<服务>),广播接收机(<接收>)和内容提供商(<提供商>)。

如果你定义一个子类,如同你总是会为组件类(活动,服务,广播接收器和ContentProvider的),该子类通过一个name属性声明。该名称必须包括完整的包。例如,一个服务子类可以声明如下

<manifest . . . >
    <application . . . >
        <service android:name="com.example.project.SecretService" . . . >
            . . .
        </service>
        . . .
    </application>
</manifest>

但是,作为一个缩写,如果字符串的第一个字符是句号,该字符串添加到应用程序的包名(由<清单>元素的package属性指定)。以下分配是与上述相同的操作之一:

<manifest package="com.example.project" . . . >
    <application . . . >
        <service android:name=".SecretService" . . . >
            . . .
        </service>
        . . .
    </application>
</manifest>

当开始一个部件,机器人创建名称子类的实例。如果没有指定一个子类,它创建的基类的一个实例。

多个值

如果可以指定一个以上的值,该元素将被重复,而不是一个单一的元素中列出的多个值。例如,一个意图过滤器可以列出几个动作:

<intent-filter . . . >
    <action android:name="android.intent.action.EDIT" />
    <action android:name="android.intent.action.INSERT" />
    <action android:name="android.intent.action.DELETE" />
    . . .
</intent-filter>

资源值

一些属性具有可以显示给用户的值 - 例如,一个标签和一个活动的图标。这些属性的值应该被本地化,由一个资源或主题设置。资源值在以下格式表示,

@ [包:]类型:名称

这儿,如果该资源在同一个包中的应用程序可以省略包名,类型是资源的种类 - 例如“string”或“绘” - 和名称是标识特定资源的名称。 例如:

<activity android:icon="@drawable/smallPic" . . . >

从一个主题的值以类似的方式表示,但与初始“?”而不是 ‘@‘:

?[包:]类型:名称

字符串值

当一个属性值是一个字符串,反斜杠(‘\\‘)必须使用转义字符 - 例如,‘\\ n‘但对一个新行或‘\\ uxxxx‘代表一个Unicode字符。

文件功能

下面的章节描述了一些Android功能是如何体现在manifest文件。

意图过滤器

一个应用程序的核心组件(活动,服务和广播接收器)被激活的意图。一个意图是信息描述所需的操作捆绑(一个Intent对象) - 包含了要执行的数据,分量应该执行的操作的类别,以及其他相关的说明。机器人定位一个适当的部件向意图做出响应,启动是否需要一个组件的一个新实例,并将其传递意图对象。

组件公布其功能的 - 种意图,他们可以回应 - 通过意图过滤器。由于Android系统必须了解哪些主意,组件它启动组件之前可以处理,意图过滤器清单中指定为<意图过滤器>元素。一个组件可以具有任何数量的过滤器,每一个描述一个不同的能力。

意图明确指定了目标组件将激活该组件;过滤器不发挥作用。但是,这并不以名称指定的目标的意图可以激活仅当它可以穿过组件的过滤器中的一个组成部分。

关于intent对象如何对抗意图过滤器进行测试的信息,请参阅单独的文档,意图和意图过滤器。

图标和标签

许多元素都有一个小图标,可以显示给用户的文本标签图标和标签的属性。有些人也有,也可以在屏幕上显示较长的说明性文字描述属性。例如,在<权限>元件具有这三个属性,从而当用户被询问是否许可授予已经请求它的应用程序,代表许可,许可的名称和描述的图标的它需要什么都可以呈现给用户。

在任何情况下,在一个包含元素的图标和标签设置成为所有容器的子元素的默认图标和标签设置。因此,在<application>元素的图标和标签设置是每个应用程序的组件的默认图标和标签。同样,图标和标签设置一个组件 - 例如,<活动>元素 - 是每个组件的<意向过滤>元素的默认设置。如果<application>元素设置了一个标签,但是activity和它的intent filter没有,应用标签将被视为标签活动和意图过滤两种。

对于意图滤波器中设定的图标和标签被用于每当组件被呈现给用户作为满足由过滤器发布的函数来表示的部件。例如,一个带有“android.intent.action.MAIN”和“android.intent.category.LAUNCHER”设置的filter的活动为一体,启动一个应用程序 - 也就是说,作为一个应该被显示在应用程序启动器。因此,在过滤器中设置的图标和标签都显示在启动器的人。

权限

权限是对代码的或在设备上的数据的一部分的限制的限制访问。的限制,以保护关键数据和可能被滥用扭曲或破坏用户体验的代码。

每个权限是由一个唯一的标签识别。通常情况下,标签表明是受限制的动作。例如,这里是由Android定义的一些权限:

android.permission.CALL_EMERGENCY_NUMBERS

android.permission.READ_OWNER_DATA

android.permission.SET_WALLPAPER

android.permission.DEVICE_POWER

一个功能可以最多由一个权限进行保护。

如果应用程序需要访问由权限保护的功能,它必须声明它需要在清单的<使用许可权>元素的权限。然后,当安装在设备上的应用程序,安装程序判断是否通过检查签名应用程序的证书,并且在一些情况下,当局,要求用户授予所请求的权限。如果授予权限,应用程序能够使用受保护的功能。如果没有,尝试访问那些特性将直接失败并且没有任何通知给用户。

应用程序还可以保护它自己的组件(活动,服务,广播接收器,和内容提供商)的权限。它可以使用任何由Android(在android.Manifest.permission列出)定义或其他应用程序中声明的权限。或者,它可以定义自己。一个新的许可申报与<许可>元素。例如,一个活动可以得到保护如下:

<manifest . . . >
    <permission android:name="com.example.project.DEBIT_ACCT" . . . />
    <uses-permission android:name="com.example.project.DEBIT_ACCT" />
    . . .
    <application . . .>
        <activity android:name="com.example.project.FreneticActivity"
                  android:permission="com.example.project.DEBIT_ACCT"
                  . . . >
            . . .
        </activity>
    </application>
</manifest>

需要注意的是,在这个例子中,DEBIT_ACCT权限不仅与<权限>元素声明,它的使用也要求与<用途-权限>元素。其使用必须请求,以便启动保护的活动的应用程序的其它部件,即使保护是由应用自身强加的。

如果在相同的例子,许可属性被设置为其他地方声明权限(比如android.permission.CALL_EMERGENCY_NUMBERS,它不会有必要用<许可>元素再次声明。但是,它仍然会被必要要求它的使用与<使用许可权>。

在<许可树>元素为一组,将在代码中被定义权限的命名空间。和<权限组>定义标签一组权限(包括那些在清单与<许可>元素和其他那些宣称声明)。它仅影响如何呈现给用户时的权限进行分组。在<权限组>元素不指定哪些许可属于该组;它只是提供了一个组名。权限是通过分配组名称为<许可>元素的permissionGroup属性,放置在一组。

图书馆

每一个应用程序对默认的Andr??oid库,其中包括用于构建应用程序的基本包联(与普通类,如活动,服务,意图,浏览,按钮,应用程序,ContentProvider的,等等)。

然而,一些软件包驻留在自己的图书馆。如果应用程序使用任何这些软件包的代码,就必须明确要求对他们进行联系。清单必须包含一个单独的<用途库>元素命名每个库。 (库名可以为包的文档中找到。)

<action>

句法

<action android:name="string" />

包含于:

<intent-filter>

描述:

增加了一个意图过滤器的操作。一个<意图-filter>元素必须包含一个或多个<动作>元素。如果它不包含任何没有意图目的将通过过滤器得到的。请参阅有关意图过滤器的细节和动作规格的过滤器中的作用意图和意图过滤器。

属性:

android:name

动作的名称。某些标准动作是在意图类操作字符串常量定义。为了分配这些行动,这个属性之一,在前面加上“android.intent.action”。到后面ACTION_字符串。例如,对于ACTION_MAIN,用“android.intent.action.MAIN”和ACTION_WEB_SEARCH,用“android.intent.action.WEB_SEARCH”。

对于您定义的动作,最好使用包名作为前缀,以确保其唯一性。例如,如下一个TRANSMOGRIFY操作可能指定:

<action android:name="com.example.project.TRANSMOGRIFY" />
时间: 2024-10-12 11:37:27

Android API Guides---App Manifest的相关文章

翻译Android API Guides: App Manifest

原文在这里:http://developer.android.com/guide/topics/manifest/manifest-intro.html *Manifest译作"清单",这里沿用英文便于理解,其它术语同理. **文中链接都会跳转到android开发者网站. App Manifest 每一个应用都必须在它的根目录有一份AndroidManifest.xml文件(必须使用这个名字).Android系统必须在运行应用的任何代码之前了解一些重要信息,这些信息就来自于这份mani

android API Guides学习--Introduction(1)

android介绍: android提供了丰富的应用程序开发框架,它允许你在java语言环境中为移动设备创建独特的应用程序与环境. 1android应用程序提供多个入口点 android 应用程序是由不同的组件组合而成的,每个组件都被单独调用.activity组件提供一块屏幕作为使用者的界面.service独立的在幕后执行. 你可以使用intent类来实现组件的切换.也可以在一个app中多次调用同一个组件.例如在一个地图应用程序中显示地址的activity组件.该模型为一个单一的应用程序提供了多

Android API Guides – Introduction to Android

Android介绍 声明: 本文由Gordon翻译 发布于www.dlvoice.com 欢迎转载,但请保留此声明 原文地址:http://developer.android.com/guide/index.html Android提供了丰富的应用框架以便用户能够创建使用Java的环境来在移动设备上开发有创新性的应用和游戏.Android API Guides文档将会详细描述如何使用Android不同API来开发应用. 假如你是Android开发的新手,最好首先了解一下下面列出的Android

Android API Guides –Device Compatibility

设备的兼容性 声明: 本文由Gordon翻译 发布于www.dlvoice.com 欢迎转载,但请保留此声明 原文地址:http://developer.android.com/guide/practices/compatibility.html Android可以运行在不同类型的设备上,从手机到平板以及电视都可以运行.这些不同的设备将为开发者提供大量的潜在用户.那么为了能够让你的应用在所有的设备上运行良好,你就需要接受一些特性的多样性以及提供一个不同屏幕配置的友好的用户接口. 为了达到这样的目

【Android API Guides 简译(一)】App Resourses--Overview

将数据与程序分开的原因,表面是为了独立的管理数据,深层原因是使App兼容不同的环境即使你的数据支持不同语言或者不同屏幕大小的特殊设备.这是非常且越来越重要的! 对于各种各样的资源,我们统一分成两种: 默认资源和针对不同环境的备选资源 举个例子,默认资源存放在res/layout/ directory下,针对于横摆方向的设备的备选资源存放在res/layout-land/ directory(横摆方向的设备的具体方式见图).当只有默认资源时,见图1.当设置了备选资源时,见图二,Android系统会

android API Guides 之 web app --------------Building Web Apps in WebView(WebView与页面的绑定)

如果你要在手机端实现一个web app或在app里加载一个web页面,那么你就要用到WebView控件.这WebView类是View类的扩展子类,它允许web页面作为应用布局的一部分来展示.它是不具备一个完整的浏览器的那些特性,例如WebView没有导航栏,地址栏等.WebView的默认功能就是去找事WebView. 当你在你的app里面加一些以后可能跟新的信息时(例如用户协议或用户指南),你是用WebView那是非常有帮助的.在你的应用里,你可以创建一个带有WebView的activity,然

android API Guides 之 web app -------------Targeting Screens from Web Apps(屏幕适配)

如果你在Android设备上设计开发一款web应用,你就应该考虑web页面在不同屏幕上的显示问题.因为Android有很多不同类型的手机屏幕,所以你应该去考虑那些影响web页面在Android设备上显示的因素. 注意:本文中描述的以下特性,已经在Android 2.0或更高的版本中的Android浏览器(Android系统默认的)和WebView(Android中用于显示网页的控件)上得到支持.第三方的浏览器可能不支持这些的属性.(也就是说只做了解) 针对web页面适配Android设备,你应该

android API Guides学习--Introduction(2)

应用程序基本原理: android应用程序是用java语言编写的,android SDK工具在APK(Android package)里编译代码(数据文件和资源文件).apk是一个后缀为.apk的档案文件,1个apk文件包含了android应用程序的所有内容,apk是用来安装应用程序的基于android的设备.一旦安装了apk文件,每个app运行在自己安全的沙盒中. android操作系统是一个多用户的Linux操作系统,每一个app有一个不同的用户. 系统默认给各自的app分配一个唯一的Lin

android API Guides学习--Intent and Intent Filters

Intent是一个消息传递类,同时可以启动一些组件 作用: 1启动一个activity组件. 通过Context类的 startActivity()/ startActivity ()方法启动activity组件. 2启动一个service组件 通过Context类的startService()方法启动此组件,只能执行一次性操作(例如下载文件). 通过Context类的 bindService()方法 3发送一条广播 通过Context类的sendBroadcast(), sendOrdered

Android API Guides –System Permissions

系统权限 声明: 本文由Gordon翻译 发布于www.dlvoice.com 欢迎转载,但请保留此声明 原文地址:http://developer.android.com/guide/topics/security/permissions.html Android是一个特权分离的操作系统,运行在其上的应用都有一个特定的系统身份(Linux的用户ID和组ID).系统的部分也会被分为特定的身份,Linux就是通过这个身份来区别各个应用的. 更加详细的安全特性是通过"权限"机制来控制一个进