(4.6.12)AndroidManifest.xml常用属性大全[进行中]

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.xxx.xxx"
 xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:installLocation="auto"
          android:versionCode="1000"
          android:versionName="9.9.99">

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17"/>
  <!-- 使用网络功能所需权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    ...
    ...
    <uses-permission android:name="com.sangfor.pocket.permission.MIPUSH_RECEIVE"/>

<application
        android:name=".MoaApplication"
        android:allowBackup="false"
        android:icon="@drawable/app_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:persistent="true"
        android:theme="@style/AppTheme.Basic"
        tools:replace="android:icon,android:theme">
  <uses-library android:name="android.test.runner"/>
  <meta-data android:name="CHANNEL" android:value="push"/>
<activity android:name="test.com.yu.main.activity.MainFragmentTabActivity"
android:exported="true"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Activity.Basic"
android:windowSoftInputMode="stateAlwaysHidden|adjustNothing">
<intent-filter><action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>

<activity android:name=".xxxx.xxx.xxxActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/Activity.Basic"/>
...
...
 <activity android:name=".xx.xx.xxxx"
android:label="拷贝"
android:screenOrientation="portrait"
android:theme="@style/Activity.Basic">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="file"> </data>
<data android:mimeType="image/*"></data>
<data android:mimeType="video/*"></data>
<data android:mimeType="audio/*"></data>
<data android:mimeType="text/*"></data>
<data android:mimeType="application/x-7z-compressed"></data>
</intent-filter>
</activity>

<receiver android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
....
....

 <provider android:name=".xxx.xxx" android:authorities="xx.xx.xxx.app.pojo.App.ContentProvider" android:exported="false"/>
....
....

1-manifest 属性和节点

英文原文:-http://developer.android.com/guide/topics/manifest/manifest-element.html
采集(更新)日期:2014-5-30

  • 语法
< 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 >
  • 包含于:
  • 必须包含:
    < application >
  • 可包含:
    < compatible-screens >
    < instrumentation >
    < permission >
    < permission-group >
    < permission-tree >
    < supports-gl-texture >
    < supports-screens >
    < uses-configuration >
    < uses-feature >
    < uses-permission >
    < uses-sdk >
  • 说明:
    AndroidManifest.xml 文件的根元素。 必须包含 < application > 元素且设定 xmlns:android 和 package 属性。

  • 属性:
    引入自:均为 API 级别 1,属性说明中特别注明的除外

1-1 package

包名,也会决定activity中name的使用.的相对路径

为应用程序指定 Java 语言风格的完整包名称。名称必须唯一。 名称中可以包含大小写字母(’A’到’Z’)、数字和下划线(’_’)。 不过,包名称中的每个部分只能以字母开头。

为了避免与其他开发人员起名的冲突,应该用自己拥有的 Internet 域名作为包名称的基础部分(顺序颠倒)。 例如,Google 发布的应用程序就以 com.google 开头。 绝不要在发布应用时使用 com.example 作为命名空间。

包名将用作应用程序的唯一标识 同时它也是应用程序进程的默认名称(参阅 < application >元素的 process 属性)和 Activity 默认任务的 Affinity 名称(参阅 < activity > 元素的 taskAffinity属性)。

提醒: 应用程序一经发布,包名称就不允许再更改了。 包名称定义了应用程序的标识,如果修改了包名称,就意味着变成了另一个应用程序,旧版本的用户就不能再更新了。

1-2 xmlns:android

定义 Android 命名空间。
应该确保本属性值为“http://schemas.android.com/apk/res/android

  • 这个是xml的命名空间,有了他,你就可以alt+/作为提示,提示你输入什么,不该输入什么,什么是对的,什么是错的,也可以理解为语法文件。或者语法判断器什么的
  • 这个主要作用是在运行的时候那些控件的属性都是通过它来识别的,如果上面你写错了,不会有任何问题,但是在运行的时候就会有问题,提示你没有指定宽度等什么。这个是不用联网的

在自定义的控件中,使用自定义的标签

  1. Android 自定义的xmlns其实很简单,语法规则是:
    在使用到自定义View的xml布局文件中需要加入xmlns:前缀=http://schemas.android.com/apk/res/你的应用程序包路径.【 xmlns:app=”http://schemas.android.com/apk/res/kexc.myView”】
  2. 代码实现
     <TextView    
     android:layout_width="fill_parent"   
     android:layout_height="wrap_content"   
     android:app="@string/hello"  
     />  

1-3 xmlns:tools=”http://schemas.android.com/tools”

这些属性用于渲染布局,而不会影响到程序运行。也就是说只在预览布局时出现,在程序运行时相当于该属性不存在。

这个说明非常有意思,比如我们在布局文件中想要显示一段文字时,而该文字内容在程序中可能动态变化,特别是有参数的字符串内容%1$s之类的内容,以前必须使用android:text显示,然后调整这段文字的大小颜色参数,然后完成后删除android:text属性。有了tools参数后,可以直接使用tools:text在预览时显示文字即可,省却了上面删除的麻烦。

这里写图片描述

目前常用的有tools:text, tools:visibility, tools.src, tools.background

官方文档中也列出了一些限制,如下:

  • Currently only overriding existing attributes is supported. We may want to define some additional convenience attributes to make it simple to for example choose which child in a ViewFlipper to showetc. 当前只支持overriding已有的属性
  • You have to manually edit in your designtime attributes at this time They do not appear as an option in for example the layout editor property sheet. Editor code completion does not help you enter these attributes; the easiest way to use them is to first enter them in the Android namespace, and when done replacing the prefix. 目前还只能手动输入该部分,代码自动填充还无法完成
  • Note that designtime attributes are supported only for layout files themselves. You cannot use them anywhere else – in menu XML files, in string resource definitions, etc.只支持layout布局,menu/resource/string

1-4 android:versionCode

示例:android:versionCode=”1000”

android:versionCode:主要是用于版本升级所用,是INT类型的,第一个版本定义为1,以后递增。
内部版本号。本数字仅用于确定版本的新旧程度,数字越大代表版本越新。这样只要判断该值就能确定是否需要升级,该值不显示给用户。

1-5 android:versionName

示例:android:versionName=”9.9.99”

android:versionName:这个是我们常说明的版本号,由三部分组成..,该值是个字符串,可以显示给用户。

PackageManager pm = context.getPackageManager();//context为当前Activity上下文 
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
version = pi.versionName;

1-6 android:sharedUserId

要与其它应用程序共享的 Linux 用户ID。

默认情况下,Android 将为每个应用程序分配唯一的用户 ID。 不过,如果将两个以上应用程序的本属性设置为同一个值,则这些程序将共享同一个 ID — 它们将用同一个证书进行签名。

拥有相同用户 ID 的多个应用程序可以相互访问数据,如果需要的话还可以运行于同一个进程中。

1-7 android:sharedUserLabel

引入自 API 级别 8

供用户阅读的共享用户 ID 的文字标签。 本属性必须设为对字符串资源的引用,不能直接设为字符串。

本属性自 API 级别 3 开始引入。仅当同时设置了 sharedUserId 属性后才会生效。
仅接受以下关键字:

