AndroidManifest.xml简单总结


参考:https://blog.csdn.net/u012486840/article/details/52468931


1. 第一层节点<Manifest>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test"
    android:sharedUserId="com.example.test"
    android:versionCode="1"
    android:versionName="1.0.0.5"
    android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    ></manifest>

<!--定义命名空间,提供Android的标准属性-->
<!--指定APP的包名-->
<!--不同APK有相同sharedUserId的可以共享数据-->
<!--给设备识别的APP版本号,每次更新增加-->
<!--APP版本号 主版本号.次版本号.维护版本号.测试版本号-->
<!--安装位置 1.auto-系统自动选择 2.internalOnly-只能安装在内部存储 3.preferExternal-优先安装在SD卡(SD卡满装内部存储)-->

2.第二层节点<uses-sdk>

<uses-sdk

    android:minSdkVersion="14"

    android:targetSdkVersion="19"

    android:maxSdkVersion="24"    />

<!--支持的最小/目标(在该版本下经过充分测试)/最大(一般省略)Android SDK版本 -->


3.第二层节点<uses-permission>


<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取Android权限 权限列表: http://blog.csdn.net/qq_34057733/article/details/51480259 -->


4.第二层节点<uses-feature>

<uses-feature android:name="android.hardware.camera"
    android:required="true"/>
<!--声明APP需要的(硬件/软件)特征 如拍照功能需要摄像头(一般供应用市场筛选使用) required="true"为必需的特征-->
<!--与uses-configuration类似-->

5.第二层节点<application>

<application  android:allowClearUserData=["true" | "false"]
             android:allowTaskReparenting=["true" | "false"]
             android:backupAgent="string"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:enabled=["true" | "false"]
             android:hasCode=["true" | "false"]
             android:icon="drawable resource"
             android:label="string resource"
             android:name="string"
             android:permission="string"
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:taskAffinity="string"
             android:theme="resource or theme" >
</application>

1.用户是能选择自行清除数据 

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

3.APP的备份,属性值应该是一个完整的类名,如com.project.Test,此属性并没有默认值,并且类名必须得指定(就是个备份工具,将数据备份到云端的操作)

4.当设置为true时,表明该APP在手机上可以被调试。默认为false,在false的情况下调试该APP,就会报以下错误:
Device XXX requires that applications explicitely declare themselves as debuggable in their manifest.
Application XXX does not have the attribute ‘debuggable’ set to TRUE in its manifest and cannot be debugged.

5.向用户索取许可的时候,所展示的文字

6.Android系统是否能够实例化该应用程序的组件,权限大于每个组件上的属性设置

7.为应用程序所实现的Application子类的全名。当应用程序进程开始时,该类在所有应用程序组件之前被实例化。

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

9.应用程序运行的进程名,它的默认值为元素里设置的包名,当然每个组件都可以通过设置该属性来覆盖默认值。如果你想两个应用程序共用一个进程的话,你可以设置他们的android:process相同,但前提条件是他们共享一个用户ID及被赋予了相同证书的时候

10.用来表明应用是否准备尝试恢复所有的备份,甚至该备份是比当前设备上更要新的版本,默认是false

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

12.主题。


6.第三层节点<activity>
<activity android: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="drawable resource"
          android:label="string resource"
          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="resource or theme"
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
</activity>

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配置特定的加载模式,而不是使用默认的加载模式

1.standard(无论如何都创建一个新实例)
2.singleTop栈顶复用模式(启用的activity在栈顶则复用该activity,不然创建一个新的实例)
3.singleTask栈内复用模式(栈中有该activity就复用,并且该activity之上的活动出栈,否则创建一个新的实例)

4.singleInstance全局唯一模式(在一个新的栈内单独存放该activity,再次启动该activity时则复用)


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模式,用户当前首选的方向
behind模式:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
sensor模式:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换
nosensor模式:忽略物理感应器,这样就不会随着用户旋转设备而更改了


10、android:stateNotNeeded

activity被销毁或者成功重启时是否保存状态

11、android:windowSoftInputMode
activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
这个属性能影响两件事情:
【A】当有焦点产生时,软键盘是隐藏还是显示
【B】是否减少活动主窗口大小以便腾出空间放软键盘
各值的含义:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

7.第四层节点<intent-filter>

<intent-filter  android:icon="drawable resource"
               android:label="string resource"
               android:priority="integer" >
      <action 
            android:name
/>
      <category />
      <data />
</intent-filter> 

1.android:priority:有序广播主要是按照声明的优先级别,如A的级别高于B,那么,广播先传给A,再传给B。优先级别就是用设置priority属性来确定,范围是从-1000~1000,数越大优先级别越高

2.action属性
android:name这个属性。常见的android:name值为android.intent.action.MAIN,表明此activity是作为应用程序的入口。

3.category属性
android:name属性。常见的android:name值为android.intent.category.LAUNCHER(决定应用程序是否显示在程序列表里)

<!--常见的action和category: http://blog.csdn.net/gf771115/article/details/7827833-->

详解看Intent

更多详细属性 参考:https://blog.csdn.net/u012486840/article/details/52468931



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值