首页 > Android基础知识之Manifest文件的组织结构

Android基础知识之Manifest文件的组织结构

原文:http://android.eoe.cn/topic/android_sdk

是AndroidManifest.xml文件中的根标签,她必须包含一个标签和指定的xmlns:android、 package两个属性。

属性:

xmlns:android

定义了Android的命名空间。这个属性一般可以设置为:

"http://schemas.android.com/apk/res/android".

package

一个Java语言风格的应用程序包名,这个包名必须唯一。这个包名可以包含大写或小写字母('A'到'Z'、'a'到'z')、数字和下划线('_')。当然个别 包名最好还是以字母开头比较好。

为了避免和其他开发人员冲突,你应该使用互联网域名作为你的基础包名(域名的反写)。例如,Google发布的应用程序包名是以com.google开头的,所以你绝不要使用usr.example来发布你的应用程序。

包名作为应用程序的唯一标示,同时它也是应用进程(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。  

这个属性在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下的所有属性,在属性描述中单独注明的除外

转载于:https://www.cnblogs.com/vus520/p/3152718.html

更多相关:

  • MQ MQ传递主干, 在世界屡获殊荣。 它帮您搭建企业服务总线(ESB)的基础传输层。IBM WebSphere MQ为SOA提供可靠的消息传递。它为经过验证的消息传递主干, 全方位、 多用途的数据传输, 并帮助您搭建企业服务总线的传输基础设施。 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针...

  • 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName -获取模块的完整路径。 2.System.Environment.CurrentDirectory -获取和设置当前目录(该进程从中启动的目录)的完全限定目录。 3.System.IO.Dire...

  •       上篇介绍了应用程序从源码到安装包的整个过程,考虑到篇幅过长,遂将原理内容分成两部分来介绍。接下来,在本篇中,主要介绍Android平台应用程序的运行原理。       在阅读了SDK文档中“Application Fundamentals”一篇的内容后,根据自己的理解绘制了下面的示意图:       每个应用程序安装后,...

  • 一、代码结构概览1.核心部分configs:储存各种网络的yaml配置文件datasets:存放数据集的地方detectron2:运行代码的核心组件tools:提供了运行代码的入口以及一切可视化的代码文件。2.Tutorial部分demo:显而易见就是demodocs: 同样显而易见。。tests:提供了一些测试代码projects:...

  •     我刚刚接手这个项目的时候就被一系列不知所措的文件命名给深深的震惊了,那种振聋发聩不亚于听到赌王离世的消息。 首先请看,文件本来是用于处理“请假审批”,但是文件名居然叫做“teaApprove”,不要欺负我的初中英语不好,这个teaApprove我第一个感觉就是和“喝茶、茶叶”有关的业务,可是和我们这个项目八竿子打不着...

  • 这个问题简单,不做过多描述,如题所述,如果因为这个导致错误,请安装 npm install stylus-loader css-loader style-loader -D...

  • 使用这个宏TS_VERSION_MAOR来判断,这个宏定义在编译时生成在apidefs.h,它包含在ts/ts.h中,所以请在插件这包含...

  • linux valgrind Memcheck–内存检查工具 使用方法: 注意,这里要用debug版本,如果是release的运行文件,则用debug编译出来的可执行文件替换 输出到终端: valgrind --tool=memcheck --leak-check=full ./test.out 输出到文件: valgri...