TablesAre
“internalOnly”应用程序必须安装在内部存储中。如果设为此值,则应用程序绝不会安装到外部存储上去。 如果内部存储满了,系统就无法安装程序。 这也是未定义 android:installLocation 时的默认设置。
“auto”应用程序可以安装到外部存储中,但默认系统会首先在内部存储中安装。 如果内部存储空间不足,系统才会将其安装到外部存储上。 一旦安装完毕,用户就可以通过系统设置将程序自由转移到内部或外部存储上。
“preferExternal应用程序最好是安装到外部存储中(SD卡)。 系统不能保证每次都会成功。 如果外部存储介质不可用或者没有空间,那么应用程序可能还会安装到内部存储中。 一旦安装完毕,用户可以通过系统设置将程序自由转移到内部或外部存储上。

注意: 默认情况下,应用程序将会安装到内部存储中去。 仅当定义了属性“auto”或“preferExternal”时,才可能会安装到外部存储中。
如果应用程序安装于外部存储中:

  • .apk 文件将保存在外部存储中,但应用程序的数据(比如数据库)仍然保存于设备内部存储中的。
  • .apk 文件的保存容器是用密钥加密过的,只允许应用程序在安装设备上进行访问。(即使把SD卡换到其他设备上,用户也无法使用装在卡上的应用程序。) 不过,在同一个设备上是可以使用多张SD卡的。
  • 在用户需要时,应用程序可以转移到内部存储中去。

用户也可以要求把应用程序从内部存储转移到外部存储中去。 但是本属性的默认设置是 internalOnly,这时系统不允许用户把应用程序转移到外部存储。
关于使用本属性的详情,请参阅应用程序安装位置 (包括如何保持向后兼容性)。

1-8 android:installLocation

应用程序的默认安装位置

2-uses-sdk

在AndroidManifest.xml中会看到的身影,完整的uses-sdk是这个样子:

<uses-sdk Android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer"/>

其中integer是Android API level。
uses-sdk是为了程序兼容而存在的,它是如何做兼容的呢?也许从三个子项的名字上就可以猜测出来

  • minSdkVersion:若手机或平板的API level低于apk的minSdkVersion,系统不能安装这个应用。
  • targetSdkVersion:API level在minSdkVersion和targetSdkVersion之间的版本可以直接执行程序(不需要打开任何兼容项)。若手机或平板的API
    level大于程序的targetSdkVersion,Android运行环境就需要模拟之前版本API的行为,这个称之为兼容。程序开发者如何确定这个值呢?自然是在对应平台上测试,具体的过程是:递增targetSdkVersion,每递增一次测试一次
  • maxSdkVersion:若手机或平板的API level
    大于maxSdkVersion,程序不能安装或使用。google文档说不推荐这个子项,因为Android
    2.0.1后不检查这一项了,只有google play还会check这一项。

3-uses-permission

引入于:API 级别 1

英文原文:http://developer.android.com/guide/topics/manifest/uses-permission-element.html
采集(更新)日期:2014-5-16

< uses-permission android:name="string"    android:maxSdkVersion="integer" / >
  • 包含于:
    < manifest >
  • 说明:
    为了让应用程序能够正常获取所申请的权限,必须要获得用户授权。 权限是在安装时而不是运行时由用户来赋予的。
    关于权限的更多信息,请参阅 manifest 介绍文档的 Permissions 部分和另一篇文档 安全和权限。 系统基本权限的清单可以参阅 android.Manifest.permission

3-1 android:name

权限的名称。可以是本应用程序用 元素定义的权限、其它应用程序定义的权限或者是诸如“android.permission.CAMERA”和“android.permission.READ_CONTACTS”之类的标准系统权限。 这两个例子已表明,典型的权限名称应该以包名称作为前缀。

3-2 android:maxSdkVersion

将本权限赋予应用程序时,系统应有的最高 API 级别。 如果自某版本 API 级别开始,应用程序不再需要申请本权限了,那么此属性就会很有用。

例如,从 Android 4.4 (API level 19)开始,如果应用程序要往外部存储中属于自己的目录里(由 getExternalFilesDir() 获取)写入数据,就不需要再申请 WRITE_EXTERNAL_STORAGE 权限了

4-application

英文原文:http://developer.android.com/guide/topics/manifest/application-element.html
采集(更新)日期:2014-5-30

  • 语法:
< application android:allowTaskReparenting=["true" | "false"]
    android:allowBackup=["true" | "false"]
    android:backupAgent="string"
    android:debuggable=["true" | "false"]
    android:description="string resource"
    android:enabled=["true" | "false"]
    android:hasCode=["true" | "false"]
    android:hardwareAccelerated=["true" | "false"]
    android:icon="drawable resource"
    android:killAfterRestore=["true" | "false"]
    android:largeHeap=["true" | "false"]
    android:label="string resource"
    android:logo="drawable resource"
    android:manageSpaceActivity="string"
    android:name="string"
    android:permission="string"
    android:persistent=["true" | "false"]
    android:process="string"
    android:restoreAnyVersion=["true" | "false"]
    android:requiredAccountType="string"
    android:restrictedAccountType="string"
    android:supportsRtl=["true" | "false"]
    android:taskAffinity="string"
    android:testOnly=["true" | "false"]
    android:theme="resource or theme"
    android:uiOptions=["none" | "splitActionBarWhenNarrow"]
    android:vmSafeMode=["true" | "false"] >
    . . .
< /application >
  • 包含于:
    < manifest >
  • 可包含:
    < activity >
    < activity-alias >
    < meta-data >
    < service >
    < receiver >
    < provider >
    < uses-library >
  • 说明:
    对应用程序的声明。 本元素包含了声明每个程序组件的子元素,及作用于全部组件的属性。 很多属性(比如 icon、label、permission、process、 taskAffinity 和 allowTaskReparenting) 设置了组件元素中对应属性的默认值。 其他属性(比如 debuggable、enabled、description 和 allowClearUserData)则设置了应用程序的全局属性值,且不能被组件的属性值覆盖。

  • 属性:
    引入自: API 级别 1

4-1 android:name

示例:android:name=”.MyApplication”

实现本应用程序的 Application 子类的完全限定名称。 当应用程序开始运行时,此类将先于所有程序组件被初始化。

该子类是可选的:大多数应用程序不需要用到。 在未提供子类置时,Android 将使用 Application 类的实例。

这个name属性是来设置你所有activity所属于哪个application的,默认是android.app.Application,你也可以自己定义一个类 extends Application

4-2 android:icon

示例:android:icon=”@drawable/app_launcher”

应用图标,根据屏幕的大小,会记载不同文件夹下的图标

整个应用程序的 logo 标识,也即各 Activity 的默认 logo。

本属性必须设为对 drawable 资源的引用,该资源中包含了图片文件(例如“@drawable/logo”)。 logo 没有默认值。

4-3 android:label

示例:android:label=”@string/app_name”

应用标题

