Android清单⽂件详解(⼀)----⼀切从manifest开始
英语翻译机
在l⽂件中,⾸先看到是的<manifest>节点,它是整个应⽤程序的基本属性,涵盖了默认进程名字,应⽤程序标识,安装位置,对系统的要求以及应⽤程序的版本等。它是l⽂件的根节点,其中必须包含⼀个<application>节点,并且必须指定xmlns:android和package属性,其语法如下⾯的代码所⽰:
saks
<manifest xmlns:android="/apk/res/android"
package="string"
android:sharedUrId="string"
android:sharedUrLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto"|"internalOnly"|"preferExternal"]>
.
小学英语视频............
</manifest>
需要注意的是,在上⾯的描述的众多属性中,除了xmlns和package节点外,其余都是可选节点,Android为它们提供了默认值。接下来,我们就来详细的说明<manifest>节点中这些属性的含义及其作⽤。
scandinavian
这个属性定义了这个XML⽂件所使⽤的命名空间。如果需要指定特殊的命名空间,就需要⼿动编写代码,基本格式如下:
2013北京中考英语xmlns:<;命名空间标识>="/apk/res/<;完整的包名>"
注意:代码中的<>部分必须填写的部分,千万不可遗漏!
我们就从万能的HelloWorld开始讲解,打开最新的android开发⼯具android studio,创建⼀个名为HelloWorld的项⽬,项⽬会⾃动⽣成l⽂件,我们来看看它的结构。
如果“标识”不匹配,产⽣的结果如下图所⽰:
错误提⽰:
“资源所在包名“是⼀个必须存在的Java包名,如果不存在,同样也会出错。zipcode
看到了以上图解,⼤家明⽩了吧!标识和资源包名等⼀定要统⼀,不能随性⽽写,否则⽆论怎么折腾都只能原地踏步了。切记!
2.package属性——应⽤程序的⾝份证
training是什么意思
package属性唯⼀标识了⼀个应⽤程序。注意,它是唯⼀的!同样,它也是应⽤程序进程的默认名字以及应⽤程序中每个Activity的默认任务(taskAffinity)。通常情况下,当我们完成创建的时候,它就有了默认值。那么,这些默认的名字到底从哪⾥来的呢?如下图:
运⾏此程序,此时Android设备就会为这个应⽤启动⼀个这样的进程,如下图:
看清楚了吗?说到这⾥,你可能会冒出⼀个想法:要是我安装另⼀个有相同package属性的应⽤程序,会有什么事情发⽣呢?会提⽰如下错误:
Failure[INSTALL_FAILED_ALREADY_EXSIST]
adultery注意:除⾮特殊需要,否则不建议修改package属性的值!原因是package是唯⼀标识了我们应⽤程序的属性,如果你试图改变它的值,那么系统通常会认为这是⼀个不同的应⽤程序,会导致拥有前⼀版本应⽤程序的⽤户⽆法拥有新版本的应⽤程序。
3.android:sharedUrId属性——共享数据
pneumonia该属性定义了需要和其他应⽤程序共享的Linux⽤户ID。默认情况下,Android系统为每⼀个应⽤程序分配⼀个唯⼀的⽤户ID。然⽽,当这个属性在多个应⽤程序中被设置为相同值的时候,它们将共享⼀个⽤户ID。这样做的好处是,它们之间可以相互访问彼此的数据,如有需要,它们还将在相同的进程中运⾏。Helloworld应⽤并没有设置这个属性,这就意味着它没有和别的应⽤程序存在共享关系,这样它们 之间就需要通过其他⼿段(如进程间通信)实现数据互访。
与android:sharedUrId属性相关的属性还有android:sharedUrLabel,这个属性给共享的⽤户ID定义了⼀个⽤户可读的标签。这个标签必须⽤字符串资源来设置,不能使⽤原⽣的字符串。这个属性在API LEVEL3中引⽤,只有设置了sharedUrId属性时才有意义。
4.android:versionCode属性——内部版本号
android:versionCode属性的值是⼀个内部版本号,⽤于确定这个版本是否⽐另⼀个版本更新,数字越
⼤表明它就越新。它不是显⽰给⽤户看的版本号,⽽是由versionName属性设置的号码。版本号将决定⼀些服务的⾏为,⽐如替换应⽤程序时是否执⾏备份还原操作等。
该号码必须设为整数,如100。此外,我们可以随⼼所欲地定义这个整数,只要每个继任的版本能有⼀个更⼤的数字即可。例如,它可以是⼀个编译号码。
5.android:versionName属性——显⽰给⽤户的版本号
android:versionName属性的值是显⽰给⽤户的版本号,它可以被设置为⼀个原始字符串或者⼀个字符串资源的引⽤。这个字符串除了要显⽰给⽤户外,没有其他的⽬的。在HelloWorld中,显⽰给⽤户的版本号为1.0,如下图:
6.android:installLocation属性——安装位置
拥挤的英文单词该属性定义了应⽤程序默认的安装位置,共有3个可选值,其形式如下:
android:installLocation=["auto"|"internalOnly"|"preferExternal"]
下表说明了这3个可选值的含义。
值描述
auto 应⽤程序可能被安装到外部存储设备中,但默认情况下系统将会把应⽤程序安装到内部存储设备中。如果内存不⾜,那么系统将会把应⽤程序安装到外部存储设备中。
internalOnly 应⽤程序必须安装到设备的内部存储设备中。如果设置了这个值,那意味着应⽤程序将永远不会安装到外部存储设备中去。如果内存不⾜,那么系统将不会安装这个APK。在没有设置android:installLocation属性的情况下,internalOnly是该属性的默认值。
preferExternal 应⽤程序将会被安装到外部存储设备中,如果系统不⽀持外部存储设备或者外部设备已满,那么系统将会把这个应⽤程序安装到内部存储设备中。