AndroidManifestxml解析二.docx

上传人:b****6 文档编号:7804201 上传时间:2023-01-26 格式:DOCX 页数:16 大小:35.27KB
下载 相关 举报
AndroidManifestxml解析二.docx_第1页
第1页 / 共16页
AndroidManifestxml解析二.docx_第2页
第2页 / 共16页
AndroidManifestxml解析二.docx_第3页
第3页 / 共16页
AndroidManifestxml解析二.docx_第4页
第4页 / 共16页
AndroidManifestxml解析二.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

AndroidManifestxml解析二.docx

《AndroidManifestxml解析二.docx》由会员分享,可在线阅读,更多相关《AndroidManifestxml解析二.docx(16页珍藏版)》请在冰豆网上搜索。

AndroidManifestxml解析二.docx

AndroidManifestxml解析二

一、关于AndroidManifest.xml

AndroidManifest.xml 是每个android程序中必须的文件。

它位于整个项目的根目录,描述了package中暴露的组件(activities,services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。

 除了能声明程序中的Activities,ContentProviders,Services, 和IntentReceivers,还能指定permissions和instrumentation(安全控制和测试)

二、AndroidManifest.xml结构

xmlversion="1.0"encoding="utf-8"?

>

    

     

           

               

               

           

    

       

           

           

    

       

           

           

       

       

           

           

       

       

           

           

       

       

    

    

   

    

    

    

    

      

      

     

 

三、各个节点的详细介绍

上面就是整个am(androidManifest).xml的结构,下面以外向内开始阐述~~

1、第一层():

(属性)

android="

     package="com.woody.test"

     android:

sharedUserId="string"

     android:

sharedUserLabel="stringresource"

     android:

versionCode="integer"

     android:

versionName="string"

     android:

installLocation=["auto"|"internalOnly"|"preferExternal"]>

A、xmlns:

android

定义android命名空间,一般为

B、package

指定本应用内java主程序包的包名,它也是一个应用进程的默认名称

C、sharedUserId

表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。

若要共享数据,第一可以采用SharePreference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。

详见:

 

D、sharedUserLabel

一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义

E、versionCode

是给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次,比如第一版一般为1,之后若要更新版本就设置为2,3等等。

F、versionName

这个名称是给用户看的,你可以将你的APP版本号设置为1.1版,后续更新版本设置为1.2、2.0版本等等。

G、installLocation

安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:

internalOnly、auto、preferExternal

选择preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上)

选择auto,系统将会根据存储空间自己去适应

选择internalOnly是指必须安装到内部才能运行

(注:

需要进行后台类监控的APP最好安装在内部,而一些较大的游戏APP最好安装在SD卡上。

现默认为安装在内部,如果把APP安装在SD卡上,首先得设置你的level为8,并且要配置android:

installLocation这个参数的属性为preferExternal)

2、第二层():

属性

一个AndroidManifest.xml中必须含有一个Application标签,这个标签声明了每一个应用程序的组件及其属性(如icon,label,permission等)

allowClearUserData=["true"|"false"]

       android:

allowTaskReparenting=["true"|"false"]

       android:

backupAgent="string"

       android:

debuggable=["true"|"false"]

       android:

description="stringresource"

       android:

enabled=["true"|"false"]

       android:

hasCode=["true"|"false"]

       android:

icon="drawableresource"

       android:

killAfterRestore=["true"|"false"]

       android:

label="stringresource"

       android:

manageSpaceActivity="string"

       android:

name="string"

       android:

permission="string"

       android:

persistent=["true"|"false"]

       android:

process="string"

       android:

restoreAnyVersion=["true"|"false"]

       android:

taskAffinity="string"

       android:

theme="resourceortheme">

A、android:

allowClearUserData('true'or'false')

用户是否能选择自行清除数据,默认为true,程序管理器包含一个选择允许用户清除数据。

当为true时,用户可自己清理用户数据,反之亦然