供用户阅读的代表整个应用程序的文本标签,也即应用程序中每个组件的默认标签。 请参阅 < activity >、 < activity-alias >、 < service >、 < receiver > 和< provider > 元素各自的 label 属性。

文本标签应设为一个字符串资源的引用,这样就能像其它用户界面内的字符串一样对其进行本地化。 不过,考虑到开发时的便利性,也可以将其直接设为字符串。

4-4 android:allowBackup=”false”

是否允许应用程序参加备份和恢复机制。 如果本属性设为 false ,则不会执行应用程序的备份和恢复,即使是在进行全系统的备份时也不会。 备份机制将会把应用程序的所有数据都通过 adb 保存下来。 本属性的默认值是 true

API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是True。当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。

Android属性allowBackup安全风险源于

  • adb backup容许任何一个能够打开USB
    调试开关的人从Android手机中复制应用数据到外设,一旦应用数据被备份之后,所有应用数据都可被用户读取;
  • adb restore容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的创建。因此,当一个应用数据被备份之后,用户即可在其他Android手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态。

尤其是通讯录应用,一旦应用程序支持备份和恢复功能,攻击者即可通过adb backup和adb restore进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可通过此来进行恶意支付、盗取存款等;因此为了安全起见,开发者务必将allowBackup标志值设置为false来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。

4-5 android:largeHeap=”true”

应用程序的进程是否会用较大的 Dalvik 堆来创建。 这将作用于所有为该应用程序创建的进程,但只对第一个被装入进程的应用程序生效。 如果通过共享用户 ID 的方式让多个应用程序公用一个进程,那么这些应用程序必须全部指定本选项,否则将会导致不可预知的后果。

大部分应用程序不需要用到本属性,而是应该关注如何减少内存消耗以提高性能。 使用本属性并不能确保一定会增加可用的内存,因为某些设备可用的内存本来就很有限。

要在运行时查询可用的内存大小,请使用 getMemoryClass()getLargeMemoryClass() 方法。

在日常的Android开发中,我们必然遇到过OutOfMemoryError这样的崩溃,产生的原因无外乎两点,一是内存过小不够用,二是程序设计有误,导致不能释放内存,其中后者情况较多。在解决这个问题时,我们亦或多或少听到android:largeHeap

一个应用如果使用了largeHeap,会请求系统为Dalvik虚拟机分配更大的内存空间。使用起来也很方便,只需在manifest文件application节点加入android:largeHeap=“true” 即可

对于largeHeap的使用,我们该持有的谨慎的态度,largeHeap可以使用,但是要谨慎。对于本身对内存要求过大的图片或者视频应用,我们可以使用largeHeap。除上面的情况,如果仅仅是为了解决OutOfMemoryError这样的问题,而尝试使用largeHeap分配更大内存的这种指标不治本的方法不可取

4-6 android:persistent=”true”

应用程序是否需要一直保持运行状态 —“true”表示是,“false”表示否。 默认值是“false”。 一般情况下,应用程序不应该设置本标志;持久运行模式仅适用于某些特定的系统应用。

在Android系统中,有一种永久性应用。它们对应的AndroidManifest.xml文件里,会将persistent属性设为true,在系统启动之时,AMS的systemReady()会加载所有persistent为true的应用。

带persistent标志的系统应用(即flags中设置了FLAG_SYSTEM)是一定会被选上的,但如果不是系统应用的话,则要进一步判断当前是否处于“安全模式”,一旦处于安全模式,那么就算应用设置了persistent属性,也不会被选中。

那些persistent属性为true的应用,基本上都是在系统启动伊始就启动起来的。

4-7 android:theme=”@style/AppTheme.Basic”

在Web开发中,Html负责内容,CSS负责表现。同样,在Android开发中,可以使用Theme、Style+UI组件的方式实现内容和形式的分离。

Android上的Style分为了两个方面:

  • Theme是针对窗体级别的,改变窗体样式;
  • Style是针对窗体元素级别的,改变指定控件或者Layout的样式。

Android系统的themes.xml和style.xml(位于系统源代码frameworks\base\core\res\res\values)包含了很多系统定义好的style,建议在里面挑个合适的,然后再继承修改。

4-8 tools:replace=”android:icon,android:theme”

AS的Gradle插件默认会启用Manifest Merger Tool,若Library项目中也定义了与主项目相同的自定义arry属性(例如默认生成的android:icon和android:theme),则此时会合并失败,并报上面的错误。

