每个应用的根目录中都必须包含一个 androidmanifest.xml 文件(且文件名精确无误)。 清单文件向 android 系统提供应用的必要信息,系统必须具有这些信息方可运行应用的任何代码。
此外,清单文件还可执行以下操作:
(1)为应用的 java 软件包命名。软件包名称充当应用的唯一标识符。
(2)描述应用的各个组件,包括构成应用的 activity、服务、广播接收器和内容提供程序。它还为实现每个组件的类命名并发布其功能,例如它们可以处理的 intent 消息。这些声明向 android 系统告知有关组件以及可以启动这些组件的条件的信息。
(3)确定托管应用组件的进程。
(4)声明应用必须具备哪些权限才能访问 api 中受保护的部分并与其他应用交互。还声明其他应用与该应用组件交互所需具备的权限
(5)列出 instrumentation 类,这些类可在应用运行时提供分析和其他信息。这些声明只会在应用处于开发阶段时出现在清单中,在应用发布之前将移除。
(6)声明应用所需的最低 android api 级别
(7)列出应用必须链接到的库
以上来自android开发者中心
下面是一个androidmanifest.xml示例:
指定本应用内java主程序包的包名,它也是一个应用进程的默认名称
表明数据权限,因为默认情况下,android给每个apk分配一个唯一的userid,所以是默认禁止不同apk访问共享数据的。若要共享数据,第一可以采用share preference方法,第二种就可以采用shareduserid了,将不同apk的shareduserid都设为一样,则这些apk之间就可以互相共享数据了。
android给每个apk进程分配一个单独的用户空间,其manifest中的userid就是对应一个linux用户(android 系统是基于linux)的.所以不同apk(用户)间互相访问数据默认是禁止的.但是它也提供了2种apk间共享数据的形式:
1. share preference. / content provider
apk可以指定接口和数据给任何其他apk读取. 需要自己实现接口和share的数据.
本文对于这个不做详细解释
2. shared user id
通过shared user id,拥有同一个user id的多个apk可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他apk的数据目录下的数据库和文件.就像访问本程序的数据一样.比如某个公司开发了多个android 程序, 那么可以把数据,图片等资源集中放到apk a中去. 然后这个公司的所有apk都使用同一个user id, 那么所有的资源都可以从apk a中读取.
举个例子:
apk a 和apk b 都是c公司的产品,那么如果用户从apk a中登陆成功.那么打开apk b的时候就不用
再次登陆. 具体实现就是 a和b设置成同一个user id:
在2个apk的androidmanifest.xml 配置user id:
这个”com.c” 就是user id, 然后packagename apk a就是上面的内容, apk b可能
是”com.android.demo.b1” 这个没有限制
这个设定好之后, apk b就可以像打开本地数据库那样 打开apk a中的数据库了.
apk a把登陆信息存放在a的数据目录下面. apk b每次启动的时候读取apk a下面的数据库
判断是否已经登陆:
apk b中的代码:
通过a的package name 就可以得到a的 packagecontext
通过这个context就可以直接打开数据库
一个共享的用户名,它只有在设置了shareduserid属性的前提下才会有意义
是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等。。。
这个名称是给用户看的,你可以将你的app版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等。。。
安装参数,是android2.2中的一个新特性,installlocation有三个值可以选择:internalonly、auto、preferexternal
选择preferexternal,系统会优先考虑将apk安装到sd卡上(当然最终用户可以选择为内部rom存储上,如果sd存储已满,也会安装到内部存储上)
选择auto,系统将会根据存储空间自己去适应
选择internalonly是指必须安装到内部才能运行
(注:需要进行后台类监控的app最好安装在内部,而一些较大的游戏app最好安装在sd卡上。现默认为安装在内部,如果把app安装在sd卡上,首先得设置你的level为8,并且要配置android:installlocation这个参数的属性为preferexternal)