原文:http://android.eoe.cn/topic/android_sdkandroid
是AndroidManifest.xml文件中的根标签,她必须包含一个标签和指定的xmlns:android、 package两个属性。数据库
属性:app
xmlns:android
定义了Android的命名空间。这个属性通常能够设置为:
"http://schemas.android.com/apk/res/android".google
package加密
一个Java语言风格的应用程序包名,这个包名必须惟一。这个包名能够包含大写或小写字母('A'到'Z'、'a'到'z')、数字和下划线('_')。固然个别 包名最好仍是以字母开头比较好。spa
为了不和其余开发人员冲突,你应该使用互联网域名做为你的基础包名(域名的反写)。例如,Google发布的应用程序包名是以com.google开头的,因此你毫不要使用usr.example来发布你的应用程序。xml
包名做为应用程序的惟一标示,同时它也是应用进程(application process)属性的默认名称(详情参考标签的android:process属性),也是activity的任务关联(task affinity)属性的默认值(详情参考标签的taskAffinity属性)。进程
* 注意* :你一旦发布了应用程序,包名就不能修改了。这个包名定义了你的应用程序的身份,因此若是你修改包名,它会被认为是一个彻底不一样的应用程序,从而之前版本的用户没法更新到新的版本。
android:sharedUserId
指定一个Linux用户的ID,这个ID会被其余应用程序所共享。一般状况下,Android会给每一个应用程序分配一个惟一标示他们的ID。然而,若是多个应用程序的android:sharedUserId属性值相同且签署了相同的证书,它们将共享相同的ID。共享相同ID的应用程序能够访问彼此的数据,若是须要的话,还会运行同一个进程中。内存
android:sharedUserLabel
为android:sharedUserId而生的一个用户只读标签,这个标签设值的时候必须引用string资源文件,而不能直接使用string。 ci
这个属性在API Level3里将介绍到。只有android:sharedUserId属性设置的时候android:sharedUserLabel属性才有意义。
android:versionCode
内部版本号。这个数字用来肯定当前版本是否比另外一个版本更新,数字越大版本越新。这个版本号并不会展示给用户,真正展示给用户的版本号是versionName这个属性的值。
这个值必须是整数,好比“100”。你能够任意定义它的值,只要后续版本是更高的数字。例如,它能够是一个编号:x.y这种格式的,你只须要把x和y单独的转化成数字就能够了(能够经过lower and upper 16 bits),或者你你能够在发布新版本的时候简单加1。
android:versionName
这个版本号就是展示给用户的。这个属性能够直接设值或引用string资源文件。这个版本号展示给用户并无别的目的,这个versionCode属性意味着有重大的版本变化。
android:installLocation
应用程序的默认的安装位置。
如下关键字字符串:
<!-- 表格开始 -->
{|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
<!-- 这段是表头 -->
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 关键字
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 描述
<!-- 这段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "internalOnly"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 应用程序会只在内部存储设备上安装。若是设了这个值,这个应用程序就不会在外部存储设备上安装,若是这时候内部存储设备空间满了,系统就不会安装这个应用程序了。若是你不定义android:installLocation属性的话,它的默认值就是internalOnly。
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "auto"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 应用程序能够安装在外部存储设备上,可是系统默认安装在内部存储设备上。不过尽管已经安装完成,用户仍是能够经过系统设置来把应用程序移动到内部存储设备上或者外部存储设备上(移动到SD卡 or 移动到手机内存)。
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "preferExternal"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 应用程序大多会安装到外部存储设备上(SD卡),可是系统并不会保证这个请求会被优先处理。好比说当外部存储设备不可用或者满了或者应用程序使用了forward-locking(不支持外部存车设备的机制)机制,这个时候应用程序就会被安装到内部存储设备上,不过尽管已经安装完成,用户仍是能够经过系统设置来把应用程序移动到内部存储设备上或者外部存储设备上(移动到SD卡 or 移动到手机内存)。
|}
<!-- 表格结束 -->
* 注意:* 若是你使用了Google Play的Copy Protection组件,你的应用程序将不会安装到SD卡上,不过你能够用同是Google Play的Application Licensing来代替,这样你的应用程序就又能够安装无论是内部仍是外部存储设备上,固然包括SD。
* 提示:* 默认状况下,你的应用程序只能安装到内部存储设备上,而不能安装到外部存储设备上,除非你定义了android:installLocation的属性值为auto" or "preferExternal"。
当应用程序安装到外部存储设备上的时候:
* apk安装文件会保存在外部存储设备上,可是与应用程序相关的任何数据(好比数据库)仍然会保存在内部存储设备上。
* 保存apk安装文件的容器(SD卡)会对其进行加密,只容许在当前设备上运行(用户是没有办法直接把SD卡移动到另外一台设备上并进行安装的)。尽管如此,同一个设备仍是能够使用多个SD卡。
* 当用户有需求的时候,应用程序仍是能够移动到内部存储设备(手机内存)上的。
固然用户也会有这样的需求:把应用程序从内部存储设备移动到外部存储设备。可是若是应用程序使用了默认的android:installLocation属性即internalOnly属性,系统是不可以把应用程序从内部存储设备移动到外部存储设备上的。
关于android:installLocation这个属性,详情请参考App Install Location (包括如何处理向后兼容的问题)
参考:API Level 8。
参考:API Level1下的全部属性,在属性描述中单独注明的除外