任何一个Android项目都包含一个AndroidManifest.xml文件,它存储在项目层次中的最底层。Manifest可以定义应用程序及其组件和需求的结构和元数据。
它包含了组成应用程序的每一个Activity、Service、Content Provider和Broadcast Receiver的节点,并且使用Intent Filter和权限来确定这些组件之间以及这些组件和其它应用程序是如何交互的。
Manifest文件还可以指定应用程序的元数据(如它的图标、版本号或者主题)以及额外的顶层几点,这些节点可用来指定必须的安全权限和单元测试,以及定义硬件、屏幕和平台支持要求。
Manifest文件由一个根manifest标签构成,改标签带有一个被设为项目包的package属性。它通常包含一个xmlns:android属性来提供文件内使用的某些系统属性。
使用versionCode属性可将当前的应用程序版本定义为一个整数,每次版本迭代时候,这个数字都会增加。使用versionName可定义一个现实给用户的公共版本号
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.horizontalscrollmenusample"
android:versionCode="1" //内部版本号,用于版本迭代
android:versionName="1.0" //呈现给用户的功用版本号
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
[ ... ...]
</manifest>
internalOnly:默认值.当设置为该值时,程序只能被安装在内存中,如果内存为空,则程序将不能成功安装.
auto:程序可能被安装在外部存储介质上(例如:SD Card),但是默认会被安装到手机内存中.当手机内存为空时,程序将被安装到外部存储介质上.当程序安装到手机上后,用户可以决定把程序放在外部储介质还是内存中.
preferExternal:将程序安装在外部存储介质上,但是系统不保证程序一定会被安装到外部存储介质上.当外部存储介质不可以或空时,程序将被安装到内存中.程序使用了forward-locking机制时也将被安装到内存中,因为外部存储不支持此机制.程序安装后,用户可以自由切换程序应该在外部还是内部存储介质上.
注意:当程序使用了Google Play的Copy Protection特性时,只能安装到内存中.当程序被安装到外部存储介质时,① .apk文件将被移动到外部存储介质上,但是程序的数据仍然会在内存中② 保存.apk文件的容器将会使用一个随机生成的密钥进行加密,这样只有安装该程序的设置可以使用存在外部存储介质上的数据.警告:当外部存储介质被卸载时,安装在该外部存储介质上的程序将立刻被终止掉!
通过使用installLocation属性,可以指定是否允许(或者首选)将应用程序安装到外部存储器(通常指SD卡)而不是内部存储器上面。为此,可以讲起值指定为preferExternal或auto,使用前者时,只要有可能就会把应用程序安装到外部存储器上,后者则要求系统决定。
如果不指定installLocation属性,应用程序将安转挂到内部存储器,而用户将无法把应用程序移动到外部存储器。内部存储器的容量一版是有限的,所以最好是只要有可能,就把应用程序安装到外部存储器。
由于取出或者拒绝外部存储器存在的问题,安装到外部存储器对一些应用程序来说并不适合,这些应用程序包括:
1)具有Widget、Live Wallpager和Live Folder的应用程序 Widget、Live Wallpager和Live Folder将从主屏上一处,而且在
重启前可能不在可用
2)提供不中断服务的应用程序 应用程序和他运行的服务将被停止,并且不会自动重新启动
3)输入法引擎(Input Method Engine: IME) 安装到外部存储器的任何IME都会被禁用。在外部存储器再次可用后,用户必须重
新选择IME
4)设备管理器 DeviceAdminReceiver及其管理能力将被禁用