B、android:

allowTaskReparenting('true'or'false')

是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务

C、android:

backupAgent

这也是Android2.2中的一个新特性,设置该APP的备份,属性值应该是一个完整的类名,如com.project.TestCase,此属性并没有默认值,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作)

D、android:

debuggable

这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。

默认为false,在false的情况下调试该APP,就会报以下错误:

DeviceXXXrequiresthatapplicationsexplicitelydeclarethemselvesasdebuggableintheirmanifest.

ApplicationXXX doesnothavetheattribute'debuggable'settoTRUEinitsmanifestandcannotbedebugged.

E、android:

description/android:

label

此两个属性都是为许可提供的,均为字符串资源,当用户去看许可列表(android:

label)或者某个许可的详细信息(android:

description)时,这些字符串资源就可以显示给用户。

label应当尽量简短,之需要告知用户该许可是在保护什么功能就行。

而description可以用于具体描述获取该许可的程序可以做哪些事情,实际上让用户可以知道如果他们同意程序获取该权限的话,该程序可以做什么。

我们通常用两句话来描述许可,第一句描述该许可,第二句警告用户如果批准该权限会可能有什么不好的事情发生

F、android:

enabled

Android系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被enabled。

如果为false,它覆盖组件指定的值;所有组件都是disabled。

G、android:

hasCode('true'or'false')

表示此APP是否包含任何的代码,默认为true,若为false,则系统在运行组件时,不会去尝试加载任何的APP代码

一个应用程序自身不会含有任何的代码,除非内置组件类,比如Activity类,此类使用了AliasActivity类,当然这是个罕见的现象

(在Android2.3可以用标准C来开发应用程序,可在androidManifest.xml中将此属性设置为false,因为这个APP本身已经不含有任何的JAVA代码了)

 

H、android:

icon

这个很简单,就是声明整个APP的图标,图片一般都放在drawable文件夹下

 

I、android:

killAfterRestore

 

J、android:

manageSpaceActivity

 

K、android:

name

为应用程序所实现的Application子类的全名。

当应用程序进程开始时,该类在所有应用程序组件之前被实例化。

 

若该类(比方androidMain类)是在声明的package下,则可以直接声明android:

name="androidMain",但此类是在package下面的子包的话,就必须声明为全路径或android:

name="package名称.子包名成.androidMain"

 

L、android:

permission

设置许可名,这个属性若在上定义的话,是一个给应用程序的所有组件设置许可的便捷方式,当然它是被各组件设置的许可名所覆盖的

 

M、android:

presistent

该应用程序是否应该在任何时候都保持运行状态,默认为false。

因为应用程序通常不应该设置本标识,持续模式仅仅应该设置给某些系统应用程序才是有意义的。

 

 

N、android:

process

应用程序运行的进程名,它的默认值为元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。

如果你想两个应用程序共用一个进程的话,你可以设置他们的android:

process相同,但前提条件是他们共享一个用户ID及被赋予了相同证书的时候

 

O、android:

restoreAnyVersion

同样也是android2.2的一个新特性,用来表明应用是否准备尝试恢复所有的备份,甚至该备份是比当前设备上更要新的版本,默认是false

 

P、android:

taskAffinity 

拥有相同的affinity的Activity理论上属于相同的Task,应用程序默认的affinity的名字是元素中设定的package名

Q、android:

theme

是一个资源的风格,它定义了一个默认的主题风格给所有的activity,当然也可以在自己的theme里面去设置它,有点类似style。