解决方法有以下2种:

  1. 在Manifest.xml的application标签下添加tools:replace=”android:icon,
    android:theme”(多个属性用,隔开,并且记住在manifest根标签上加入xmlns:tools=”http://schemas.android.com/tools”,否则会找不到namespace哦)
  2. 在build.gradle根标签上加上useOldManifestMerger true (懒人方法)

参考官方介绍:
http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

4-9 android:backupAgent

实现应用程序备份代理的类名,这是 BackupAgent 的子类。
本属性值应为完全限定的类名(如“com.example.project.MyBackupAgent”)。
不过作为简称,如果名称的首字符是句点(比如“.MyBackupAgent”),则 < manifest > 元素中设置的包名称将会自动加到前面。
没有默认值,必须指定名称。

4-10 android:allowTaskReparenting

(4.1.2.2)基础总结篇之三:Activity的task相关

当具有相同 affinity 名称的 Task 即将返回前台时,应用程序的 Activity 是否能从启动时的 Task 转移至此 Task 中去 — “ true”表示可以移动,“false”表示必须留在启动时的 Task 中, 缺省值是“false”。

4-11 android:debuggable

应用程序能否被调试,即便是以用户模式运行于设备中时 — “true”表示可以,“false”表示不允许。
默认值是“false”。

4-12 android:description

供用户阅读的应用程序描述信息,比 label 的内容更多也更详细。 本属性值必须设为对字符串资源的引用。 与 label 不同,本属性不能直接设为字符串。

没有默认值。

4-13 android:enabled

Android 系统能否实例化应用程序中的各组件 — “true”表示可以,“false”表示不允许。 如果此值设为“true”,则由每个组件的 enabled 属性确定自身的启用或禁用。 如果此值设为“false”,则覆盖组件的设置值;所有组件都将被禁用。

默认值是“true”

4-14 Android:hasCode

应用程序是否包含代码 — “true”表示包含,“false”表示不包含。 如果此值设为“false”,则在启动组件时系统不会试图装载任何程序代码。 默认值是“true”。

应用程序不包含任何自有代码的情况极少发生。 仅当只用到了内置的组件类时才有可能,比如使用了 AliasActivity 类的 Activity。

4-15 android:hardwareAccelerated

是否为应用程序中所有的 Activity 和 View 启用硬件加速渲染功能 —“true”表示开启,“false”表示关闭。 如果 minSdkVersion 或 targetSdkVersion 的值大于等于“14”,则本属性默认值是“true”。否则,默认值为“false”。

自 Android 3.0 (API 级别 11)开始,应用程序可以使用硬件加速的 OpenGL 渲染功能来提高很多常用 2D 图形操作的性能。 当开启硬件加速渲染功能时,大部分 Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的操作都会被加速。 即便应用程序没有显式地调用系统的 OpenGL 库,这仍能使动画更加平滑、屏幕滚动也更加流畅、整体响应速度获得改善。

请注意,并非所有的 OpenGL 2D 操作都会被加速。 如果开启了硬件加速渲染功能,请对应用程序进行测试以确保使用渲染时不会出错。
更多信息,请参阅硬件加速指南。

4-16 android:killAfterRestore

在执行全系统的恢复操作时,配置恢复后相关的应用程序是否要被终止。 单个包的恢复操作不会导致程序被关闭。 全系统的恢复操作一般只会发生一次,即第一次配置手机时。 第三方应用程序通常不需要用到本属性。

默认值是“true”,表示全系统恢复过程中,应用程序在处理完数据后将被关闭

4-17 android:manageSpaceActivity

指定某个 Activity 子类的完全限定名称,系统可以启动此 Activity 来让用户管理应用程序占用的内存空间。

这个 Activity 必须已用 < activity > 元素进行了声明

4-18 android:permission

客户端要与应用程序交互而必须拥有的权限名称。 本属性为一次设置适用于全部程序组件的权限提供了一个便捷途径。 它可以被组件各自的 permission 属性覆盖。

关于权限的详细信息,请参阅介绍一文中的 权限 章节和另一篇文档 安全和权限。

4-19 android:process

应用程序的全部组件都将运行于其中的进程名称。 每个组件通过设置各自的 process 属性,可以覆盖本缺省值。

默认情况下,当需要运行应用程序的第一个组件时,Android 会为程序创建一个进程。 然后所有组件都会运行在这个进程中。 默认进程的名称与 < manifest > 元素设置的包名一致。

通过将本属性设置为其他应用程序的进程名称,可以让两个应用程序的组件运行于同一个进程中 — 但只有这两个程序共享同一个用户 ID 并用同一个证书签名时才行。

如果赋予本属性的名称是以冒号(’:’)开头的,则必要时将会为应用程序创建一个新的私有进程。 如果进程名称以小写字母开头,则将创建以此名称命名的全局进程。 全局进程可以被其他应用程序共享,以减少资源的占用。

4-20 android:taskAffinity

供应用程序中全部 Activity 使用的 affinity 名称,那些在各自的 taskAffinity 属性中设置了其他 affinity 的 Activity 除外。 详情请参阅 Activity 的 affinity 属性。

默认情况下,应用程序中的所有 Activity 都共享同一个 affinity 。affinity 的名称与 < manifest > 元素中设置的包名称相同。

4-21 android:testOnly

标明本应用程序是否仅供测试。 比如,本应用程序可能会暴露一些不属于自己的功能或数据,这将引发安全漏洞,但对测试而言这又非常有用。 这种应用程序只能通过 adb 进行安装。

4-22 android:vmSafeMode

标明应用程序是否期望虚拟机(VM)运行于安全模式。 默认值是“ false”

4-23 android:supportsRtl

声明应用程序是否要支持自右向左(RTL)布局(Layout)。
如果本属性设为 true 并且 targetSdkVersion 为 17 以上版本,则系统将会激活并使用各种 RTL API ,应用程序就可以显示 RTL Layout。 如果本属性设为 false 或者 targetSdkVersion 为 16 以下版本,则 RTL API 将会被忽略或失效,应用程序将忽略与 Layout 方向有关的用户本地化选项(Layout 都将从左到右布局)。
本属性的默认值是 false。
本属性自 API 级别 17 开始加入

4-24 android:restoreAnyVersion

指明应用程序是否将尝试恢复任何备份数据集,即使备份数据的程序版本比当前安装的要新。 本属性设为 true 将允许 Backup Manager 尝试恢复操作,即使发生版本冲突也即数据版本不兼容时也是如此。 使用本属性时务必小心!

本属性的默认值是“false”。

4-25 android:uiOptions

供 Activity UI 使用的附加选项。
必须设为以下值之一:

TablesAre
“none”没有附加 UI 选项。这是默认值。
“splitActionBarWhenNarrow”当横向空间受限时(比如设备处于纵向模式时),在屏幕底部添加一横条,用于显示 ActionBar 中的 Action 项。 这时不再是在屏幕顶部的 ActionBar 中显示有限的几个 Action 项了,ActionBar 拆分为顶部导航栏和底部横条。 这就确保了合理的可用空间,不仅可以容纳 Action 项,还可以在顶部显示导航和标题。 菜单项不会被拆分为两部分,还是会放在一起显示。

5- uses-library和instrumentation

单元测试相关配置

1. <uses-library Android:name="android.test.runner"/>代表把单元测试框架中的一些依赖库引入进来
2.<instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="com.pccw" android:label="aaa"/>代表配置单元测试框架的启动装置,启动装置有好几个类,可以选择,一般情况下我们使用上面这个。
3.targetPackage与上面的package相同,代表单元测试框架和当前应用是处于同一个进程中

6-< meta-data >

-(4.6.12.6)Android中< meta-data >的使用

meta-data就像其名一样,主要用来定义一些组件相关的配置值。

按照官方定义,metadata是一组供父组件使用的名值对(name-value pair),因此相应的meta-data元素应该定义在相应的组件中。即如果想在activity中使用metadata,那么meta-data必须定义在AndroidManifest.xml的activity声明中。

7- < Activity >

  • 语法:
< activity android:allowTaskReparenting=["true" | "false"]
    android:alwaysRetainTaskState=["true" | "false"]
    android:clearTaskOnLaunch=["true" | "false"]
    android:configChanges=["mcc", "mnc", "locale",
        "touchscreen", "keyboard", "keyboardHidden",
        "navigation", "screenLayout", "fontScale", "uiMode",
        "orientation", "screenSize", "smallestScreenSize"]
    android:enabled=["true" | "false"]
    android:excludeFromRecents=["true" | "false"]
    android:exported=["true" | "false"]
    android:finishOnTaskLaunch=["true" | "false"]
    android:hardwareAccelerated=["true" | "false"]
    android:icon="drawable resource"
    android:label="string resource"
    android:launchMode=["multiple" | "singleTop" |
        "singleTask" | "singleInstance"]
    android:multiprocess=["true" | "false"]
    android:name="string"
    android:noHistory=["true" | "false"] 
    android:parentActivityName="string" 
    android:permission="string"
    android:process="string"
    android:screenOrientation=["unspecified" | "behind" |
        "landscape" | "portrait" |
        "reverseLandscape" | "reversePortrait" |
        "sensorLandscape" | "sensorPortrait" |
        "userLandscape" | "userPortrait" |
        "sensor" | "fullSensor" | "nosensor" |
        "user" | "fullUser" | "locked"]
    android:stateNotNeeded=["true" | "false"]
    android:taskAffinity="string"
    android:theme="resource or theme"
    android:uiOptions=["none" | "splitActionBarWhenNarrow"]
    android:windowSoftInputMode=["stateUnspecified",
        "stateUnchanged", "stateHidden",
        "stateAlwaysHidden", "stateVisible",
        "stateAlwaysVisible", "adjustUnspecified",
        "adjustResize", "adjustPan"] > 
    . . .
< /activity >
  • 包含于:
    < application >
  • 可包含:
    < intent-filter >
    < meta-data >
  • 说明:
    声明一个 Activity( Activity 子类),实现应用程序的可视化用户界面。 所有 Activity 都必须在manifest文件中用 < activity > 声明。 任何未经声明的 Activity 系统都会视而不见,且不会运行。

7-1 android:name

示例:android:name=”.xxxx.xxx.xxxActivity”

name是activity源文件的路径
- .代表相对路径,相对于package路径
- 没点默认也是相对于package路径
- 可以输入绝对路径:包名+文件名

7-2 android:screenOrientation=”portrait”

示例:android:screenOrientation

Activity在屏幕当中显示的方向。属性值可以是下表中列出的一个值:

TablesAre
“unspecified”默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同
“user”使用用户当前首选的方向
“behind”使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。
“landscape”横向显示(宽度比高度要大)
“portrait”纵向显示(高度比宽度要大)
“reverseLandscape”与正常的横向方向相反显示,在API Level 9中被引入。
“reversePortrait”与正常的纵向方向相反显示,在API Level 9中被引入。
“sensorPortrait”纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
“sensor”显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。
“fullSensor”显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。
“nosensor”屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。

注意:在给这个属性设置的值是“landscape”或portrait的时候,要考虑硬件对Activity运行的方向要求。正因如此,这些声明的值能够被诸如Google Play这样的服务所过滤,以便应用程序只能适用于那些支持Activity所要求的方向的设备。

例如,如果声明了“landscape”、“reverseLandscape”、或“sensorLandscape”,那么应用程序就只能适用于那些支持横向显示的设备。但是,还应该使用< uses-feature>元素来明确的声明应用程序所有的屏幕方向是纵向的还是横行的。例如:< uses-feature android:name=”android.hardware.screen.portrait”/>。这个设置由Google Play提供的纯粹的过滤行为,并且在设备仅支持某个特定的方向时,平台本身并不控制应用程序是否能够被按照。

7-3 android:configChanges

示例:android:configChanges=”orientation|keyboardHidden|screenSize”

-(4.6.12.7)Activity中ConfigChanges属性的用法

通过设置这个属性可以使Activity捕捉设备状态变化,当所指定属性(Configuration Changes)发生改变时,通知程序调用 onConfigurationChanged()函数:

orientation   //设备旋转,横向显示和竖向显示模式切换
keyboardHidden // 键盘隐藏
screenSize //屏幕尺寸
  1. 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

  2. 设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

  3. 设置Activity的android: configChanges = “orientation |
    keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

但是,自从Android 3.2(API 13),在设置Activity的android:configChanges=”orientation|keyboardHidden”后,还是一样会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置”orientation”,你还必须设置”ScreenSize”。
解决方法:
AndroidManifest.xml中设置android:configChanges=”orientation|screenSize“

7-4 android:exported

示例:android:exported=”true”

这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。

它的默认值依赖与该服务所包含的过滤器。没有过滤器则意味着该服务只能通过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(因为其他外部使用者不会知道该服务的类名),因此这种情况下,这个属性的默认值是false。另一方面,如果至少包含了一个过滤器,则意味着该服务可以给外部的其他应用提供服务,因此默认值是true。

这个属性不是限制把服务暴露给其他应用程序的唯一方法。还可以使用权限来限制能够跟该服务交互的外部实体。

如果将入口的activity设置为true,则不能启动app,因为不能访问:

W/ActivityManager(2773): Permission denied: checkComponentPermission()

修改com.xxx.xxx应用的manifest.xml文件,找到YourActivity标签,添加Android:exported=”true”一句即可,该句意思为该activity可以被其他应用访问

如果Service等的AndroidManifest中声明为android:exported=”false”
则该服务不能够跨进程使用。

7-5 android:launchMode

示例:android:launchMode=”singleTask”

launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里

  1. standard
    不管有没有已存在的实例,都生成新的实例

  2. singleTop
    如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例

  3. singleTask
    如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前

  4. singleInstance
    因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入

7-6 android:windowSoftInputMode

示例“android:windowSoftInputMode=”stateAlwaysHidden|adjustNothing”

键盘弹出后界面的调整模式
activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
这个属性能影响两件事情:
【一】当有焦点产生时,软键盘是隐藏还是显示
【二】是否减少活动主窗口大小以便腾出空间放软键盘
它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如:<activity Android:windowSoftInputMode="stateVisible|adjustResize". . . >
值的含义:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

7-7 android:theme

示例:android:theme=”@style/Activity.Basic”
activity的主题

7-8 android:allowTaskReparenting

详情见< application >—allowTaskReparenting

当某个拥有相同 affinity 的任务即将返回前台时,Activity 是否能从启动时的任务转移至此任务中去 —“true”表示可以移动,“false”表示它必须留在启动时的任务中。

如果未设置本属性,则 < application > 元素中对应的 allowTaskReparenting 属性值将会应用于 Activity 。 默认值是“false”。

通常在启动时,Activity 与启动时的任务相关联,并在整个生命周期都位于此任务中。 利用本属性可以强行让 Activity 在当前任务不再显示时归属于另一个与其 affinity 相同的任务。 典型应用是让一个应用程序的 Activity 转移到另一个应用程序关联的主任务中去。

7-9android:alwaysRetainTaskState

系统是否一直维持 Activity 所属任务的状态 —“true”表示是,“false”表示允许系统在特定情况下重启任务。 默认值是“false”。 本属性只对任务的根 Activity 有效,其他 Activity 都忽略本属性。

通常,在用户从主屏幕(Home Screen)重新运行应用程序时,系统有时会清理任务(清除任务栈中根 Activity 以上的所有 Activity)。 执行此操作的典型情况是:用户有段时间(比如30分钟)没有访问该任务了。
然而,一旦本属性设为“true”,则不论用户位于何处,将总是返回任务的最后状态。 举例来说,这对浏览器就很有用,Web 浏览器这类应用需要保持很多状态(诸如多个已打开的页面),用户不期望这些状态马上消失。

7-10 android:clearTaskOnLaunch

每次从主屏幕重新执行程序时,是否将任务中除根 Activity 以外的所有 Activity 都清除 — “true”表示总是清除至根 Activity,“false”则不清除。 默认值是“false”。 本属性只对启动新任务的 Activity(根 Activity)有效,其他 Activity 都忽略本属性。

如果此值为“true”,则每当用户再次启动任务时都会进入根 Activity, 无论之前在此任务中做过什么操作,也无论上次是用 Back 还是 Home 键离开任务的。 如果此值为“false”,那么在某些情况下也许还会清理任务(请参阅 alwaysRetainTaskState属性),但并不是每次都会执行。
例如,假设用户从主屏幕启动了 Activity P,又从 P 转到 Activity Q。 接下来用户按下了 Home 键,然后再回到 Activity P 。 通常,用户将会看到 Activity Q,因为在 P 的任务里最后操作的就是 Q。 然而,如果 P 把本属性设为“true”,则用户按下 HOME 键时所有在它之上的 Activity(本例中是Q)都会被清除,任务将进入后台。 因此用户在下次返回该任务时就只会看到 P 了。

如果本属性和 allowTaskReparenting 都设为“true”,那么所有可改变任务归属的 Activity 都会转移到具有相同 affinity 的任务中去,其余的 Activity 都将如上所述被清除

7-11 android:enabled

Activity 能否被系统实例化 — “true”表示可以,“false”表示不允许。 默认值是“true”。

< application > 元素拥有自己的 enabled 属性,它适用于应用程序中所有的组件,包括 Activity。 系统要能够实例化 Activity , < application > 和< activity >的 enabled 属性都必须设为“true”(这也都是默认值)。 只要其中有一个是“false”, Activity 就不能被实例化。

7-12 android:excludeFromRecents

Activity 是否排除在用户最近访问应用程序的列表(“recent apps”)之外 。 也就是说,如果本 Activity 是新任务中的根 Activity,则本属性确定了该任务是否不出现在最近应用程序列表中。 如果要排除在列表外,就设为“true”。 如果要包含在列表中,则设为“false”。 默认值是“false”

7-13 android:finishOnTaskLaunch

每当用户再次启动任务时(在主屏幕上选择该任务),已存在的 Activity 实例是否应该关闭 — “true”表示需要关闭,“false”表示不要关闭。 默认值是“false”。

如果本属性和 allowTaskReparenting 都设为“true”,则本属性优先。 Activity 的 affinity 将被忽略。 Activity 将不会改变归属的任务,而是被销毁

7-14 android:hardwareAccelerated

是否为本 Activity 开启硬件加速渲染功能 —“true”表示开启,“false”表示关闭。 默认值是“false”。

自 Android 3.0 开始,应用程序可以使用硬件加速的 OpenGL 渲染器来改善很多常用 2D 图形操作的性能。 当硬件加速渲染开启时,大部分 Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 内的操作都会被加速。 即使应用程序没有显式调用系统 OpenGL 库,这仍能使动画更加平滑、屏幕滚动也更加平顺、整体响应性能获得改善。 因为启用硬件加速功能需要更多的资源,应用程序将消耗更多的 RAM 。

请注意,并非所有的 OpenGL 2D 操作都会被加速。 如果开启了硬件加速渲染功能,请对应用程序进行测试,以确保渲染的正常使用。

7-15 android:multiprocess

是否可以把 Activity 的实例放入启动它的组件所在的进程中。 — “true”表示可以,“false” 表示不可以。 默认值是“false”。
通常情况下, Activity 的新实例会放入应用程序指定的进程中,所以 Activity 的所有实例都运行在同一个进程中。 然而,如果本属性设为“true”, Activity 的进程就可以在多个进程中运行, 这就允许系统在任何需要用到该 Activity 的进程中(权限允许时)创建实例,尽管这也许永远都用不到

7-16 android:noHistory

当用户离开且屏幕上已看不到 Activity 时,是否要从栈中清除并结束(调用其 finish() 方法)它 — “true”表示需要结束,“false”表示不要结束。 默认值是“false”。

此值为“true”意味着 Activity 不会留下历史记录。 任务不会在栈中保留此 Activity ,因此用户也将无法返回它。
本属性自 API 级别 3 开始加入

7-17 android:parentActivityName

定义本 Activity 的父 Activity。 本属性值必须与父 Activity 的类名一致,由 < activity > 元素的 android:name 属性对应。

当用户点击 ActionBar 的 Up 按钮时,系统将读取本属性以确定应该打开的 Activity 。 利用本属性,系统还可以通过 TaskStackBuilder 生成 Activity 的 back 栈

7-18 android:stateNotNeeded

未经保存状态, Activity 是否可被杀死并能够成功重启 —“true”表示可以不管之前的状态而被重启, “false” 表示需要保存之前的状态。 默认值是“false”。

通常,在为了腾出资源而临时关闭 Activity 之前,将会调用 onSaveInstanceState() 方法。该方法把当前 Activity 的状态存储到一个 Bundle 对象中,重新启动 Activity 时该 Bundle 对象将会被传给 onCreate() 。如果本属性设为“true”,则onSaveInstanceState() 可能就不会被调用,传入onCreate() 的将为 null 而非 Bundle — 就像第一次启动 Activity 一样。

本属性设为“true”将确保 Activity 能未经保存状态而被重启。 比如,显示主屏幕的 Activity 就利用本属性来保证由于某种原因崩溃时不会被清除

7-19 android:taskAffinity

带有 affinity 的 Activity 所处的任务。 拥有相同 affinity 的 Activity 在概念上属于同一个任务(从用户的角度来看被视为同一个应用程序)。 任务的 affinity 取决于其根 Activity 的 affinity。

affinity 决定两件事情 — Activity 要重新归属于的任务(参阅 allowTaskReparenting 属性)和通过 FLAG_ACTIVITY_NEW_TASK 标志启动的 Activity 所处的任务。

默认情况下,同一个应用程序中的所有 Activity 都拥有相同的 affinity。 通过设置本属性,可以把 Activity 分为不同的组,甚至可以把不同应用程序的 Activity 放入同一个任务里。 要把 Activity 设置为不带 affinity ,也即不属于任何任务,只要将本属性设为空字符串即可。

如果未设置本属性,那么 Activity 将会继承应用程序的 affinity 设置(请参阅 < application > 元素的 taskAffinity 属性)。应用程序默认的 affinity 名称是由 < manifest > 元素设置的包名称。

7-20 android:permission

7-21 android:process

7-22 android:uiOptions

8-< activity-alias >

(4.6.12.8)< activity-alias >
为 targetActivity 属性命名的 Activity 指定别名。 目标 Activity 必须位于当前应用程序中,且必须已在 manifest 中声明。
别名将目标 Activity 表示为另一个独立的实体。 该实体可以拥有一套自己的 Intent 过滤器,而不使用目标 Activity 已有的过滤器。 这些过滤器可以决定哪些 Intent 能通过别名来激活目标 Activity,并且决定系统如何处理别名。 例如:别名内的 Intent 过滤器可以设定“ android.intent.action.MAIN”和“android.intent.category.LAUNCHER” 标志,使之能被程序启动器识别,即使目标 Activity 没有过滤器设置了这两个标志也没关系。
除 targetActivity 外,< activity-alias > 的属性就是 < activity > 属性的子集。 对于该子集中已有的属性,目标 Activity 中的设置值不会覆盖别名里的值。 对于子集中没有的属性,则目标 Activity 中的设置值同时适用于别名。

9- < service >

英文原文:http://developer.android.com/guide/topics/manifest/service-element.html
采集(更新)日期:2014-7-2

  • 语法:
< service android:enabled=["true" | "false"] 
         android:exported=["true" | "false"] 
         android:icon="drawable resource" 
         android:isolatedProcess=["true" | "false"] 
         android:label="string resource" 
         android:name="string" 
         android:permission="string" 
         android:process="string"  >  
    . . . 
< /service > 
  • 包含于:
    < application >
  • 可包含:
    < intent-filter >
    < meta-data >
  • 说明:
    声明一个服务( Service 的子类),并成为应用程序的一个组件。 与 Activity 不同,服务缺少可视化的用户界面。 服务用于实现需要长时间运行的后台操作,或是可被其他应用程序调用的通信频繁的API。
    所有的服务都必须在 Manifest 文件中用 < service > 元素声明。 任何未声明的服务都会被系统忽略,也肯定不会被运行。
  • 属性:

9-1 android:enabled

服务是否能被系统实例化 —“true”可以,“false”不允许。 默认值是“true”。

< application > 元素拥有自己的 enabled 属性,适用于应用程序所有的内部组件,包括服务。 服务要能被启用, < application > 和 < service > 的此属性都必须设置为“true”(均为默认值即可)。 如果其中任何一个为“false”,则服务将被禁用,它就不能被实例化。

9-2 android:exported

其它应用程序的组件能否调用服务或与服务交互 — “true”可以,“false”不可以。 如果设为“false”,则只有本应用程序或用户 ID 相同程序的组件才能启动或绑定该服务。

默认值取决于服务是否包含 Intent 过滤器。 如果不含任何过滤器,则意味着只能通过指定精确类名的 Intent 对象来调用。 这表示该服务仅供应用程序内部使用(因为其他应用程序通常不知道确切的类名称)。这时的默认值是“false”。 另一方面,如果存在一个以上的过滤器,则表示服务愿意被外部使用,因此默认值是“true”。

本属性并不是限制服务对其他应用程序的公开程度的唯一途径。 还可以利用权限机制对可与服务进行交互的外部对象进行限制(请参阅permission属性)。

9-3 android:icon

代表服务的图标。 本属性必须设为对 drawable 资源的引用,该资源包含了图片的定义。 如果未设置本属性值,则会用全局性的应用程序图标来代替。(参阅 < application > 元素的 icon 属性)。

服务的图标 — 不管是在此处还是在 < application > 元素中设置的 — 同时也是本服务中所有 Intent 过滤器的默认图标(参阅 < intent-filter > 元素的 icon 属性)。

9-4 android:isolatedProcess

如果设为 true ,则本服务将会运行于一个特殊的进程中。 该进程与系统其他部分隔离,且没有自己的权限。 与其通讯的唯一手段就是通过 Service API (绑定和启动)。

9-5 android:label

供用户查看的服务名称。 如果未设置本属性,则用全局性的应用程序文本标签代替(参阅 < application > 元素的 label 属性)。

服务的文本标签 — 不管是在在此处还是在 < application > 元素中设置的 — 同时也是本服务中所有 Intent 过滤器的默认文本标签(参阅 < intent-filter > 元素的 label 属性)。

本文本标签应该设为对字符串资源的引用,这样就能像用户界面中的其他字符串一样对其进行本地化。 不过为了应用程序开发时的便利,也可以直接设置为字符串。

9-6 android:name

实现服务的 Service 子类的名称。 这应该是一个完全限定格式的类名(比如“com.example.project.RoomService”)。 不过作为简称,如果首字符为句点(比如“.RoomService”),则会在前面自动加上 < manifest > 元素定义的包名称。

应用程序一经发布,就 不应再更改名称 (除非设置了 android:exported=”false”)。

没有默认值。本名称必须指定。

9-7 android:permission

要启动或绑定服务的对象所必须拥有的权限名称。 如果 startService()、 bindService()或 stopService() 的调用者未获得本属性设定的权限,这些方法将会失效,Intent 对象也不会分发给本服务。

如果本属性未被设置,则会把 < application > 元素的 permission 属性所定义的权限应用于本服务。 如果两个地方的属性都没有设置,则本服务将不受权限机制的保护。

关于权限的详细信息,请参阅 Manifest 介绍一文中的 权限 一节及另一篇文档 安全和权限。

9-8 android:process

运行服务的进程名称。 通常,应用程序的所有组件都运行在创建时的默认进程中。该进程的名称与程序包名相同。 < application > 元素的 process 属性可以为每个组件设置不同的默认进程。 但每个组件也可以用各自的 process 属性覆盖默认设置,使得程序可以跨越多个进程运行。

如果本属性设置的名称以冒号(’:’)开头,则必要时会新建一个属于该程序私有的进程,服务将在该新进程中运行。 如果进程名称以小写字母开头,则服务将运行于一个以此名字命名的全局进程中,并赋予应有的访问权限。 这就允许分属于不同应用程序的多个组件共享同一个进程,以减少资源的占用。

10-< receiver >

引入自:API 级别 1
英文原文:http://developer.android.com/guide/topics/manifest/receiver-element.html
采集(更新)日期:2014-7-2

  • 语法:
< receiver android:enabled=["true" | "false"] 
          android:exported=["true" | "false"] 
          android:icon="drawable resource" 
          android:label="string resource" 
          android:name="string" 
          android:permission="string" 
          android:process="string"  >  
    . . . 
 < /receiver >  
  • 包含于:
    < application >
  • 可包含:
    < intent-filter >
    < meta-data >
  • 说明:
    声明一个广播接收器( BroadcastReceiver 的子类),并成为应用程序的一个组件。 广播接收器使得应用程序能接收由系统或其他应用程序广播的 Intent,即使本应用程序的其他组件都没有运行也没关系。
    向系统声明广播接收器的方式有两种: 一种是在 Manifest 文件中以本元素声明, 另一种是用代码动态创建接收器并用 Context.registerReceiver() 方法注册。 关于动态创建广播接收器的更多信息,请参阅 BroadcastReceiver 类的说明。

10-1 android:enabled

广播接收器是否能被系统实例化 — “true”可以,“false”不可以。 默认值是“true”。

< application > 元素拥有自己的 enabled 属性,适用于应用程序的所有组件,包括广播接收器。 为了启用广播接收器, < application > 和 < receiver > 的本属性都必须设置为“true”。 只要其中任何一个为“false”,则广播接收器就将被禁用,它将不能被实例化。

10-2 android:exported

广播接收器能否接收来自应用程序之外的消息 — “true”可接收,“false”不接收。 如果设为“false”,则本接收器只能接收本应用程序或用户 ID 相同程序的组件所发出的消息。

默认值依赖于广播接收器是否包含 Intent 过滤器。 如果不含任何过滤器,则意味着只能通过指定精确类名的 Intent 对象来触发。 这表示该接收器仅供应用程序内部使用(因为其他程序通常不知道精确的类名称)。这时缺省值是“false”。 另一方面,如果存在一个以上的过滤器,则表示广播接收器愿意接收来自系统或其他应用程序的 Intent,因此默认值是“true”。

本属性并不是限制广播接收器对外公开程度的唯一途径。 还可以利用权限来对可发送消息的外部对象进行限制(请参阅permission属性)。

10-3 android:icon

代表广播接收器的图标。 本属性必须设为对 drawable 资源的引用,该资源包含了图片的定义。 如果未设置本属性值,则将使用全局性的应用程序图标来代替。(参阅 < application > 元素的 icon 属性)。

广播接收器的图标 — 不管是在本属性还是在 < application > 元素中设置的 — 同时也是接收器中所有 Intent 过滤器的默认图标(参阅 < intent-filter > 元素的 icon 属性)。

10-4 android:label

供用户阅读的广播接收器的文本标签。 如果未设置本属性,则用全局性的应用程序文本标签代替(参阅 < application > 元素的 label 属性)。
广播接收器的文本标签 — 不管是在本属性还是在 < application > 元素中设置的 — 同时也是接收器中所有 Intent 过滤器的默认文本标签(参阅 < application > 元素的 label属性)。

本文本标签应该设为对字符串资源的引用,这样就能像用户界面中的其他字符串一样对其进行本地化。 不过为了应用程序开发时的便利,也可以直接设置为字符串。

10-5 android:name

实现广播接收器的类的名称,即 BroadcastReceiver 的子类。 这应该是一个完全限定格式的类名(比如“com.example.project.ReportReceiver”)。 不过作为简称,如果首字符为句点(比如“. ReportReceiver”,则会自动在前面加上 < manifest > 元素指定的包名称。

应用程序一经发布,就 不应更改本名称 (除非设置了android:exported=”false”)。

没有默认值。本名称必须指定。

10-6 android:permission

发送方要发送消息给广播接收器所必需的权限名称。 如果本属性未被设置,则 < application > 元素的 permission 属性所设置的权限将应用于广播接收器。 如果以上两个属性都未设置,则本接收器将不受权限机制的保护。

关于权限的详细信息,请参阅 Manifest 介绍一文的 Permissions 部分和另一篇文档安全和权限。

10-7 android:process

运行广播接收器的进程名称。 通常,应用程序的所有组件都运行在创建时的默认进程中。 该进程的名称与程序包名相同。 < application > 元素的 process 属性可以为每个组件设置不同的默认进程。 但每个组件也可以用各自的 process 属性覆盖该默认值,使得程序可以跨越多个进程运行。

如果本属性值的名称以冒号(’:’)开头,则必要时会新建一个属于该程序私有的进程,广播接收器将运行于该新进程中。 如果进程名称以小写字母开头,则广播接收器将运行于一个以此名字命名的全局进程中,并赋予相应的访问权限。 这就允许不同应用程序的多个组件共享同一个进程,以减少资源的占用

11-

英文原文:http://developer.android.com/guide/topics/manifest/provider-element.html
采集(更新)日期:2014-7-1

  • 语法:
< provider android:authorities="list" 
    android:enabled=["true" | "false"] 
    android:exported=["true" | "false"] 
    android:grantUriPermissions=["true" | "false"] 
    android:icon="drawable resource" 
    android:initOrder="integer" 
    android:label="string resource" 
    android:multiprocess=["true" | "false"] 
    android:name="string" 
    android:permission="string" 
    android:process="string" 
    android:readPermission="string" 
    android:syncable=["true" | "false"] 
    android:writePermission="string" > 
    . . . 
< /provider > 
  • 包含于:
    < application >
  • 可包含:
    < meta-data >
    < grant-uri-permission >
    < path-permission >

  • 说明
    声明一个 Content Provider 组件。 Content Provider 是 ContentProvider 的子类,它为应用程序管理的数据提供结构化的访问方式。 应用程序的所有 Content Provider 都必须在 Manifest 文件的 < provider > 元素中定义, 否则,系统是不予理会也不会去运行 Content Provider 的。
    只需要声明本应用程序所含的 Content Provider 即可。属于其他应用程序而本程序会用到的 Content Provider 不需要进行声明。
    Android 系统用 content URI 的 authority 部分来存放对 Content Provider 的引用。 例如,假定要访问存储了医务人员信息的 Content Provider 。 这里调用了 ContentResolver.query() 方法,以下 URI 作为参数之一标明了 Content Provider:
    content://com.example.project.healthcareprovider/nurses/rn
    content: scheme 部分标明了这是一条指向 Android Content Provider 的 URI 。 authority 部分 com.example.project.healthcareprovider 标明了 Content Provider 本身。 Android 系统会在已知的 Provider 和 authority 清单中查找该 authority 信息 。 字符串 nurses/rn 是路径信息,Content Provider 可以用它来标识数据的某个部分。
    注意,当在 < provider > 元素中定义 Content Provider 时, 请不要在 android:name 中包含 scheme 及路径信息,只要 authority 就可以了。
    关于开发和使用 Content Provider 的详细信息,请参阅 API 指南 Content Provider。

10-1 android:authorities

一个或多个 URI authority 列表,标识了 Content Provider 内提供的数据。 多个 authority 名称之间用分号分隔。 为了避免冲突, authority 名称应该使用 Java 风格的命名规则(比如 com.example.provider.cartoonprovider)。 一般来说,它是实现 Content Provider 的 ContentProvider 子类名。

没有默认值。至少必须指定一个 authority

10-2 android:grantUriPermissions

是否能临时超越 readPermission、 writePermission和 permission 属性的限制, 给平常无权对 Content Provider 数据的访问进行授权 — “true”可以授权,“false”不可以。 如果设为“true”,则可对 Content Provider 的所有数据进行授权访问。 如果设为“false”,那就只能对 < grant-uri-permission > 子元素中列出的数据子集(假如存在的话)进行授权。 默认值是“false”。

授权机制使得程序组件能对那些受权限保护的数据进行一次性的访问。 比如,假定某条 e-mail 包含了附件,邮件程序可能会调用合适的查看器来打开附件,即使该查看器平常无权查看 Content Provider 的全部数据也没关系。

这时候,可以通过设置启动组件的 Intent 对象的 FLAG_GRANT_READ_URI_PERMISSION和 FLAG_GRANT_WRITE_URI_PERMISSION 标志位进行授权。 比如,邮件程序可以在传入 Context.startActivity() 的 Intent 中设置 FLAG_GRANT_READ_URI_PERMISSION。 权限即指定授予该 Intent 中的 URI。

如果启用了这种临时授权的特性,不论是将本属性设为“true”还是定义了 < grant-uri-permission > 子元素,那么当所涉及的 URI 要从 Content Provider 中删除时,必须调用一下 Context.revokeUriPermission()。
请参阅 < grant-uri-permission > 元素

10-3 android:multiprocess

是否在每个客户端进程中都能创建 Content Provider 的实例 —“true”表示可以在多个进程中运行实例,“false”表示不可以。 缺省值是“false”。

通常情况下,Content Provider 是在定义它的应用程序的进程中实例化的。 然而,如果本属性置为“true”,则系统可以在每个需要用到它的客户端程序所在的进程中都创建一个实例,这样就避免了进程间通讯的开销

10-4 android:readPermission

查询 Content Provider 的客户端所必需的权限。 参见permission和writePermission属性。

10-5 android:syncable

Content Provider 所控制的数据是否需要与某个服务器进行同步 — “true”表示需要同步,“false”表示不需要。

10-6 android:writePermission

修改 Content Provider 数据的客户端所必需的权限。 请参阅permission和readPermission属性。

感谢Android开发-API指南-[原创译文]

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值