AndroidManifest.xml文件详解
AndroidManifest.xml结构
<?xmlversion="1.0"encoding="utf-8"?>
<manifest>
<application>
<activity>
<intent-filter>
<action/>
<category/>
<data/>
</intent-filter>
<meta-data/>
</activity>
<activity-alias>
<intent-filter>
<action/>
<category/>
<data/>
</intent-filter>
<meta-data/>
</activity-alias>
<service>
<intent-filter>
<action/>
<category/>
<data/>
</intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter>
<action/>
<category/>
<data/>
</intent-filter>
<meta-data/>
</receiver>
<provider>
<grant-uri-permission/>
<path-permission/>
<meta-data/>
</provider>
<meta-data/>
<uses-library/>
</application>
<compatible-screens/>
<instrumentation/>
<library/>
<original-package/>
<package-verifier/>
<permission/>
<permission-tree/>
<permission-group/>
<protected-broadcast/>
<resource-overlay/>
<supports-screens/>
<supports-gl-texture/>
<uses-sdk/>
<uses-configuration/>
<uses-feature/>
<uses-permission/>
<uses-permission-sdk-23/>
<upgrade-key-set/>
</manifest>
manifest
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package=""
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"]
android:revisionCode="integer">
</manifest>
这个元素是AndroidManifest.xml文件的根元素。它必须包含一个
元素,并且必须要指定xmlns:android和package属性
xmlns:android
定义android命名空间,一般为
http://schemas.android.com/apk/res/android
,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。
package
这个属性给应用程序定义了一个完整的Java样式的包名。这个名称应该是唯一的。名称中可以包含大写或小写字母、数字以及下划线(‘_’)。但是包名的每段都只能用字母开始。
应该使用所拥有的互联网域名作为基本的包名,以避免与其他开发者的冲突。例如,由Google发布的应用程序的包名都用com.google开始。在发布应用程序时永远不要使用com.example命名空间。
包名用于唯一的标识应用程序。它还是应用程序进程的默认名称(看
元素的process属性)和Activity的默认亲缘任务(请看 <activity>
元素的taskAffinity属性)。警告:应用程序一旦发布,就不能够改变它的包名称了。包名定义了应用程序的标识,因此如果改变它,那么它就会被认为是不同的应用程序,并且之前版本的用户就不能够把应用升级到新版本。
sharedUserId
这个属性定义了一个Linux用户ID的名称,这个名称能够跟其他应用程序共享。默认情况下,Android会给它的每个应用程序都分配一个唯一的用户ID。但是,如果有两个或更多的应用程序把这个属性都设置了相同的值,那么它们将共享这个相同的ID—具有相同的数字签名。拥有相同用户ID的应用程序能够访问彼此的数据,并且如果期望,它们也可运行在相同的进程中。
详见:【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
sharedUserLabel
这个属性给共享的用户ID定义了一个用户可读的标签。这个标签必须用字符串资源来设置,不能使用原生的字符串。
只有在sharedUserId属性被设置,这个属性才有意义。
versionCode
这个属性定义一个内部版本号,它仅用于判断一个版本是否比另一个版本新,数字越大表明版本越新。这个版本号不显示给用户,显示给用户的版本号要用versionName属性设置。
它的属性值必须是一个整数,如100。你可以按照自己的想法来定义它,只要保持后续版本号的数字更大。例如,它可以是一个版本号;也可以把x.y格式中的版本数字转换成一个由x和y分别编码的16位整数,x在低8位,y在高8位;也可以在每次发布版本时简单的增加数字的大小。
versionName
这个属性用于设置一个显示给永的版本号。属性值可以是原生的字符串,也可以引用一个字符串资源。这个字符串除了显示给用户之外,没有其他用途。而versionCode属性却拥有内部使用的版本号。
installLocation
这个属性用于设置应用程序默认的安装位置。
用下表中的关键词来设置属性值。
值 | 说明 |
---|---|
internalOnly | 应用程序必须只被安装在内部设备存储器上。如果设置这个值,应用程序永远不会被安装在外部存储器上。如果内部存储空间不足,那么系统不会安装这个应用程序。如果没有定义android:installLocation属性,就会使用这个值作为默认值。 |
auto | 应用程序可以安装在外部存储器上,但是,默认情况下,系统会把应用程序安装在内部存储器上。如果内部存储空间不足,那么系统会把应用程序安装在外部存储器上。一旦安装,用户能够通过系统设置在内外存储器之间来移动应用程序。 |
preferExternal | 应用程序偏好安装在外部存储器上(SD卡)。系统并不保证恪守这一个规则。如果外部存储器不可用或空间不足,或者应用程序使用了forward-locking机制(这种机制不支持外部存储),那么应用程序就可以安装在内部存储器上。一旦安装,用户能够通过系统设置在内外存储器之间移动应用程序。 |
警告:如果应用程序使用的Google Play的复制保护功能,那么它就不能被安装在设备的SD卡上。但是,如果使用Google Play的应用程序许可,那么它就能够被安装在内部或外部存储器上,包括SD卡。
注意:默认情况下,应用程序会被安装在内部存储器上,除非把这个属性值定义为auto或preferExternal,应用程序才能够被安装在外部存储器上。
当应用程序被安装在外部存储器上的时候:
.apk文件被保存在外部存储器上,但是任何应用程序数据(如数据库)依然被保存在内部设备存储器上;
用一个key把存储器中保存的.apk文件加密,只允许应用程序在安装它的设备上运行。用户不能把安装在SD卡上应用程序转移到另一个设备的SD卡上,虽然在一个设备上能够使用多个SD卡。
在用户要求的时候,应用程序能够被转移到内部存储器上。
用户也可以要求把应用程序从内部存储器移动到外部存储器上。但是,如果这个属性被设置为internalOnly,那么系统不允许用户把应用程序转移到外部存储器上。
这个属性在API Level 8中被引入。
revisionCode
android:revisionCode表示该软件的修改版本号,对用户是可见的,它必须是一个int型的整数,它的大小代表该软件版本升级过多少次,因此每次发布新版本该值都会+1,如Android:versionCode = ”5″ ,代表此软件已经发布过5次了。
Application
<application
android:allowClearUserData=["true" | "false"]
android:allowTaskReparenting=["true" | "false"]
android:banner="drawable resource"
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:isGame=["true" | "false"]
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:usesCleartextTraffic=["true" | "false"]
android:vmSafeMode=["true" | "false"]>
</application>
这个元素用于应用程序的声明。它包含了每个应用程序组件所声明的子元素,并且还有能够影响所有组件的属性。其中的很多属性(如icon、label、permission、process、taskAffinity和allowTaskReparenting)会给组件元素中对应的属性设置默认值。其他的给是应用程序整体设置的值(如debuggable、enabled、description、allowClearUserData),并且这些属性值不能被组件的属性所覆盖。
android:allowTaskReparenting
当一个与当前任务有亲缘关系的任务被带到前台时,用这个属性来指定应用程序中定义的Activity能否从他们当前的任务中转移到这个有亲缘关系的任务中。如果设置为true,则能够转移,如果设置为false,则应用程序中的Activity必须保留在它们所在的任务中。默认值是false。
<activity>
元素有它们自己的allowTaskReparenting属性,它能够覆盖<application>
元素中的设置。
android:allowBackup
当 allowBackup 标志为 true 时,用户即可通过 adb backup 和 adb restore 来进行对应用数据的备份和恢复,此属性的默认值是true。
android:backupAgent
这个属性用于定义应用程序备份代理的实现类的名称,这个类是BackupAgent类的一个子类。它的属性值应该是完整的Java类的名称(如,com.example.project.MyBackupAgent)。但是,也可以使用用”.”符号开头的简称(如,.MyBackupAgent),系统会把
<manifest>
元素中指定的包名追加到”.”符号的前面。
android:debuggable
这个属性用于指定应用程序是否能够被调试,即使是以用户模式运行在设备上的时候。如果设置为true,则能够被调试,否则不能调试,默认值是false。
android:description
这个属性用于定义应用程序相关的用户可读文本,它要比应用程序标签更长、更详细。它的的值必须被设置成一个字符串资源的引用。跟label属性不一样,label属性可以使用原生的字符串。这个属性没有默认值。
android:enabled
这个属性用于指定Android系统能否实例化应用程序组件。如果设置为true,这个可以实例化其组件,否则不能够实例化。如果这个属性被设置为true,那么就会使用每个组件自己enabled属性的设置来判断其是否能够被实例化。如果这个属性被设置为false,它会覆盖其所有组件自己指定的值,应用程序中的所有组件都会被禁用。
默认值是true。
android:hasCode
这个属性用于设置应用程序是否包含了代码,如果设置为true,则包含代码,否则不包含任何代码。在这个属性被设置为false的时候,系统在加载组件的时候不会试图加载任何应用程序的代码。默认值是true。
如果应用程序没有使用任何应用内置组件类以外的组件,那么这个应用程序就不会有任何自己的代码,像使用AliasActivity类的Activity,是很少发生的。
android:hardwareAccelerated
这个属性用于设置能够给应用程序中的所有Activity和View对象启用硬件加速渲染。如果设置为true,则应该启用,如果设置为false,则不会启用。默认值是false。
从Android3.0开始,应用程序可以使用硬件加速的OpenGL渲染器,来改善很多共同的2D图形操作的性能。当硬件加速渲染被启动的时候,在Canvas、Paint、Xfermode、ColorFilter、Shader和Camera中的大多数操作都会被加速。这样会使动画、滚动更加平滑,并且会改善整体的响应效果,即使应用程序没有明确的使用框架的OpenGL类库。
要注意的是,不是所有的OpenGL 2D操作都会被加速。如果启用了硬件加速渲染器,就要对应用程序进行测试,以确保使用渲染器时不发生错误。
android:icon
这个属性用于设置应用程序的整个图标,以及每个应用组件的默认图标。对于
<activity>
、<activity-alias>
、<service>
、<service>
、<receiver>
和<provider>
元素,请看它们各自的icon属性。设置这个属性时,必须要引用一个包含图片的可绘制资源(例如,“@drawable/icon”)。没有默认的图标。
android:isGame
该应用程序是否是一个游戏,默认为false
android:killAfterRestore
这个属性用于指定在全系统的恢复操作期间,应用的设置被恢复以后,对应的问题程序是否应该被终止。单包恢复操作不会导致应用程序被关掉。全系统的复原操作通常只会发生一次,就是在电话被首次建立的时候。第三方应用程序通常不需要使用这个属性。
默认值是true,这意味着在全系统复原期间,应用程序完成数据处理之后,会被终止。
android:label
这个属性用于设置应用程序整体的用户可读的标签,并也是每个应用程序组件的默认标签。对于
<activity>
、<activity-alias>
、<service>
、<receiver>
和元素,请看它们各自的label属性。 设置这个属性值时,应该引用一个字符串资源。以便它能够跟用户界面中的其他字符串一样能够被本地化。但是为了应用程序开发的便利,也能够用原生的字符串来设置。
android:logo
这个属性用于给整个应用程序设置一个Logo,而且它也是所有Activity的默认Logo。
设置这个属性时,必须要引用一个包含图片的可绘制资源(如:“@drawable/logo”)。没有默认的Logo。
android:manageSpaceActivity
这个属性定义了一个完整的Activity子类的名字,系统能够把这个名字加载到由用户管理被应用程序所占用的设备上的内存。这个Activity也应该用
<activity>
元素来声明。
android:name
这整个属性用完整的Java类名,给应用程序定义了一个Application子类的实现。当应用程序进程被启动时,这个类在其他任何应用程序组件被实例化之前实例化。
这个子类实现是可选的,大多数应用程序不需要一个子类的实现。如果没有实现自己的子类,Android系统会使用基本的Application类的一个实例。
android:permission
这个属性定义了一个权限,为了跟应用程序进行交互,客户端必须要有这个权限。这个属性是为给所有的应用程序组件设置权限提供了便利的方法。它能够被独立组件所设置的permission属性所覆盖。
android:persistent
这个属性用户设置应用程序是否应该时刻保持运行状态,如果设置为true,那么就保持,否则不保持。默认值是false。普通的应用程序不应该设置这个属性,持久运行模式仅用于某些系统级的应用程序。
android:process
这个属性用于定义一个进程名称,应用程序的所有组件都应该运行在这个进程中。每个组件都能够用它自己process属性的设置来覆盖这个
元素中的设置。 默认情况下,当应用程序的第一个组件需要运行时,Android系统就会给这个应用程序创建一个进程。然后,应用中的所有组件都运行在这个进程中。默认的进程名是跟
元素中设置的包名进行匹配的。 通过设置这个属性,能够跟另外一个应用程序共享一个进程名,能够把这两个应用程序中的组件都安排到同一个进程中运行—但是仅限于这两个应用程序共享一个用户ID,并且带有相同的数字证书。
如果这个进程名称用“:”开头,那么在需要的时候,就会给应用程序创建一个新的、私有的进程。如果进程名用小写字符开头,就会用这个名字创建一个全局的进程,这个全局的进程能够被其他应用程序共享,从而减少资源的使用。
android:restoreAnyVersion
设置这个属性表示应用程序准备尝试恢复任何备份的数据集,即使备份比设备上当前安装的应用程序的版本要新。这个属性设置为true,即使是在版本不匹配而产生数据兼容性提示的时候,也会允许备份管理来恢复备份的数据,所以要谨慎使用。
这个属性的默认值是false。
android:taskAffinity
这个属性给应用的所有的Activity设置了一个亲缘关系名,除了那些用它们自己的taskAffinity属性设置不同亲缘关系的组件。
默认情况下,应用程序中的所有Activity都会共享相同的亲缘关系,亲缘关系的名称跟由
<manifest>
元素设置的包名相同。
android:theme
这个属性给应用程序中所有的Activity设置默认的主题,属性值要引用一个样式资源。每个独立的Activity的主题会被它们自己的theme属性所覆盖。
android:uiOptions
这个属性设置了Activity的UI的额外选项。它必须是下表中的一个值:
值 | 说明 |
---|---|
none | 默认设置,没有额外的UI选项。 |
splitActionBarWhenNarrow | 在水平空间受到限制的时候,会在屏幕的底部添加一个用于显示ActionBar中操作项的栏,例如:在纵向的手持设备上。而不是在屏幕顶部的操作栏中显示少量的操作项。它会把操作栏分成上下两部分,顶部用于导航选择,底部用于操作项目。这样就会确保可用的合理空间不仅只是针对操作项目,而且还会在顶部给导航和标题留有空间。菜单项目不能被分开到两个栏中,它们要显示在一起。 |
intent-filter
<intent-filter
android:icon="drawable resource"
android:label="string resource"
android:priority="integer">
. . .
</intent-filter>
这个元素用于指定Activity、Service或Broadcast Receiver能够响应的Intent对象的类型。Intent过滤器声明了它的父组件的能力—Activity或Service所能做的事情和Broadcast Receiver所能够处理的广播类型。它会打开组件来接收它所声明类型的Intent对象,过滤掉那些对组件没有意义的Intent对象请求。
过滤器的大多数内容是通过
<action>
、<category>
和<data>
子元素来描述的。
android:icon
当组件要把过滤器所具有的能力展示给用户时,会使用这个属性所设置的图标来表示它的父组件(Activity、Service或Broadcast Receiver)。
这个属性必须要引用一个包含图片定义的可绘制资源。默认值是由父组件的icon属性设置的。如果父组件没有指定一个图标,那么默认值就会使用
<application>
元素所设置的icon。
android:label
这个属性用于给其父组件设置一个用户可读的标签。这个标签不是有其父组件设置的那个,在组件要把过滤器所具有的能力展示给用户的时候,要使用这个属性值。
这个属性值应该引用一个字符串资源,以便它能够像用户界面中的其他字符串一样,能够被本地化。但是,为了开发应用程序的便利,也可以使用原生的字符串。
这个属性的默认值是有它的父组件提供的。如果父组件没有指定一个标签,那么默认值就会使用由
元素的所设置的标签。
android:priority
这个属性用于给过滤器设置一个优先级。其父组件能够通过优先级来依次处理过滤器所描述类型的Intent对象。这个属性对Activity和Broadcast Receiver对象有意义:
它提供了Activity能够如何响应跟过滤器匹配的Intent对象请求的信息(相对与其他的也能响应这个Intent请求的Activity)。当一个Intent对象请求能够被多个带有不同优先级的Activity处理时,Android系统只考虑把高优先级的Intent过滤器作为潜在的Intent对象请求目标。
它控制了Broadcast Receiver执行接收广播消息的顺序。高优先级的过滤器会优先调用。(这个顺序只应用与同步消息,对于异步消息会忽略优先级的设置。)
只有真正想要给接收广播消息的过滤器施加一个特定顺序,或者要强制Android来应用另外一个Activity,才会使用这个属性。
这个属性值必须是一个整数,如:100,数字越大,优先级越高。
meta-data
<meta-data
android:name="string"
android:resource="resource specification"
android:value="string"/>
这个元素用name-value对的格式给其父组件提供任意可选的数据。一个组件元素能够包含任意多个
<meta-data>
子元素,所有这些元素中定义的值会被收集到一个Bundle对象中,并且提供给组件的PackageItemInfo.metaData属性字段。通常值是通过其value属性来指定的。但是,也可以使用resource属性来代替,把一个资源ID跟值进行关联。
例如,下面的代码就是把存储在@string/kangaroo资源中的值跟”zoo”名称进行关联:
android:name="zoo" android:value="@string/kangaroo" />
另一个方面,使用resource属性会给zoo分配一个数字资源ID,而不是保存在资源中的值。例如:
要避免使用多个独立的
实体来提供相关的数据。相反如果有复杂的数据要跟组件关联,那么把数据作为资源来保存,并使用resource属性,把相关的资源ID通知给组件。
android:name
针对项目的一个唯一名称。使用Java样式的命名规则,可以确保名称的唯一性,例如:
com.example.project.activity.fred。
android:resource
这个属性定义了一个要引用的资源。资源的ID会跟这个项目进行关联。通过Bundle.getInt()方法能够从meta-data的Bundle对象中获取这个ID。
android:value
这个属性会给这个项目分配一个值。下表列出了可能分配的数据的数据类型,以及获取这些数据的方法:
类型 | Bundle对象方法 |
---|---|
字符串。对于一个Unicode字符,要使用双斜线(\)来进行转义,如\n和\uxxxx | getString() |
整数值,如100 | getInt() |
布尔值,true或false | getBoolean() |
颜色值,如#rgb、#argb、#rrggbb、#aarrggbb | getString() |
浮点值,如1.23 | getFloat() |
uses-library
这个元素用于指定该应用程序必须链接的共享类库。这个元素告诉系统该应用程序包的类装载器中所包含的类库代码。
Android的所有包(如andorid.app,android.content,android.view和android.widget等)都在应用程序自动链接的默认类库中。但是,有些包是在于独立的类库中,它们不能被自动的链接到应用程序包中,要查看这些包的文档,以确定要把哪些类库包含到包的代码中。
这个元素也会影响该应用程序在特殊设备上的安装,以及应用程序在Google Play上的可用性。
安装(Installation)
如果在该应用的清单中出现这个元素,并且它的android:required属性被设置为true,那么除非该类库在用户的设备上存在,否则PackageManager框架不会让用户安装这个应用程序。
Google Play
Google Play会基于要安装在用户设备上的类库来过滤应用程序。有关过滤的更多信息,请看Filters on Google Play(http://developer.android.com/guide/appendix/market-filters.html)
android:name
这个属性用于指定类库的名称。这个名称是在对应的类库文档中提供的。例如:android.test.runner库就是包含Android测试类的一个程序包。
android:required
这个属性用于指定应用程序是否需要有android:name属性所指定的类库:
true:没有这个库应用程序无法工作。如果用户设备设备上没有这个类库,系统不允许该应用程序安装在这个设备上。
false:如果该类库存在,则应用程序能够使用这个类库,但是如果有必要,也可以设计成没有该类库,应用程序也能够工作。系统会允许应用程序安装,即使该类库不存在。如果使用false,就要在运行时对类库的有效性进行必要的检查。
对于类库的检查,可以使用反射机制来判断一个具体的类是否有效。
默认值是true。
这个属性在API Level 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:permission="string"
android:process="string"
android:screenOrientation=["unspecified" | "user" | "behind" |"landscape" | "portrait" |"reverseLandscape" | "reversePortrait" |"sensorLandscape" | "sensorPortrait" |"sensor" | "fullSensor" | "nosensor"]
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>
这个元素声明了一个Activity(或Activity的子类),Activity实现了应用程序的可视化用户界面部分。应用程序中所有的Activity都必须在清单文件中用
<activity>
元素来声明,没有在清单文件中声明的Activity,系统不会看到,也不会运行它。
android:allowTaskReparenting
这个属性用于设定Activity能够从启动它的任务中转移到另一个与启动它的任务有亲缘关系的任务中,转移时机是在这个有亲缘关系的任务被带到前台的时候。如果设置了true,则能够转移,如果设置了false,则这个Activity必须要保留在启动它的那个任务中。
如果这个属性没有设置,那么其对应的
<application>
元素的allowTaskReparenting属性值就会应用到这个Activity上。它的默认值是false。通常,当Activity被启动时,它会跟启动它的任务关联,并它的整个生命周期都会保持在那个任务中。但是当Activity的当前任务不在显示时,可以使用这个属性来强制Activity转移到与当前任务有亲缘关系的任务中。这种情况的典型应用是把应用程序的Activity转移到与这个应用程序相关联的主任务中。
例如,如果一个电子邮件消息中包含了一个网页的链接,点击这个链接会启动一个显示这个网页的Activity。但是,由e-mail任务部分启动的这个Activity是由浏览器应用程序定义的。如果把它放到浏览器的任务中,那么在浏览器下次启动到前台时,这个网页会被显示,并且在e-mail任务再次显示时,这个Activity有会消失。
Activity的亲缘关系是由taskAffinity属性定义的。通过读取任务的根Activity的亲缘关系来判断任务的亲缘关系。因此,通过定义,任务中的根Activity与任务有着相同的亲缘关系。因此带有singleTask或singleInstance启动模式的Activity只能是任务的根节点,Activity的任务归属受限于standard和singleTop模式。
android:alwaysRetainTaskState
这个属性用于设置Activity所属的任务状态是否始终由系统来维护。如果设置为true,则由系统来维护状态,设置为false,那么在某些情况下,系统会允许重设任务的初始状态。默认值是false。这个属性只对任务根节点的Activity有意义,其他所有的Activity都会被忽略。
通常,在某些情况中,当用户从主屏中重新启动一个任务时,系统会先清除任务(从堆栈中删除根节点Activity之上的所有Activity)。
但是,当这个属性被设置为true时,用户会始终返回到这个任务的最后状态,而不管中间经历了哪些操作。这样做是有好处的,例如,Web浏览器的应用就会保留很多用户不想丢失的状态,如多个被打开的标签页。
android:clearTaskOnLaunch
这个属性用于设定在从主屏中重启任务时,处理根节点的Activity以外,任务中的其他所有的Activity是否要被删除。如果设置为true,那么任务根节点的Activity之上的所有Activity都要被清除,如果设置了false,就不会被清除。默认设置时false。这个属性只对启动新任务(或根Activity)的那些Activity有意义,任务中其他所有的Activity都会被忽略。
当这个属性值被设置为true,用户再次启动任务时,任务根节点的Activity就会被显示,而不管在任务的最后做了什么,也不管任务使用Back按钮,还是使用Home离开的。当这个属性被设置为false时,在某些情况中这个任务的Activity可以被清除,但不总是这样的。
例如,假设某人从主屏中启动了Activity P,并且又从P中启动了Activity Q。接下来用户按下了Home按钮,然后由返回到Activity P。通常用户会看到Activity Q,因为这是在P的任务中所做的最后的事情。但是,如果P把这个属性设置为true,那么在用户按下Home按钮,任务被挂起时,Activity P之上的所有Activity(本例中是Activity Q)都会被删除。因此当用户再次返回到本任务时,用户只能看到Activity P。
如果这个属性和allowTaskReparenting属性都被设置为true,那些被设置了亲缘关系的Activity会被转移到它们共享的亲缘任务中,然后把剩下的Activity都给删除。
android:configChanges
这个属性列出了那些需要Activity进行自我处理的配置变化。当在运行时配置变化发生的时候,默认情况下,这个Activity会被关掉并重启,但是用这个属性声明一个配置,就会阻止Activity被重启。相反,这个Activity会保持运行,并且它的onConfigurationChanged()方法会被调用。
注意:应该避免使用这个属性,并且只把它作为最后的手段来使用。有关如何正确处理配置改变期间的重启,请阅读“处理运行是变化”
(http://blog.csdn.net/fireofstar/article/details/7456363)
下表中列出了这个属性的有效值,要设置多个值的时候,用“|”符号连接,例如:“locale|navigation|orientation”
值 | 说明 |
---|---|
mcc | IMSI移动国家编码改变时要进行自我处理—系统发现了一个新的SIM卡,并且更新了MCC。 |
mnc | IMSI移动网络编码改变时要进行自我处理—系统发现了一个新的SIM卡,并且更新了MNC |
locale | 语言环境发生变化时要进行自我处理—用户选择了一种用于显示文本的新语言。 |
touchscreen | 触屏发生变化时要进行自我处理。(这种情况通常不会发生) |
keyboard | 键盘类型发生变化时,要进行自我处理。例如用户插入了一个外部键盘 |
keyboardHidden | 键盘的可用性发生变化时,要进行自我处理。例如用户启用了硬件键盘。 |
navigation | 导航类型(轨迹球/方向板)发生变化时,要进行自我处理。这种情况通常不会发生。 |
screenLayout | 屏幕布局发生变化时,要进行自我处理。这可能是由被激活的不同的显示方式所导致的变化。 |
fontScale | 字体的缩放因子发生变化时,要进行自我处理。如用户选择了一个新的全局字体尺寸。 |
uiMode | 用户界面发生变化时,要进行自我处理。在把设备放入桌面/轿车内或夜间模式变化时,会导致这种情况发生。它在API级别8中被引入。 |
orientation | 屏幕的方向发生变化时,要进行自我处理。用户旋转设备时会发生这种变化。注意:如果应用程序的目标API级别是13或更高的版本,那么还应该声明screenSize配置,因为设备在横向和纵向之间切换时,对应的尺寸也会发生变化。 |
screenSize | 当前有效的屏幕尺寸发生变化时,要进行自我处理。这种变化意味着当前可用的相对长、宽比的尺寸发生了变化,因此当用户在横向和纵向之间切换时,就会产生屏幕可用尺寸的变化。但是,如果应用程序是在API级别12或更低的版本上编译的,那么Activity就要始终自己来处理这种变化(这个配置的变化不会重启Activity,即使是运行在Android3.2或更高版本的设备上)。这个设置在API级别13中被引入。 |
smallestScreenSize | 物理尺寸发生变化时,要进行自我处理。这种变化不关注屏幕方向的变化,只在实际的物理屏幕尺寸发生变化时才会发生,如切换到另一个显示器上的时候。这个变化对应smallestWidth属性的配置来进行改变。如果应用程序是在API级别12或更低的版本上编译的,那么Activity就要始终自己来处理这种变化(这个配置的变化不会重启Activity,即使是运行在Android3.2或更高版本的设备上)。这个设置在API级别13中被引入。 |
所有这些配置的改变都会影响到应用中所能看到的资源值。因此,当onConfigurationChanged()方法被调用时,通常需要重新获取所有的资源(包括布局资源、可绘制资源等等),以便能够正确的处理这些改变。
android:enabled
这个属性用于设置Activity是否能够被系统实例化。如果设置为true,则可以被实例化,如果设置为false,则不能被实例化。默认值是true。
<application>
元素有它自己的enabled属性,它的这个属性设置会用于应用程序中的所有组件,包括Activity。<application>
和<activity>
元素的这个属性必须要设置为true(默认情况下都是true),以便系统能够实例化Activity。否则Activity不能被实例化。
android:excledeFromRecents
这属性用于设置由该Activity所启动的任务是否应该被排除在最近使用的应用程序列表之外。也就是说,当这个Activity是一个新任务的根节点时,这个属性决定了这个任务适应要显示在用户最近使用的应用程序列表中。如果设置为true,则这个任务会被排除在列表之外,如何设置为false,则应该包含在最近使用的应用列表中。默认值是false。
android:exported
这个属性用于设置该Activity能否由另一个应用程序的组件来启动,如果设置为true,则可以启动,否则不能启动。如果设置为false,那么该Activity只能被同一个应用程序中的组件或带有相同用户ID的应用程序来启动。
它的默认值要依赖与该Activity是否包含了Intent过滤器。如果没有任何过滤器,则意味着该Activity只能通过明确的类名来调用,这样就暗示者该Activity只能在应用程序内部使用(因为其他用户不会知道它的类名),因此在这种情况下,默认值是false。在另一方面,至少存在一个过滤器,则暗示着该Activity可被外部使用,因此默认值是true。
这个属性不是限制Activity暴露给其他应用程序的唯一方法。还可以使用权限来限制外部实体对该Activity的调用。
android:finishOnTaskLaunch
这个属性用于设置既存的Activity实例,在用户再次启动(在主屏上选择这个任务)它所属的任务时,是否应该被关闭。设置为true,则要关闭,否则不关闭,默认值是false。
如果这个属性和allowTaskReparenting属性都被设置为true,那么这个属性要优于其他属性,Activity的亲缘关系会被忽略。该Activity不会被转移父任务,而是被销毁。
android:hardwareAccelerated
这个属性用于设置该Activity是否应该启用硬件加速渲染。如果设置为true,则启用硬件加速,否则不启用。默认设置是false。
从Android3.0开始,硬件加速的OpenGL渲染器对应用程序可用,以便改善许多共同的2D图形操作的性能。当硬件加速渲染器被启用时,在Canva、Paint、Xfermode、ColorFilter、Shader和Camera中大多数操作都会被加速。这样会使动画、滚动更平滑,并改善整体的响应效果,即使应用程序没有明确要使用框架的OpenGL类库。因为启用硬件加速会增加系统的资源需求,所以应用程序会占用更多的内存。
要注意的是,不是所有的OpenGL 2D操作都会被加速。如果启用了硬件加速渲染,就要对应用程序进行充分测试,以确保所使用的渲染没有错误。
android:icon
这属性定义了代表Activity的一个图标。当Activity被要求显示到屏幕上时,这个图标会被显示给用户。例如,这个图标会显示在Launcher的窗口中,用于启动任务。这个图标经常会和label属性组合使用。
这个属性必须被设置为一个包含图片定义的可绘制资源。如果没有设置,就会使用给应用程序设置的图标来代替。
Activity的图标(或者是
<application>
元素设置的图标)也是所有的Activity的Intent过滤器的默认图标。
android:label
这个属性给Activity设置了一个可读的标签。当Activity要展现给用户的时候,这个标签会显示在屏幕上,它经常会跟Activity的图标一起来显示。
如果这个属性没有被设置,就会使用给应用程序设置的标签来代替。
Activity的标签(或者是
<application>
元素设置的标签)也是所有Activity的Intent过滤器的默认标签。这个属性应该用一个字符串资源来设置。以便它能够在用户界面中用其他的语言来本地化。但是为了开发应用程序的便利,也可以用原始的字符串来设置。
android:launchMode
android:multiprocess
这个属性用于设置Activity的实例能否被加载到与启动它的那个组件所在的进程中,如果设置为true,则可以,否则不可以。默认值是false。
通常,一个新的Activity实例会被加载到定义它的应用程序的进程中,以便应用程序的所有Activity都运行在同一个进程中。但是,如果这个属性被设置为true,那么这个Activity的实例就可以运行在多个进程中,允许系统在使用它们的进程中来创建实例(权限许可的情况下),这几乎是从来都不需要的事情。
android:name
这个属性用于设置Activity的实现类(Activity的子类)的名字。这个属性值应该是完整的Java类名,如:com.example.project.ExtracurricularActivity。但是,可以用简写的方式,名字第一个字符用“.”符号,如:.ExtracurricularActivity。它对应的包名是在
<manifest>
元素中指定的。一旦发布了应用程序,就不应该改变这个名称了(除非设置了android:exported=”false”)。
这个属性没有默认值,名称必须被指定。
android:noHistory
这个属性用于设置在用户离开该Activity,并且它在屏幕上不再可见的时候,它是否应该从Activity的堆栈被删除。如果设置了true,则要删除,否则不删除。默认值是false。
如果设置为true,则意味着Activity不会保留历史轨迹。也就是说,它不会保留在任务的Activity堆栈中,因此用户不能够在返回到这个Activity。
这个属性在API Level 3中被引入。
android:permission
这个属性用于设定启动Activity的客户端或者是响应一个Intent对象的请求所必须要有的权限。如果startActivity()方法或startActivityForResult()方法的调用者没有被授予指定的权限,那么它的Intent对象就不会发送给对应的Activity。
如果这个属性没有设置,那么
<application>
元素中的permission属性的设置就应用到Activity元素上。如果<application>
元素也没有设置,那么这个Activity就不会受到权限的保护。
android:process
这个属性用于设置Activity应该运行的那个进程的名字。通常,应用程序的所有组件都运行在为这个程序所创建的一个默认的进程中。它跟应用程序的包有相同的名字。
<application>
元素的process属性能够给所有的组件设置一个不同的默认值。但是每个组件都能够覆盖这个默认设置,允许把应用程序分离到多个进程中。如果这个属性名的值是用“:”开始,那么在需要的时候,就会创建一个应用程序私有的新的进程,这个Activity就会运行在这个进程中。如果进程名使用小写字母开头,那么在权限许可的情况下,该Activity会运行在用它命名的全局进程中。这样就运行不同应用程序的组件能够共享一个进程,从而减少资源的使用。
android:screenOrientation
这个属性用于设置Activity在设备上显示的方向。
属性值可以是下表中列出的一个值:
值 | 描述 |
---|---|
unspecified | 默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。 |
user | 使用用户当前首选的方向。 |
behind | 使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。 |
landscape | 横向显示(宽度比高度要大) |
portrait | 纵向显示(高度比宽度要大) |
reverseLandscape | 与正常的横向方向相反显示,在API Level 9中被引入。 |
reversePortrait | 与正常的纵向方向相反显示,在API Level 9中被引入。 |
sensorLandscape | 横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在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”,那么应用程序就只能适用于那些支持横向显示的设备。但是,还应该使用
元素来明确的声明应用程序所有的屏幕方向是纵向的还是横行的。例如: 。这个设置由Google Play提供的纯粹的过滤行为,并且在设备仅支持某个特定的方向时,平台本身并不控制应用程序是否能够被按照。
android:stateNotNeeded
这个属性用于设置在没有保存Activity状态的情况下,它能否被销毁且成功的重启。如果设置为true,则不引用Activity之前的状态就能够被重启,如果设置为false,重启Activity时,则需要它之前的状态。默认值是false。
通常,Activity在最终被关掉之前,会调用onSaveInstanceState()方法来保存资源。这个方法会用一个Bundle对象来保存Activity的当前状态,然后在这个Activity被重启时,再把这个Bundle对象传递给onCreate()方法。如果这个属性设置为true,onSaveInstanceState()方法就可以不被调用,并且调用onCreate()方法时,会用null来代替Bundle对象,就像Activity被第一次重启一样。
设置为true,会确保Activity在缺省状态下能够被重启。例如,在主屏显示的Activity如果使用这个设置,即使由于某些原因导致Activity崩溃,也会确保它不会被删除。
android:taskAffinity
这个属性用于跟Activity有亲缘关系的任务。带有相同亲缘关系的Activity,在概念上是属于相同任务的(从用户的角度看,它们是属于同一应用程序的)。任务的亲缘关系是通过它的根节点的Activity的亲缘关系来判定的。
亲缘关系决定了两件事情:1.Activity能否重新设定父任务(看allowTaskReparenting属性);2.这个任务能够包含用FLAG_ACTIVITY_NEW_TASK标记启动的Activity。
默认情况下,在一个应用程序中的所有Activity都有相同的亲缘关系。能够通过设置这个属性把Activity分到不同的组中。甚至能够把定义在不同应用程序中的Activity放到同一个任务中。要指定一个跟任何任务没有亲缘关系的Activity,就要把这个属性设置为空字符串。
如果这个属性没有设置,那么这个Activity会继承应用程序的亲缘关系(看
<application>
元素的taskAffinity属性)。应用程序默认的亲缘关系名称是由元素的package属性设定包名。
android:theme
这个属性用于设定Activity整体主题,它会应用一个样式资源。系统会使用这个主题来自动的设置Activity的内容。
如果这个属性没有设置,Activity会继承应用程序的主题(
元素的theme属性)做它的整体样式。如果这个属性也没有设置,那么默认使用系统的主题。
android:uiOptions
这个属性用于设置Activity的UI的额外选项,它必须是下表中的一个值。
值 | 说明 |
---|---|
none | 默认设置,没有额外的UI选项。 |
splitActionBarWhenNarrow | 在水平空间受到限制的时候,会在屏幕的底部添加一个用于显示ActionBar中操作项的栏,例如:在纵向的手持设备上。而不是在屏幕顶部的操作栏中显示少量的操作项。它会把操作栏分成上下两部分,顶部用于导航选择,底部用于操作项目。这样就会确保可用的合理空间不仅只是针对操作项目,而且还会在顶部给导航和标题留有空间。菜单项目不能被分开到两个栏中,它们要显示在一起。 |
android:windowSoftInputMode
这个属性用于设定Activity的主窗口与软件键盘的窗口如何交互。设置这个属性会影响以下两件事情:
软键盘的状态—在Activity获取输入焦点时,软键盘是隐藏还是显示。
调整Activity的主窗口—是调整Activity主窗口的大小,以便给软键盘腾出显示空间;还是在Activity窗口中的输入焦点被软键盘覆盖时,让Activity窗口中的内容平移,以便输入焦点能够显示给用户。
这个属性必须用下表中的一个值来设定,或者是一个state…的值和一个adjust…的值的组合。如:
<activityandroid:windowSoftInputMode="stateVisible|adjustResize" . . . >
这个属性设置的值会覆盖主题中设置的值。
值 | 说明 |
---|---|
stateUnspecified | 它不指定软键盘的状态(显示或隐藏)。系统会选择合适的状态,或者依赖主题中的设置。它是软键盘行为的默认设置。 |
stateUnchanged | 当Activity显示在前台时,软键盘会保持它最后的状态(显示或隐藏) |
stateHidden | 当用户选择这个Activity时,软键盘会隐藏。也就是说,当用户确认向前浏览到这个Activity的时候,而不是因为离开另一个Activity而返回这个Activity的时候。 |
stateAlwaysHidden | 当Activity的主窗口有输入焦点时,软键盘会始终隐藏 |
stateVisible | 在适当的时候(通常是用户浏览到这个Activity的主窗口),软键盘是可见的。 |
stateAlwaysVisible | 当用户选择了这个Activity时,软键盘变的可见,也就是说,当用户确认向前浏览到这个Activity的时候,而不是因为离开另一个Activity而返回这个Activity的时候。 |
adjustUnspecified | 这个值并不指定Activity的主窗口会软键盘的显示而进行大小的调整,也不会指定Activity的主窗口是否会平移,以便把因软键盘所遮挡的输入焦点显示给用户。系统会依赖内容窗口中的内容是否能够滚动,来自动的选择这两种模式。如果Activity窗口中有一个能够滚动的布局,那么这个窗口就会被调整大小,并假设通过滚动能够在一个较小的区域内来浏览窗口中所有的内容。 |
adjustResize | 为适应软键盘的显示,Activity的主窗口始终要调整大小。 |
adjustPan | Activity的主窗口不会因软键盘的显示而调整大小,相反,窗口中的内容会被自动的平移,以便输入焦点不会被软键盘所遮挡,并且用户能够看到他们所输入的内容。通常很少使用这种模式,因为用户可能需要关闭软键盘,以便能够跟软键盘所遮挡进行交互。 |
service
<service
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">
. . .
</service>
这个元素用于声明一个服务(Service类的子类)作为应用程序的组件之一。跟Activity不一样,服务没有可见的用户界面。它们被用于实现长时的后台操作,或提供能够被其他应用程序调用的通信API。
所有的服务都必须用清单文件中的
<service>
元素来代表。任何没有在清单中声明的服务都不能被系统看到,也不会被运行。
android:enabled
这个属性用于指示该服务是否能够被实例化。如果设置为true,则能够被实例化,否则不能被实例化。默认值是true。
<application>
元素有它自己的enabled属性,它的这个属性适用于应用中所有的组件,包括service组件。对于被启用的服务,<application>
和<service>
元素的enabled属性都必须是true(默认值都是true)。如果有一个元素的enabled属性被设置为false,该服务就会被禁用,而不能被实例化。
android:exported
这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。
它的默认值依赖与该服务所包含的过滤器。没有过滤器则意味着该服务只能通过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(因为其他外部使用者不会知道该服务的类名),因此这种情况下,这个属性的默认值是false。另一方面,如果至少包含了一个过滤器,则意味着该服务可以给外部的其他应用提供服务,因此默认值是true。
这个属性不是限制把服务暴露给其他应用程序的唯一方法。还可以使用权限来限制能够跟该服务交互的外部实体。
android:icon
这个属性定义了一个代表服务的图标,它必须要引用一个包含图片定义的可绘制资源。如果这个属性没有设置,则会使用
<application>
元素的icon属性所设定的图标来代替。无论是
<application>
元素设置的图标,还是<service>
元素所设置的图标,它们都是该服务所有的Intent过滤器的默认图标。
android:label
这个属性用于设定一个要显示给用户的服务的名称。如果没有设置这个属性,则会使用
<application>
元素的label属性值来代替。无论是
<service>
设定的标签,还是<application>
元素设定的标签,它们都是该服务所有的Intent过滤器的默认标签。这个标签应用引用一个字符串资源,以便它能够像用户界面中的字符串一样能够被本地化。但是,为了开发应用程序方便,也可以使用原生字符串来设置这个属性。
android:name
这个属性用于指定实现该服务的Service子类的类名。它应该是完整的Java类名(如:com.example.project.RoomService)。但是,也可以使用简写(如:.RoomService),系统会把
<manifest>
元素中package属性所设定的值添加到简写名称的前面。一旦发布了应用程序,就不应该改变这个名称(除非android:exported=”false”)。
这个属性没有默认值,名称必须要指定。
android:permission
这个属性定义了要启动或绑定服务的实体必须要有的权限。如果调用者的startService()、bindService()和stopService()方法没有被授予这个权限,那么这些方法就不会工作,并且Intent对象也不会发送给改服务。
如果这个属性没被设置,那么通过
<appliction>
元素的permission属性所设定的权限就会适用于该服务。如果<application>
元素也没有设置权限,则该服务不受权限保护。
android:process
这个属性用于设定服务所运行的进程名称。通常,应用程序的所有组件都运行在给应用程序创建的进程中,进程名与应用程序的包名相同。
<application>
元素的process属性能够给应用程序的所有组件设置一个不同的默认名称。但是每个组件自己的process属性都能够覆盖这个默认值,这样允许把应用程序分离到不同的多个进程中。如果这个属性值用“:”开头,则在需要的时候系统会创建一个新的,应用程序私有的进程,并且该服务也会运行在这个进程中。如果这个属性值用小写字母开头,那该服务就会运行在以这个属性值命名的全局进程中,它提供了使其工作的权限。这样就允许不同的应用程序组件来共享这个进程,从而降低资源的使用。
activity-alias
<activity-alias
android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:targetActivity="string">
. . .
</activity-alias>
这个元素用于给targetActivity属性所指定Activity设定一个别名,目标Activity必须跟别名Activity在同一个应用程序中,并且这个Activity必须在别名之前被声明。
别名会作为一个独立的实体来代表目标Activity。它能够有自己的Intent过滤器设置,而不是目标Activity自己的Intent过滤器,通过别名和系统处理别名的方式来判断哪个Intent对象能够激活目标。例如:别名中的Intent过滤器可以指定“android.intent.action.MAIN”和“android.intent.category.LAUNCHER”标记,这样即使在目标Activity的过滤器上没有指定这些标记,也会让它在应用的启动器窗口中表示。
除了targetActivity属性以外,
<activity-alias>
的其他属性是<activity>
属性的一个子集。对于子集中的属性,不会把目标Activity中所设置的任何值转交给别名Activity。但是,对于子集中所没有的属性,则给目标Activity所设置的值也会应用到别名Activity。
android:enabled
这个属性用于设定系统能否通过这个别名来实例化目标Activity,如果设置为true,则可以实例化,否则不能实例化。默认值是true。
<application>
元素有它自己的enabled属性,这个属性会应用给所有的应用程序组件,包括Activity别名。<application>
和<activity-alias>
属性都必须是true,这样系统才能够通过别名来实例化目标Activity。如果其中之一是false,那么别名就不会起作用。
android:exported
这个属性用于设定其他的应用程序组件能否通过这个别名来启动目标Activity,如果设置为true,则能够启动,否则不能启动。如果设定为false,则目标Activity只能由与别名相同的应用程序组件或具有相同用户ID的应用程序通过别名来启动。
它的默认值依赖与别名是否包含了Intent过滤器,如果没有过滤器,则意味着这个Activity只能通过确切的别名名称来调用别名Activity,隐含的意思是这个别名只能在应用程序的内部使用(因为其他人不知道它的名称)—因此默认值是false。在另外一方面,如果至少有一个过滤器,则意味着这个别名可以在外部使用—因此默认值是true。
android:icon
当通过别名把目标Activity展示给用户时,使用这个属性给目标Activity设置一个图标。
android:label
当通过别名把目标Activity展示给用户时,使用这个属性给目标Activity设置一个可读的标签。
android:name
给别名设置一个唯一的名字。这个名字应该像一个完全限定的类名,但是不想目标Activity的名字那样,别名的名称是任意的,它不对应一个实际的类名。
android:permission
设定权限的名称,客户端必须有这个权限才能启动目标Activity或通过别名来获取目标Activity以便做某些事情。如果startActivity()或startActivityForResult()方法的调用者没有被授予指定的权限,那么目标Activity就不会被激活。
这个属性值会取代目标Activity自己所设置的任何权限。如果它没有设置,那么不需要权限就可以通过别名来激活目标Activity。
android:targetActivity
这个属性用于设置通过别名所能够激活的那个Activity的名字。这个名字必须跟它前面的
元素的name属性匹配。
receiver
<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>
这个元素用于声明一个广播接收器(一个BroadcastReceiver 子类),作为应用程序的组件之一。广播接收器能够让应用程序接收那些由系统或其他应用程序发出的广播Intent对象,即使是在该应用程序的其他组件没有运行的时候,也能够接收来自系统或其他应用程序的广播消息。
有两种方式让系统知道本应用程序用户一个广播接收器:
在应用程序的清单文件中,使用本元素来声明注册一个广播接收器;
在代码中动态的创建一个广播接收器,并使用Context.registerReceiver()方法来注册它。有关更多动态创建接收器的方法,请看BoradcastReceiver类说明。
android:enabled
这个属性用于定义系统是否能够实例化这个广播接收器,如果设置为true,则能够实例化,如果设置为false,则不能被实例化。默认值是true。
<application>
元素有它自己的enabled属性,这个属性会应用给应用程序的所有组件,包括广播接收器。和 元素的这个属性都必须是true,这个广播接收器才能够被启用。如果有一个被设置为false,该广播接收器会被禁止实例化。
android:exported
这个属性用于指示该广播接收器是否能够接收来自应用程序外部的消息,如果设置true,则能够接收,如果设置为false,则不能够接收。如果设置为false,这该接收只能接收那些由相同应用程序组件或带有相同用户ID的应用程序所发出的消息。
它的默认值依赖它所包含的Intent过滤器。如果不包含过滤器,则接收器只能由指定了明确类名的Intent对象来调用,这就意味着该接收器只能在应用程序内部使用(因为通常在应用程序外部是不会知道这个类名的)。这种情况下默认值就是false。另一方面,如果接受器至少包含了一个过滤器,那么就意味着这个接收器能够接收来自系统或其他应用程序的Intent对象,因此默认值是true。
这个属性不是唯一的限制广播接收外部调用的方法,还能够通过全限来限制能够给它发送消息的外部实体。
android:icon
这个属性定义了一个代表广播接收器的图标,这个属性必须用包含图片定义的可绘制资源来设定。如果没有设置这个属性,会是应用
元素的icon属性值来代替。 无论是这个属性还是
<application>
元素的icon属性,它们设置的图标也是所有的接收器的Intent过滤器的默认图标。
android:label
这个属性给广播接收器设定一个用户可读的懂的文本标签。如果这个属性没有设置,那么就会使用
<application>
元素的label属性值来代替。无论是这个属性还是
<application>
元素的label属性,它们设置的标签也是所有的接收器的Intent过滤器的默认标签。应该使用一个字符串资源来设置这个属性,以便它能够像用户界面中的其他字符串一样能够被本地化。但是,为了应用开发的便利,也能够使用原生的字符串来设置。
android:name
这个属性值要用广播接收器的实现类的类名来设置,它是BroadcastReceiver类的一个子类。通常要使用类的全名来设置(如:com.example.project.ReportReceiver)。但是,也可以使用简写(如:.ReportReceiver)。系统会自动的把
<manifest>
元素中的package属性所设定的包名添加到这个简写的名称上。一旦发布了应用程序,就不应该在改变这个名字了(除非android:exported=”false”)。
这个属性没有默认值,这个名字必须被指定。
android:permission
这个属性用于定义把消息发送给该广播接收器的广播器所必须要有的权限。如果没有设置这个属性,那么
<application>
元素的permission属性所设置的权限就适用于这个广播接收器。如果<application>
元素也没有设置权限,那么该接收器就不受权限的保护。
android:process
这个属性用于设置该广播接收器应该运行在那个进程中的进程名。通常,应用程序的所有组件都在给应用程序创建的默认进程中运行,它有与应用程序包名相同的名称。
<application>
元素的process属性能够给它的所有组件设置一个不同的默认进程,但是它的每个组件自己的process属性能够覆盖这个默认设置,这样就允许把一个应用程序分离到多个进程中。如果这个属性值用“:”开头,则在需要的时候系统会创建一个新的,应用程序私有的进程,并且该广播接收器也会运行在这个进程中。如果这个属性值用小写字母开头,那么接收器就会运行在以这个属性值命名的全局进程中,它提供使其工作的权限。这样就允许不同的应用程序组件来共享这个进程。
provider
<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>
这个元素用于声明一个内容提供器,它对应一个ContentProvider类的子类。它提供了对由应用程序管理的数据的结构化的访问。应用程序使用的所有的内容提供器都必须在其清单文件中由
元素来声明。对于那些没有在清单中声明的内容提供器,系统看不到,也不会运行。(只需要声明那些作为该应用程序一部分的来开发的那些内容提供器,而不是那些由应用程序使用的由其他人开发本应用之外的那些内容提供器)。 Android系统通过content:URI的授权部分来识别内容提供器。例如,假设下列的URI要传递给ContentResolver.query()方法:
content://com.example.project.healthcareprovider/nurses/rn
content:表示数据是属于内容提供器的,授权(com.example.project.healthcareprovider):标识着一个具体的提供器。因此授权必须唯一的。通常,就像这个例子一样,授权是一个完整的ContentProvider子类的名称。URI的路径部分被内容提供器用来标识具体的数据子集,但是那些路径没有被声明在清单文件中。
关于使用可开发内容提供器的更多信息,请看内容提供的文档()。
android:authorities
标识内容提供器范围内的数据URI的授权列表,有多个授权时,要用分号来分离每个授权。为了避免冲突,授权名应该使用Java样式的命名规则(如:com.example.provider.cartoonprovider)。通常,用ContentProvider子类名称来设定这个属性。
这个属性没有默认值,至少要指定一个授权。
android:enabled
这个属性用于指定这个内容提供器是否能够被系统安装。设置为true,则可以安装;否则不能安装。默认值是true。
<application>
元素有它自己的enabled属性,这个属性会应用给所有的应用程序组件,包括内容提供器。<application>
和<provider>
的enabled属性都必须设置为true(它们的默认值都是true)。如果有一个设置为false,那么提供器就被禁止安装。
android:exported
这个属性用于指定该内容提供器是否能够被其他的应用程序组件使用。如果设置为true,则可以被使用,否则不能被使用。如果设置为false,该提供器只对同名的应用程序或有相同用户ID的应用程序有效。默认值是true。
虽然能够使用这个属性来公开内容提供器,但是依然还要用permission属性来限制对它的访问。
android:grantUriPermission
这个属性用于设定那些对内容提供的数据没有访问权限的访问者,是否能够被授予访问的权限,这个权限是临时性的,它会克服由readPermission、writePermission和permission属性的设置限制。如果这个属性设置为true,那么权限就可以授予访问者,否则不会授予没有访问权限的访问者。如果设置为true,则权限可以临时被授予内容提供器的任何数据。如果设置为false,则权限只能被授予
<gran-uri-permission>
子元素中所列出的数据子集。默认值是false。这种授权是应用程序提供了一种一次性访问被权限所保护的数据的方法。例如,当一个e-mail包含了一个附件时,mail应用程序就可以调用适当的浏览器来打开附件,即使这个浏览器没有查看所有内容提供器数据的权限。
在这样的场景中,权限是通过激活组件的Intent对象中的FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION标记来授予的。例如,mail应用程序可以把FLAG_GRANT_READ_URI_PERMISSION标记放到传递给Context.startActivity()方法的Intent参数中。这样权限就被授予了Intent对象中所指定的URI。
如果要启用这个功能,既可以通过把这个属性设置为true来完成,也可以通过定义
<grant-uri-permission>
子元素来实现,在切换RUI时,必须调用Context.revokeUriPermission()方法从提供器把权限删除。
android:icon这个属性用于定义一个代表内容提供器的图标。它必须要引用一个包含图片定义的可绘制资源。如果这个属性没有设置,那么就会使用应用程序的
<application>
元素的icon属性值来代替。
android:initOrder
这个属性用于定义内容提供器应该被实例化的顺序,这个顺序是相对与相同进程所拥有的其他内容提供器的。当内容提供器间有相互的依赖时,就需要设置这个属性,以确保它们能够按照其依赖的顺序被创建。这个属性值是一个简单的整数,大的数字要被优先初始化。
android:label
这个属性用于给内容提供器定义一个用户可读的标签。如果这个属性没有设置,那么它会使用
<application>
元素的label属性值来代替。这个标签应该引用一个字符串资源来设置,以便它能够像其他的用户界面中的字符串一样被本地化。但是为了方便应用程序的开发,也能够使用原生的字符串来设置这个属性,但正式发布时一定要引用字符串资源。
android:multiprocess
这个属性用于设定是否能够在每个使用该内容提供器的客户端进程中都创建一个内容提供器的实例,如果设置为true,这个能够在其每个客户端进程中创建一个实例,否则不可以。默认值是false。
通常,内容提供器是在定义它的应用程序的进程中被实例化的。但是,如果这个属性被设置为true,系统就能够在每个要与该内容提供器进行交互的客户端进程中创建一个内容提供器的实例,这样就避免了进程间通信的开销。
android:name
这个属性用于定义内容提供器的实现类的名称,它是ContentProvider类的一个子类。这个属性应该使用完整的Java类名来设定(如:com.example.project.TransportationProvider)。但是也可以使用简写(如:.TransporttationProvider),这时系统会使用
元素中指定的包名跟这个简写名称的组合来识别内容提供器。 这个属性没有默认值,必须要给这个属性设定一个名称。
android:permission
这个属性用于设定客户端在读写内容提供器的数据时必须要有的权限的名称。这个属性为同时设置读写权限提供了一种便利的方法。但是readPermission和writePermission属性的优先级要比这个属性高。如果readPermission属性也被设置了,那么它就会控制对内容提供器的查询访问。如果writePermission属性被设置,它就会控制对内容提供器数据的修改访问。
android:process
这个属性用于定义内容提供器应该运行在那个进程中的进程名称。通常,应用程序的所有组件都运行在给应用程序创建的默认进程中。它有与应用程序包相同的名称。
<application>
元素的process属性能够给其所有的组件设置一个不同的默认进程。但是每个组件都能够用它们自己的process属性来覆盖这个默认设置,从而允许把应用程序分离到不同的多个进程中。如果这个属性值是用“:”开头的,那么在需要这个提供器的时候,系统就会给这个应用程序创建一个新的私有进程,并且对应的Activity也要运行在那个私有进程中。如果用小写字母开头,那么Activity则会运行在一个用这个属性值命名的全局进程中,它提供了对内容提供器的访问权限。这样就允许不同应用程序的组件能够共享这个进程,从而减少对系统资源的使用。
android:readPermission
这个属性用于设置查询内容提供器的数据时,客户端所必须要有的权限。
android:syncable
这个属性用于设定内容提供器控制下的数据是否要与服务器上的数据进行同步,如果设置为true,则要同步,否则不需要同步。
android:writePermission
这个属性用于设置修改内容提供器的数据时,客户端所必须要有的权限。
path-permission
<path-permission
android:path="string"
android:pathPrefix="string"
android:pathPattern="string"
android:permission="string"
android:readPermission="string"
android:writePermission="string"/>
这个元素用于定义内容提供器中的具体的数据子集的路径以及必要的权限。这个元素能够多次使用,以便提供多个路径。
android:path
给内容提供器的数据定义一个完整的URI(数据资源标识)路径。权限只能被授予这个路径所标识的具体数据。
android:pathPrefix
这个属性定义了内容提供器的数据子集的URI的初始部分。权限能够被授予所有那些共享这个URI初始部分的数据子集。
android:pathPattern
这个属性给内容提供器数据子集定义了一个完整的URI路径,但是URI中能够使用下列之一的通配符:
星号()通配符,路径中的星号代表任意多个星号之前的那个字符,如a*,可跟a、aa、aaa、aaaa、…字符串匹配。
点跟星号的组合(.)通配符,它可以跟任意字符串进行匹配,如.html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。
因为系统读取XML中的字符串时,会把’\’符号作为强制转义字符,因此就需要两次转义。例如,符号””要被写成”\”,符号’\’要被写成”\\”。这与Java代码中的写法基本相同。
有关这些模式类型的更多信息,请看PatternMatcher类中的PATTERN_LITERAL、PATTERN_PREFIX、PATTERN_SIMPLE_GLOB的说明。
http://developer.android.com/reference/android/os/PatternMatcher.html
android:permission
这个属性定义了一个权限名称,为了读写内容提供器中的数,客户端必须要有这个权限。这个属性是给数据设置读写权限的便利的方法,但是readPermission和writePermission属性比这个属性的优先级要高。
android:readPermission
为了读取查询内容提供器中的数据,客户端必须要这个权限。
android:writePermission
为了能够改变由内容提供器所控制的数据,客户端必须要有这个权限。
grant-uri-permission
<grant-uri-permission
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"/>
这个元素用于给内容提供器的数据子集授权。数据子集是由content:URI的路径部分来标识的。授权是提供器给客户端提供的一种能力,这样客户就可以访问通常没有权限访问的数据,从而克服基于单次访问的限制。
如果内容提供器的grantUriPermissions属性被设置为true,那么权限能够被授予内容提供器范围内的任何数据。但是,如果grantUriPermission属性被设置为false,那么权限就只能授予这个元素所指定的数据子集。一个内容提供器能够包含任意多个个
<grant-uri-permission>
元素。每个都只能指定一个路径(三个可能属性中的一个)。有关如何授权的更多信息,请看
``元素的grantUriPermissions属性。
android:path
android:pathprefix
android:pathPattern
一个路径标识了能够被授权的一个或多个数据子集。path属性指定了一个完整的路径,权限只能被授予这个路径所标识的具体的数据子集。pathPrefix属性指定了路径的初始部分,权限能够被授予共享这个初始路径的所有数据子集。pathPattern属性指定了一个完整的路径,但是这个路径中包含了通配符:
- 星号()通配符,路径中的星号代表任意多个星号之前的那个字符,如a*,可跟a、aa、aaa、aaaa、…字符串匹配。
- 点跟星号的组合(.)通配符,它可以跟任意字符串进行匹配,如.html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。
因为系统读取XML中的字符串时,会把’\’符号作为强制转义字符,因此就需要两次转义。例如,符号””要被写成”\”,符号’\’要被写成”\\”。这与Java代码中的写法基本相同。
有关这三种模式的更多信息,请看PatternMatcher类中的PATTERN_LITERAL、PATTERN_PREFIX、PATTERN_SIMPLE_GLOB的说明。
http://developer.android.com/reference/android/os/PatternMatcher.html
compatible-screen
<compatible-screens>
<screen
android:screenSize=["small" | "normal" | "large" | "xlarge"]
android:screenDensity=["ldpi" | "mdpi" | "hdpi" | "xhdpi"] />
...
</compatible-screens>
这个元素用于指定那些屏幕配置跟应用程序是兼容的。在应用的清单中只允许有一个
<compatible-screent>
元素的实例,但是它能够包含多个<screen>
元素。每个<screen>
元素指定一个特定的跟应用程序兼容的尺寸—密度组合。Android系统不会读取
清单元素(无论是在安装的时候,还是在运行的时候)。这个元素的信息只能被外部服务使用(如Google Play),以便使其能够更好的理解应用程序跟指定屏幕配置的兼容性。任何没有在这个元素中声明的屏幕配置,都是跟应用程序不兼容的屏幕。这样,外部服务(如Google Play)就不应该把应用程序提供给带有这样屏幕的设备。 警告:通常不应该使用这个清单元素。因为使用这个元素会显著的降低应用程序潜在的用户群。如果设备带有一个应用程序清单中没有列出屏幕配置,那么就不会允许用户安装这个应用程序。在肯定应用程序在所有的屏幕配置上都不会工作时,最后才使用这个方法。相反为了给多个屏幕提供完全的支持,应该按照“支持屏幕多种配置”指南
http://developer.android.com/guide/practices/screens_support.html
来给不同的屏幕尺寸和密度来添加可选的资源。如果只想给应用程序设置一个最小的屏幕尺寸,那么就应该使用
<supports-screens>
元素。例如,如果要让应用程序只对大屏幕(large)或超大屏幕(xlarge)的设备有效,那么<supports-screen>
元素就要声明应用程序不支持小屏幕(small)和普通屏幕(normal)的设备。外部服务(如Google Play)根据<supports-screen>
的设置来过滤应用程序。还能够使用<supports-screens>
元素来声明系统是否应该调整应用程序,以便适应不同的屏幕尺寸。
screen
这个元素指定一个跟应用程序兼容的屏幕配置。
在
<compatible-screens>
元素内部,至少要有一个这个元素的实例。这个元素必须同时包含android:screenSize和android:screenDensity属性,如果没有同时声明,那么这个元素就会被忽略。
android:screenSize
指定跟应用程序兼容的屏幕配置的屏幕尺寸。可以是以下的值:
· small
· normal
· large
· xlarge
android:screenDensity
指定跟应用程序兼容的屏幕配置的屏幕密度,可以是以下值:
· ldpi
· mdpi
· hdpi
· xhdpi例子(EXAMPLE):
如果应用程序仅跟小屏和普通屏幕的设备兼容,而不管屏幕的密度,那么必须要指定八个不同的
元素,因为每个屏幕尺寸都有四种不同密度的配置。必须对这些配置逐一声明;任何没有指定的尺寸和密度的组合,都会被认为这个屏幕配置跟应用程序不兼容。如果应用程序只跟小屏幕和普通屏幕兼容,那么清单配置如下:
<manifest ... >
...
<compatible-screens>
<!-- all small size screens -->
<screenandroid:screenSize="small"android:screenDensity="ldpi"/>
<screenandroid:screenSize="small"android:screenDensity="mdpi"/>
<screenandroid:screenSize="small"android:screenDensity="hdpi"/>
<screenandroid:screenSize="small"android:screenDensity="xhdpi"/>
<!-- all normal size screens -->
<screenandroid:screenSize="normal"android:screenDensity="ldpi"/>
<screenandroid:screenSize="normal"android:screenDensity="mdpi"/>
<screenandroid:screenSize="normal"android:screenDensity="hdpi"/>
<screenandroid:screenSize="normal"android:screenDensity="xhdpi"/>
</compatible-screens>
<application ... >
...
<application>
</manifest>
instrumentation
<instrumentation
android:functionalTest=["true" | "false"]
android:handleProfiling=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:targetPackage="string"/>
这个元素声明了一个Instrumentation类,这个类能够监视应用程序跟系统的交互。Instrumentation对象会在应用的其他所有组件被实例化之前实例化。
android:functionalTest
这个属性用于指定Instrumentation类是否应该作为一个功能性的测试来运行,如果设置为true,这要运行,否则不应该运行。默认值是false。
android:handleProfiling
这个属性用于指定Instrumentation对象是否会开启和关闭分析功能。如果设置为true,那么由Instrumentation对象来决定分析功能的启动和终止时机,如果设置为false,则分析功能会持续到Instrumentation对象整个运行周期。如果设置为true,会使Instrumentation对象针对一组特定的操作来进行分析。默认值是false。
android:icon
这个属性用于给Instrumentation类设置一个图标。它必须要应用一个可绘制的资源。
android:label
这个属性用于给Instrumentation类设置一个用户可读的标签。这个标签可用原生字符串,也可以引用一个字符串资源。
android:name
这个属性用于设定Instrumentation子类的名称。应该是完整的Java类名(如:com.example.project.StringInstrumentation)。但是,也可以用简写方式(如:.StringInstrumentation),它的包名会使用
元素的package属性中指定的包名。 它没有默认值,必须被指定。
android:targetPackage
这个属性用于指定Instrumenttation对象所监视的应用程序。由包名所标识的应用程序会跟清单的
元素的package属性值相关联。
permission
<permission
android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" | "signature"|"signatureOrSystem"] />
这个元素用于声明一个安全权限,以便限制对具体的组件、或组件功能、或其他的应用的访问
android:description
这个属性用于给权限定义一个用户可读的懂的描述,它要比标签更长更详细。它可以显示给用户,以便向用户解释权限的含义—例如,当询问用户是否要给另一个应用程序授予对应的权限的时候,就会把这个属性所定义的说明显示给用户。
android:icon
这个属性要引用一个可绘制的图标资源,用于代表这个权限。
android:label
这个属性定义了一个能够显示给用户的权限名称。
为了方便,在开发应用程序时,这个标签能够直接使用原生的字符串。但是当应用程序要正式发布时,它应用使用一个字符串资源来设置,以便它能够跟用户界面中的其他字符串一样被本地化。
android:name
这个属性定义了权限的名称。它是在程序代码中引用的权限的名称—例如,在一个
元素中和应用程序组件中的permission属性。 这个名称必须是唯一的,因此要使用Java样式的命名规则—例如:com.example.project.PERMITTED_ACTION
android:permissionGroup
这个属性用于把这个权限分配到一个权限组中。这个属性的值是一个权限组的名称,它必须是在本应用程序或另一个应用中用
android:protectionLevel
特权就意味着潜在的风险,因此在判定是否要把权限授予请求的应用程序时,使用这个属性定义来指示系统应该遵循的过程。它可能是表中的值之一。
值 | 说明 |
---|---|
normal | 默认值。这是让请求的应用程序访问独立的应用程序级功能的一个较低风险的权限,它会给另一个应用程序、系统、或用户带来最小化的风险。系统在安装应用程序时会自动的把这种类型的权限授予请求的应用程序,而不需要用户明确的批准(虽然在安装应用程序之前,用户始终可以有选择的查看这些权限)。 |
dangerous | 这个是一个较高风险的授权,它会让请求该权限的应用程序访问私有的用户数据,或者控制用户设备,从而给用户带来负面影响。因为这种权限会引入潜在的风险,因此系统不会自动把这种权限授予请求这个权限的应用程序。例如,应用程序所请求的这些dangerous类型的权限,在确认处理之前,可以显示给用户,或者采用一些其他的方法,以避免用户自动把权限授予所请求的应用程序。 |
signature | 系统只会把这种权限授予具有相同数字签名的应用程序,也就是说,请求该权限的应用程序要与声明该权限的应用程序具有相同的数字签名。如果证书匹配,系统就会自动的把该权限请求权限的应用程序,而不会通知用户,也不会要求用户明确的批准。 |
signatureOrSystem | 系统只会把这种权限授予Android系统镜像中应用程序,或者是那些与系统镜像中具有相同证书签名的应用程序。请避免使用这个选项,因为signature类型的权限应该足以满足大多数工作的需要。SingatureOrSystem权限主要用于某些特定的场景,如:多个厂商有一些要构建在系统镜像中的应用程序,并且它们共享一些明确的特殊功能。 |
permission-tree
<permission-tree
android:icon="drawable resource"
android:label="string resource" ]
android:name="string"/>
这个元素用于声明权限树的根节点名称,应用程序持有树中定义的所有权限名称所对应的权限。通过调用PackageManager.addPermission()方法能够动态的来添加新的权限。树中的名称是通过”.”来分离的。例如:如果跟节点的名称是com.example.project.taxes,那么可以使用下面的格式来添加权限:
com.example.project.taxes.CALCULATE
com.example.project.taxes.deductions.MAKE_SOME_UP
com.example.project.taxes.deductions.EXAGGERATE要注意的是,这个元素本身并不声明权限,它只是一个能够放置更多权限的命名空间。关于声明权限的更多信息,请看
<permission>
元素。
android:icon
这个属性定义了一个代表树中所有权限的图标。这个属性必须要引用一个包含图片定义的可绘制资源来设置。
android:label
给权限树定义一个用户可读的名称。为了开发应用程序方便,可以直接使用原生的字符串来设置这个属性,但是,当正式发布应用程序时,应该引用一个字符串资源来设置这个属性,以便它能够像用户界面中的其他属性一样能够被本地化。
android:name
这个属性定义了权限树根节点的名称。它被用于树中所有权限名称的前缀。应该使用Java样式命名规则,以确保名称的唯一性。在命名中必须要有两个以上的”.”来进行分离,例如:com.example.base是正确的,但com.example就是错误的。
permission-group
<permission-group
android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"/>
给相关的权限声明一个逻辑上的分组名称。独立的权限要通过
<permission>
元素的permissionGroup属性来加入权限分组。同一分组的中成员会一起展现在用户的界面中。要注意的是这个元素本身并不能声明权限,它只是放置相关权限的一个分类。有关声明权限和权限分组的相关信息,请看
<permission>
元素。
android:description
这个属性用于给权限组定义一个用户可读的说明性文本。这个文本应该比标签更长、更详细。这个属性必须要引用一个字符串资源,跟label属性不一样,它不能够使用原生的字符串。
android:icon
这个属性定义了一个代表权限的图标。这个属性要使用包含图片定义的可绘制资源来定义。
android:label
这个属性给权限组定义了一个用户可读的名称。为了开发方便,在开发时,可以直接使用原生的字符串来设置这个属性。但是,当应用程序正式发布时,应该使用字符串资源来设置,以便能够像用户界面中其他的字符串一样能够被本地化。
android:name
这个属性定义了权限组的名称,它是能够分配给
元素的permissionGroup属性的名称。
supports-screens
<supports-screens
android:resizeable=["true"|"false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
这个元素用于指定应用程序所支持的屏幕尺寸,并针对比应用程序所支持的屏幕还要大屏幕,启用屏幕兼容模式。在应用程序中使用这个元素指定应用程序所支持的屏幕尺寸是至关重要的。
如果应用程序调整尺寸属性来填充整个屏幕,那么应用程序就要支持这个给定的尺寸。通常对于大多数应用程序,系统可以很好的完成这种调整工作,并且为了让应用程序在比一个手持设备大的屏幕上工作,你不需要做任何额外的工作。但是,针对不同的屏幕尺寸,通过提供可选的布局资源来优化应用程序的UI经常是很重要的。例如,一个运行在手持设备上的Activity布局,如果想要运行在平板电脑上,就需要修改这个Activity的布局。
但是,如果为了适应不同的屏幕尺寸而调整了尺寸,但应用程序也不能很好的工作,就可以使用
元素的属性来控制应用程序是否应该发布给屏幕较小的设备,或者使用系统的屏幕兼容模式,让UI放大以适应较大屏幕的要求。在没有针对较大屏幕尺寸的设计,并且普通的尺寸不能达到合适结果时,屏幕的兼容模式会通过模拟普通尺寸的屏幕和中等密度来缩放UI,以便它能够填充整个屏幕,这样会导致UI模糊,因此针对大屏幕的优化是比较好的。 注意:Android3.2引入了新的属性:android:requiresSmallestWidthDp、android:compatibleWidthLimitDp和android:largestWidthLimitDp。如果正在开发Android3.2或更高版本的应用程序,应该使用这些属性来声明应用程序所支持的屏幕尺寸,而不是基于一般的屏幕尺寸属性。
有关如何正确的支持不同的屏幕尺寸,以便避免给应用程序使用屏幕兼容模式的更多信息,请阅读“Supporting Multiple Screens”
android:resizeable
这个属性用于指示针对不同的屏幕尺寸,应用程序是否可以调整尺寸。默认值是true。如果这个属性设置了false,在大的屏幕上,系统会在屏幕兼容模式中运行该应用程序。
这个属性被废弃了,引入这个属性主要是为了帮助应用程序从1.5过渡到1.6。当多屏幕支持被引入时,就不应该在使用它了。
android:smallScreens
这个属性用于指定应用程序是否支持较小外形的屏幕。一个small类型的屏幕被定义成一个比normal(传统的HVGA)类型的屏幕还要小的屏幕。外部服务(如Google Play)不会把不支持小屏的应用程序提供给小屏设备,因为很少有能够确保该应用程序在小屏幕的设备上正常工作的平台。这个属性的默认值是true。
android:normalScreens
这个属性用于指示应用程序是否支持普通外形的屏幕。典型的是HVGA中等密度的屏幕,但是WQVGA低密度和WVGA高密度屏幕也被认为是普通屏幕。这个属性的默认值是true。
android:largeScreens
这个属性用于指示应用程序是否支持较大外形的屏幕。一个large类型的屏幕被定义成一个比normal类型的手持设备的屏幕明显还要大的屏幕,并且为了让应用程序能够良好的使用,使用这个属性时要特别小心,尽管可以依赖系统来调整尺寸,以便能够填充屏幕。
这个属性的默认值实际上在某些版本之间是不同的,因此最好在任何时候都明确的声明这个属性。如果设置为false,系统会启用屏幕兼容模式,这时要格外的小心。
android:xlargeScreens
这个属性用于指示应用程序是否支持超大外形的屏幕。一个xlarge屏幕被定义成一个比large屏幕还要大的屏幕,如平板电脑,为了能够让应用程序良好的使用,需要特别小心的使用这个属性,尽管可以依赖系统来UI的尺寸来填充屏幕。
android:anyDensity
这个属性指明应用程序是否包含了能够适用于任何屏幕密度的资源。
对于支持Android1.6(API Level 4)和更高版本的应用程序,这个属性的默认值是true,并且除非绝对的确认这是应用程序正常工作所必须的,否则不应该把它设置为false。只是在应用程序直接操作位图时才需要禁止这个属性。
android:requiresSmallestWidthDp
这个属性用于指定smallestWidth的最小需求。smallestWidth是屏幕空间的最短尺寸(以dp为单位),它必须是对应用程序的UI是有效的。也就是说它是有效的屏幕的两个维度的尺寸中最短的那个。因此为了考虑设备跟应用程序的兼容性,设备的smallestWidth的值必须要大于等于这个属性所设置的值。通常这个属性值是针对布局所支持的最小宽度,而不是屏幕当前的方向。
例如,典型的手持设备屏幕smallestWidth是320dp;7英寸的平板电脑的smallestWidth是600dp;10英寸的平板电脑的smallestWidth是720dp。这些值一般都是最小的宽度,因为它们是屏幕可用空间中最短的那个尺寸。
这对这个尺寸值的比较,需要考虑屏幕的装饰和系统UI部分。例如,如果系统有一些固定的UI元素要显示,那么系统声明的设备的最小宽度(smallestWidth)要比实际的屏幕尺寸要小,因为被系统UI占用的屏幕像素对于应用的UI是无效的。因此,这个值应该是应用布局所使用的最小宽度需求,而不管屏幕的当前方向。
如果应用程序能够针对较小屏幕尺寸进行正确的调整(small尺寸或最小宽度是320dp以下的屏幕),那么就不需要这个属性。否则就应该使用这个属性值跟应用程序所使用的最小屏幕宽度限定符的值(sw
dp)相匹配。 警告:Android系统不会关注这个属性,因此它不会影响应用程序在运行时的行为。相反,它被服务(如Google Play)用于过滤应用程序。但是,当前Google Play不支持用这个属性来过滤(在Android3.2上),因此如果应用程序不支持小屏幕设备,就应该继续使用其他的尺寸属性。
这个属性在API Level 13中被引入。android:compatibleWidthLimitDp
这个属性允许在设计应用程序时,通过指定最大的“smallest screen width”来启用屏幕兼容模式,作为一个用户可选的功能。如果设备的有效屏幕的最小边比这个属性值大,那么用户依然能够安装该应用程序,但是在运行时要使用屏幕兼容模式。默认情况下,屏幕兼容模式似乎被禁止的,并且通过会调整布局的尺寸来填充屏幕,但是在系统栏中会有一个按钮,让用户选择屏幕兼容模式的打开和关闭。
如果应用程序跟所有的屏幕尺寸都兼容,并且它的布局能够被正确的调整尺寸,就不需要使用这个属性。
注意:当前,屏幕兼容模式只能模拟320dp宽度的手持设备屏幕,因此如果android:compatibleWidthLimitDp的值比320大,那么屏幕兼容模式就不被适用。
这个在API Level 13中被引入。
android:largestWidthLimitDp
这个属性允许再设计应用程序时,通过指定最大的“smallest screen width”来强制启用屏幕兼容模式。如果设备有效屏幕的最小边比这个属性值大,应用程序就会运行在屏幕兼容模式中,而用户没有办法禁止这种模式。
如果应用程序跟所有的屏幕尺寸都兼容,并且能够被正确的调整尺寸,就不需使用这个属性。否则首先要考虑使用android:compatibleWidthLimitDp属性。只有在因大屏幕尺寸调整而导致破坏了应用程序的功能的时候,并且使用屏幕兼容模式是唯一的方法的时候,才应该使用这个属性。
注意:当前,屏幕兼容模式只能模拟320dp宽度的手持设备屏幕,因此如果android:compatibleWidthLimitDp的值比320大,那么屏幕兼容模式就不被适用。
这个在API Level 13中被引入。
supports-gl-texture
<supports-gl-texture android:name="string"/>
这个元素用于声明一个应用程序所支持的GL纹理压缩格式。
一个应用程序支持一种纹理压缩格式,如果应用程序提供了用该格式压缩纹理资源的能力,那么一旦应用程序被安装在设备上,应用程序就能够从.apk文件的内部提供本地的压缩资源,或者在运行时从服务器上下载它们。
每个
<supports-gl-texture>
元素用android:name属性明确的声明一个所支持的纹理压缩格式。如果应用程序支持多种纹理压缩格式,可以声明多个<supports-gl-texture>
元素,例如:<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" /> <supports-gl-texture android:name="GL_OES_compressed_paletted _texture" />
被声明的
是一种信息,这就意味着应用程序在安装时,系统本身并不检查这个元素,以确保与设备的支持相匹配。但是,其他的服务(如Google Play)或应用程序能够检查你的应用程序的 <supports-gl-texture>
的声明,把它作为与你的应用程序进行交互和处理的一部分。由于这个原因,在你的应用程序中声明所有支持的纹理压缩格式的能力是至关重要的。通常,应用程序和设备会使用相同的已知的字符串(如下表所示)来声明它们所支持的纹理压缩格式。下表中的格式字符串会根据需要随着时间来增长,并且因为值是字符串,所有应用程序可根据需要自由的声明其他的格式。
假设应用程序是建立在SDK平台工具r3或更高的版本上,那么基于
<supports-gl-texture>
元素的过滤对所有的API级别都是有效的。
android:name
这个属性用描述字符串给指定一个由应用程序支持的一个GL纹理压缩格式,通用的描述符的值在下表中被列出。
纹理压缩格式描述符 | 注释 |
---|---|
GL_OES_compressed_ETC1_RGB8_texture | 爱立信纹理压缩。在OpenGL ES2.0中被指定,并且在所有支持OpenGL ES2.0的Android设备上都是有效的。 |
GL_OES_compressed_paletted_texture | 通用的调试版纹理压缩。 |
GL_AMD_compressed_3DC_texture | ATI 3Dc纹理压缩 |
GL_AMD_compressed_ATC_texture | ATI纹理压缩。在运行Adreno GPU的设备上有效,包括HTC的Nexus One、Droid Incredible、EVO等。为了最广泛的兼容性,设备也可以声明一个带有GL_ATI_texture_compression_atitc描述符的<supports-gl-texture> 元素 |
GL_EXT_texture_compression_latc | 亮度的透明度纹理压缩。 |
GL_EXT_texture_compression_dxt1 | S3 DXT1纹理压缩。支持运行Nvidia Tegra2平台的设备,包括Motorala Xoom、Motorola Atrix、Droid Bionic等。 |
GL_EXT_texture_compression_s3tc | S3纹理压缩,不特定指DXT变种。在运行Nvidia Tegra2平台的设备上被支持,包括Motorala Xoom、Motorola Atrix、Droid Bionic等。如果应用程序需要一个特定的DXT变种,就要用那个变种的描述符来代替这个描述符。 |
GL_EXT_texture_compression_pvrtc | PowerVR纹理压缩。在运行PowerVr SGX530/540 GPU的设备中有效。如Motorola的DRIOID系列,Samsung Galaxy S,Nexus S,和Galaxy Tab等。 |
Google Play和纹理压缩过滤
Google Play对应用程序的过滤,对用户来说是可见的,以便用户能够看到并只下载那些跟设备兼容的应用程序。它过滤应用程序的方法之一就是通过纹理压缩的兼容性,它会基于GPU的能力来控制应用程序在各种设备上的可用性。
Google Play会通过以下内容的比较,来判断应用程序的纹理压缩与用户设备的兼容性:
应用程序支持的纹理压缩格式—应用程序会在它的清单文件的
<supports-gl-texture>
元素中声明它所支持的纹理压缩格式;设备上GPU所支持的纹理压缩格式—设备会把作为它所支持的只读系统属性来报告。
每次把应用程序发布到Google Play的发布网站上时,Google Play会扫描该应用程序的清单文件,并查看
<supports-gl-texture>
元素,它从这个元素中提取格式描述符,并把它作为跟应用程序的.apk和版本关联的内部元数据来保存。如果应用程序所支持的任何一种纹理压缩格式也是设备所支持的,那么Google Play就允许用户看到这个应用程序并可下载它。否则,如果应用程序所支持的格式都不被设备所支持,那么Google Play就会过滤掉这些应用程序,使其不能下载。
如果应用程序没有声明任何
<supports-gl-texture>
元素,那么Google Play不会使用任何基于纹理压缩格式的过滤。
uses-sdk
<uses-sdkAndroid:
minSdkVersion="integer"
android:targetSdkVersion="integer"
android:maxSdkVersion="integer"/>
这个元素用API 的级别(一个整数)来说明应用程序会跟哪些Android平台版本兼容。由应用程序给出的API级别会跟给定不同的设备中的Android系统的API级别比较。
尽管这个元素被用于指定API的级别,但它并不是SDK(软件开发工具包)或Android平台的版本号。API级别始终是用一个整数表示。不能够从根API级别关联的Android版本号中获取API级别信息
android:minSdkVersion
一个整数,它指定了应用程序运行所需要的最小的API级别。如果Android系统的API级别被该应用程序清单中的这个属性值小,那么系统就阻止安装该应用程序,应该始终声明这个属性。
警告:如果没有声明这个属性,Android系统就会假设一个默认值1,它表明该应用程序会跟所有的Android版本兼容。如果应用不是跟所有的Android版本兼容(例如,应用要使用在API Level 3中引入的API),并且也没有声明正确的minSdkVersion属性,那么当应用安装到API Level 3小的系统上时,应用程序会在视图访问无效的API时崩溃。由于这个原因,必须要在minSdkVersion属性中声明适当的API Level。
android:targetSdkVersiion
一个整数,它指定了应用程序要运行的目标的API级别。如果没有设置,它的默认值等于给定的minSdkVersion属性值。
android:maxSdkVersion
一个整数,表明该应用要运行的最大的API Level。
uses-configuration
这个属性用于指定该应用程序所需要的硬件和软件功能。例如,应用程序可以用这个元素指定它所需要的物理键盘或特殊的导航设备,如轨迹球。使用这个规范可以避免把应用程序安装在那些不支持其不能工作的设备上。
如果应用程序能够用不同的设备配置来工作,那么它就应该给每个配置包含一个独立的
声明。每个声明必须被完成。例如,应用程序需要一个五向导航控制,就要需要一个支持手指操作的触屏,以及一个标准的QWERTY键盘或12键的数字键盘,因此要用两个 元素来指定这些需求:
<uses-configuration
android:reqFiveWayNav="true"
android:reqTouchScreen="finger"
android:reqKeyboardType="qwerty"/>
<uses-configuration
android:reqFiveWayNav="true"
android:reqTouchScreen="finger"
android:reqKeyboardType="twelvekey"/>
android:reqFiveWayNav
这个属性用于指定应用程序是否需要五向导航控制,如果设置为true,则需要,否则不需要。五向控制是指能够上、下、左、右移动所选择的对象,并提供调用当前选择对象的方法。它可以是一个D-pad(方向板)、轨迹球等。
如果应用程序需要一个方向控制,但不是一种特殊类型的控制,就可以把这个属性设置为true,并且忽略reqNavigation属性。但是,如果应用程序需要一种特殊的方向控制类型,那么就可以忽略这个属性,并用reqNavigation属性的设置来代替。
android:reqHardKeyboard
这个属性用于指定应用程序是否需要硬键盘,如果设置为true,则需要,否则不需要。
android:reqKeyboardType
这个属性用于指定该应用程序需要的任何键盘的类型。这个属性不区分软/硬键盘。如果需要某种类型的硬键盘,就用这个属性来指定类型,并把reqHardKeyboard属性设置为true。
它的属性值必须是下表中值之一:
值 | 说明 |
---|---|
undefined | 应用程序不需要键盘。(键盘的需求没有被定义。)这是默认值。 |
nokeys | 应用程序不需要键盘,明确定义该应用不需要键盘 |
qwerty | 应用程序需要一个标准的QWERTY键盘。 |
twelvekey | 应用程序需要一个像大多电话那样的12键的数字键盘,键盘中包括0~9的数字和“*”号键、“#”号键。 |
android:reqNavigation
这个属性定义了应用程序所需要的任何导航设备,属性值必须是下表中的值之一:
值 | 说明 |
---|---|
undefined | 应用程序不需要任何类型的导航控制。(应用程序的导航需求没有被定义。)这是默认值。 |
nonav | 应用程序不需要到导航控制。 |
dpad | 应用程序要求使用D-pad(方向板)来进行导航控制 |
trackball | 应用程序要求使用轨迹球来进行导航控制 |
wheel | 应用程序要求使用一个导航滚轮来进行导航控制。 |
如果应用程序要求一个导航控制,但并不关心具体的控制类型,那么就要把reqFiveWayNav属性设置为true,而不是只设置这一个属性。
android:reqTouchScreen
这个属性用于设置应用程序所需要的任何触屏类型。属性值必须是下表中的字符串之一:
值 | 说明 |
---|---|
undefined | 应用程序不需要触屏。(触屏的需求不被定义。)这是默认值。 |
notouch | 应用程序不需要触屏 |
stylus | 应用程序需要带有触控笔操作的触屏。 |
finger | 应用程序需要能够用一个手指进行操作的触屏。 |
uses-feature
<uses-feature
android:name="string"
android:required=["true" | "false"]
android:glEsVersion="integer"/>
这个元素用于声明一个单独的被应用程序使用的硬件或软件功能。
<uses-feature>
声明的目的是通知其他外部实体,该应用程序所依赖的硬件和软件功能。这个元素提供的required属性会让你指定应用程序在所需的功能不存在时,应用程序是否能够正常运行。因为功能能够所支持的Android设备不同,所以<uses-feature>
元素被用于描述应用程序所依赖的、重要的、可用的设备功能。应用程序所声明的一组可用功能对应着一组由Android的PackageManager类定义的可用的功能常量,为了方便,这些常量会在《Google Play和基于功能的过滤》的“功能参考”表中被列出。
如果应用程序需要多个功能,就要分别使用
<uses-feature>
元素来指定所需的每一个功能,例如:需要设备中带有蓝牙和camera功能的应用程序,要声明两个<uses-feature>
元素:
<uses-feature android:name="android.hardware.bluetooth" />
<uses-feature android:name="android.hardware.camera" />
通常应该确保使用
<uses-feature>
元素来声明应用程序所需的所有功能。被声明的
<uses-feature>
元素只是信息化的,这意味着Android系统本身在安装应用程序之前,不会检查设备上所支持的功能的匹配性。但是其他的服务(如Google Play)或应用程序可以检查该应用程序的<uses-feature>
声明,把它作为与该应用程序交互的一部分。由于这个原因,声明应用程序要使用的所有的外部功能是至关重要的。对于某些功能,有可能存在一个特定的属性,以便定义功能的版本,如被使用的Open GL的版本(用glEsVersion来声明)。而有些功能则不需要指定版本属性,如照相机,就只使用name属性来声明。
尽管
<uses-feature>
元素只在运行API Level 4或更高的版本上才有效,但是还是推荐在所有的应用程序中包含这个元素,即使minSdkVersion的值是3或更低的版本,那么这些运行旧的平台版本的设备会简单忽略掉这个元素。注意:在声明一个功能时,要记住必须申请相应的权限。例如,在应用程序能够访问Camera的API之前,必须申请CAMERA权限。申请权限是让应用程序能够访问相应的软/硬件,而声明应用程序所使用的功能是为了确保正确的设备兼容性。
android:name
这个属性用描述性的字符串,指定该应用程序所使用的软/硬件功能。有效描述符在《Google Play和基于功能的过滤》的“硬件功能”和“软件功能”表中被列出。
android:required
这个属性用一个布尔值来指定应用程序是否需要在android:name属性中所指定的功能。
true:在设备上不存在指定的功能时,则该应用不能够正常运行。
false:如果设备上存在指定的功能,则应用程序会倾向使用这个功能,但是如果需要,也可设计成没被指定的功能也能够正常运行。
如果没有声明,这个属性的默认值是true。
android:glEsVersion
这个属性用于声明应用程序所需要的OpenGL ES的版本。它的高16位代表主版本号,低16位代表次要版本号,如:要是指定OpenGL ES的版本号是2.0,那么就要设置为0x00020000。要指定的OpenGL ES的版本号是2.1,就要设置为0x00020001。
应用程序在它的清单中应该最多只能指定一个android:glEsVersion属性,如果指定了多个,那么只会使用版本最高的那个android:glEsVersion属性,而其他的将会被忽略。
如果应用程序没有指定一个android:glEsVersion属性,那么就假定应用程序仅需要OpenGL ES1.0,它是在所有的Android设备上都支持的版本。
应用程序能够假设,如果一个平台支持设定的OpenGL ES版本,那么它还会支持所有被设定版本低的OpenGL ES版本,因此,需要OpenGL ES1.0和OpenGL ES2.0的应用程序,必须要指定它所需要的版本时OpenGL ES2.0。
能够用任何版本的OpenGL ES来工作的应用程序,应该仅指定应用所需的最低版本的OpenGL ES。(应用程序能够在运行时检查较高版本的OpenGL ES是否可用。)
uses-permission
<uses-permission
android:name="string"
android:maxSdkVersion="integer" />
这个属性用于给应用程序授予正确的操作的所必须的权限。这些权限是在应用程序安装时被授予的,而不是在运行时授予的。
有关更多的权限信息,请看《AndroidManifest.xml文件详解(三)》文档中“权限”介绍
http://blog.csdn.net/fireofstar/article/details/7543067
和《Android的安全性和权限》http://blog.csdn.net/fireofstar/article/details/7536803
。在android.Manifest.permission类中能够找到由基础平台定义的一个权限列表http://developer.android.com/reference/android/Manifest.permission.html
。
android:name
这个属性用于定义权限的名称。它能够是由该应用程序用
元素定义的一个权限,也可以是由另外一个应用程序所定义的权限,还可以是有系统定义的标准的权限,如:android:permission.CAMERA或android:permission.READ_CONTACTS等。就像例子中所显示的那样,权限名通常要用包名做为前缀,以保证其唯一性。
android:maxSdkVersion
允许安装的最大API版本的系统,如果超出最大允许范围,则应用不授予许可,不可使用相关功能
uses-permission-sdk-23
<uses-permission-sdk-23
android:name="string"
android:maxSdkVersion="integer" />
这个属性用于给应用程序授予正确的操作的所必须的权限,但只在API23及其以上有效
android:name
这个属性用于定义权限的名称。它能够是由该应用程序用
元素定义的一个权限,也可以是由另外一个应用程序所定义的权限,还可以是有系统定义的标准的权限
android:maxSdkVersion
允许安装的最大API版本的系统,如果超出最大允许范围,则应用不授予许可,不可使用相关功能