(注:

有关于theme资源的网址,请参见:

http:

//www.android-theme.org/

3、第三层():

属性

allowTaskReparenting=["true"|"false"]

     android:

alwaysRetainTaskState=["true"|"false"]

     android:

clearTaskOnLaunch=["true"|"false"]

     android:

configChanges=["mcc","mnc","locale",

                 "touchscreen","keyboard","keyboardHidden",

                 "navigation","orientation","screenLayout",

                 "fontScale","uiMode"]

     android:

enabled=["true"|"false"]

     android:

excludeFromRecents=["true"|"false"]

     android:

exported=["true"|"false"]

     android:

finishOnTaskLaunch=["true"|"false"]

     android:

icon="drawableresource"

     android:

label="stringresource"

     android:

launchMode=["multiple"|"singleTop"|

               "singleTask"|"singleInstance"]

     android:

multiprocess=["true"|"false"]

     android:

name="string"

     android:

noHistory=["true"|"false"] 

     android:

permission="string"

     android:

process="string"

     android:

screenOrientation=["unspecified"|"user"|"behind"|

                   "landscape"|"portrait"|

                   "sensor"|"nosensor"]

     android:

stateNotNeeded=["true"|"false"]

     android:

taskAffinity="string"

     android:

theme="resourceortheme"

     android:

windowSoftInputMode=["stateUnspecified",

                    "stateUnchanged","stateHidden",

                    "stateAlwaysHidden","stateVisible",

                    "stateAlwaysVisible","adjustUnspecified",

                    "adjustResize","adjustPan"]> 

(注:

有些在application中重复的就不多阐述了)

1、android:

alwaysRetainTaskState

 是否保留状态不变,比如切换回home,再从新打开,activity处于最后的状态。

比如一个浏览器拥有很多状态(当打开了多个TAB的时候),用户并不希望丢失这些状态时,此时可将此属性设置为true

 

2、android:

clearTaskOnLaunch 

比如P是activity,Q是被P触发的activity,然后返回Home,重新启动P,是否显示Q

 

3、android:

configChanges

当配置list发生修改时,是否调用onConfigurationChanged()方法  比如"locale|navigation|orientation". 

这个我用过,主要用来看手机方向改变的.android手机在旋转后,layout会重新布局,如何做到呢?

正常情况下.如果手机旋转了.当前Activity后杀掉,然后根据方向重新加载这个Activity.就会从onCreate开始重新加载.

如果你设置了这个选项,当手机旋转后,当前Activity之后调用onConfigurationChanged()方法.而不跑onCreate方法等.

 

4、android:

excludeFromRecents

是否可被显示在最近打开的activity列表里,默认是false

 

5、android:

finishOnTaskLaunch

当用户重新启动这个任务的时候,是否关闭已打开的activity,默认是false

如果这个属性和allowTaskReparenting都是true,这个属性就是王牌。

Activity的亲和力将被忽略。

该Activity已经被摧毁并非re-parented

6、android:

launchMode(Activity加载模式)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。

可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。

这需要为Activity配置特定的加载模式,而不是使用默认的加载模式

Activity有四种加载模式:

standard、singleTop、singleTask、singleInstance(其中前两个是一组、后两个是一组),默认为standard

standard:

就是intent将发送给新的实例,所以每次跳转都会生成新的activity。

singleTop:

也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例

singleTask:

和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。

如果有直接将intent发送给它。

singleInstance:

首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。

比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。

那如果在多个task中共享一个Activity的话怎么办呢。

举个例来说,如果开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时,显示的就是刚才的地图,实际上是同一个Activity,实际上这就引入了singleInstance。

singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中只有这一个Activity,不同应用的intent都由这个Activity接收和展示,这样就做到了共享。

当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键,如果按下了返回键,则无效

 

7、android:

multiprocess

是否允许多进程,默认是false

具体可看该篇文章:

http:

//www.bangchui.org/simple/?

t3181.html

 

8、android:

noHistory

当用户从Activity上离开并且它在屏幕上不再可见时,Activity是否从Activity stack中清除并结束。

默认是false。

Activity不会留下历史痕迹

 

9、android:

screenOrientation 

activity显示的模式

默认为unspecified:

由系统自动判断显示方向

landscape横屏模式,宽度比高度大

portrait竖屏模式,高度比宽度大

user模式,用户当前首选

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1