AndroidManifest.xml文件详解(manifest)
语法(SYNTAX):
<manifestxmlns: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>
被包含于(CONTAINED IN):
无
必须包含的元素(MUST CONTAIN):
<application>
可能包含的元素(CAN CONTAIN):
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<uses-configuration>
<uses-permission>
<uses-sdk>
说明(DESCRIPTION):
这个元素是AndroidManifest.xml文件的根元素。它必须包含一个<application>元素,并且必须要指定xmlns:android和package属性。
属性(ATTRIBUTES):
xmlns:android
这个属性用于定义Android的命名空间。始终应该设置为:http://schemas.android.com/apk/android。
package
这个属性给应用程序定义了一个完整的Java样式的包名。这个名称应该是唯一的。名称中可以包含大写或小写字母、数字以及下划线(‘_’)。但是包名的每段都只能用字母开始。
应该使用所拥有的互联网域名作为基本的包名,以避免与其他开发者的冲突。例如,由Google发布的应用程序的包名都用com.google开始。在发布应用程序时永远不要使用com.example命名空间。
包名用于唯一的标识应用程序。它还是应用程序进程的默认名称(看<application>元素的process属性)和Activity的默认亲缘任务(请看<activity>元素的taskAffinity属性)。
警告:应用程序一旦发布,就不能够改变它的包名称了。包名定义了应用程序的标识,因此如果改变它,那么它就会被认为是不同的应用程序,并且之前版本的用户就不能够把应用升级到新版本。
android:sharedUserId
这个属性定义了一个Linux用户ID的名称,这个名称能够跟其他应用程序共享。默认情况下,Android会给它的每个应用程序都分配一个唯一的用户ID。但是,如果有两个或更多的应用程序把这个属性都设置了相同的值,那么它们将共享这个相同的ID---具有相同的数字签名。拥有相同用户ID的应用程序能够访问彼此的数据,并且如果期望,它们也可运行在相同的进程中。
android:sharedUserLabel
这个属性给共享的用户ID定义了一个用户可读的标签。这个标签必须用字符串资源来设置,不能使用原生的字符串。
这个属性在API Level 3中被引入,只有在sharedUserId属性被设置,这个属性才有意义。
android:versionCode
这个属性定义一个内部版本号,它仅用于判断一个版本是否比另一个版本新,数字越大表明版本越新。这个版本号不显示给用户,显示给用户的版本号要用versionName属性设置。
它的属性值必须是一个整数,如100。你可以按照自己的想法来定义它,只要保持后续版本号的数字更大。例如,它可以是一个版本号;也可以把x.y格式中的版本数字转换成一个由x和y分别编码的16位整数,x在低8位,y在高8位;也可以在每次发布版本时简单的增加数字的大小。
android:versionName
这个属性用于设置一个显示给永的版本号。属性值可以是原生的字符串,也可以引用一个字符串资源。这个字符串除了显示给用户之外,没有其他用途。而versionCode属性却拥有内部使用的版本号。
android:installLocation
这个属性用于设置应用程序默认的安装位置。
用下表中的关键词来设置属性值。
值 | 说明 |
internalOnly | 应用程序必须只被安装在内部设备存储器上。如果设置这个值,应用程序永远不会被安装在外部存储器上。如果内部存储空间不足,那么系统不会安装这个应用程序。如果没有定义android:installLocation属性,就会使用这个值作为默认值。 |
auto | 应用程序可以安装在外部存储器上,但是,默认情况下,系统会把应用程序安装在内部存储器上。如果内部存储空间不足,那么系统会把应用程序安装在外部存储器上。一旦安装,用户能够通过系统设置在内外存储器之间来移动应用程序。 |
preferExternal | 应用程序偏好安装在外部存储器上(SD卡)。系统并不保证恪守这一个规则。如果外部存储器不可用或空间不足,或者应用程序使用了forward-locking机制(这种机制不支持外部存储),那么应用程序就可以安装在内部存储器上。一旦安装,用户能够通过系统设置在内外存储器之间移动应用程序。 |
警告:如果应用程序使用的Google Play的复制保护功能,那么它就不能被安装在设备的SD卡上。但是,如果使用Google Play的应用程序许可,那么它就能够被安装在内部或外部存储器上,包括SD卡。
注意:默认情况下,应用程序会被安装在内部存储器上,除非把这个属性值定义为auto或preferExternal,应用程序才能够被安装在外部存储器上。
当应用程序被安装在外部存储器上的时候:
1. .apk文件被保存在外部存储器上,但是任何应用程序数据(如数据库)依然被保存在内部设备存储器上;
2. 用一个key把存储器中保存的.apk文件加密,只允许应用程序在安装它的设备上运行。用户不能把安装在SD卡上应用程序转移到另一个设备的SD卡上,虽然在一个设备上能够使用多个SD卡。
3. 在用户要求的时候,应用程序能够被转移到内部存储器上。
用户也可以要求把应用程序从内部存储器移动到外部存储器上。但是,如果这个属性被设置为internalOnly,那么系统不允许用户把应用程序转移到外部存储器上。
这个属性在API Level 8中被引入。
被引入的版本(INTRODUCED IN):
除非属性说明中注释了引入的API Level版本,否则都是在API Level 1中引入的。
摘自 FireOfStar的专栏
补充:移动开发 , Android ,