AndroidManifest.xml详解

AndroidManifest.xml

​ Android应用的入口文件,它描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置

结构图

<?xml version="1.0"encoding="utf-8"?>
<manifest>

    <uses-sdk/> 
    <uses-configuration/> 
    <uses-feature/>  

    <uses-permission/>
    <permission/>
    <permission-tree/>
    <permission-group/>
    <instrumentation/> 

    <supports-screens/>

    <application> 
       <activity> 
           <intent-filter>
               <action/> 
               <category/> 
           </intent-filter> 
      </activity>
       <activity-alias> 
           <intent-filter></intent-filter> 
           <meta-data/> 
      </activity-alias> 
       <service> 
           <intent-filter></intent-filter> 
           <meta-data/> 
       </service>
       <receiver>
           <intent-filter></intent-filter> 
           <meta-data/> 
       </receiver> 
       <provider> 
           <grant-uri-permission/>
           <meta-data/> 
       </provider> 
       <uses-library/> 
    </application>  

</manifest>

Manifest属性

<manifest  
    xmlns:android="http://schemas.android.com/apk/res/android"
	package="com.th"
	android:sharedUserId="string"
	android:sharedUserLabel="string resource"
	android:versionCode="integer"
	android:versionName="string"
	android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
</manifest>
属性解析
xmlns:android定义android命名空间,以上固定写法,使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据
package包名,应用进程的默认名称
sharedUserId表明数据权限。默认情况下,每个APK有自己唯一一个UserID,放置相互访问数据。如设置一致,则可共享数据。(使用Share Preference等方法也可以)
sharedUserLabel共享的用户名,需先设置sharedUserId属性
versionCodeapp更新次数
versionName用户可查,如1.0,1.1等
installLocation安装参数,Android 2.2新增。包含三个属性:internalOnly、auto、preferExternal
preferExternal:优先考虑将APK安装到SD卡上,最终决定权在用户
auto:系统自动判断
internalOnly:必须安装到内部内存中

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:killAfterRestore=["true" | "false"]
	android:label="string resource"
	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="resource or theme" >
</application>
属性解析
allowClearUserData用户是否能选择自行清除数据,默认true(在应用详情中的“清除数据”按钮)
allowTaskReparenting是否允许activity更换从属的任务,如从短信息任务切换到浏览器任务
backupAgentAndroid2.2新特性,设置该APP的备份,一般设置为类名。不设置时,不备份
debuggable是否可被调试,默认false。如设置为false的情况下进行调试会报错:
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.
description\label许可相关,label为许可列表,description为许可详细信息
enabledAndroid系统是否能够实例化该应用程序的组件。true:每个组件的enabled属性决定那个组件是否可以被实例化。false:所有组件均不能实例化
hasCode是否加载java代码。Android2.3后可用标准C来开发APP
iconAPP的图标
killAfterRestore
manageSpaceActivity
name注册自定义类继承Application类。如该自定义类在package下,则直接声明,如:android:name=”MyApplication”。
否则使用全路径,如:android:name=”package名称.子包名.MyApplication”
permission设置各组件默认许可名,因此可以被各组件设置的许可名所覆盖
presistent设置是否一直保持运行状态,默认false。
process进程名,如不设置,则默认包名。
在两个或多个应用程序共享一个用户ID及被赋予了相同证书的时候可以设置相同的进程名。
可以被各组件设置的进程名所覆盖
restoreAnyVersionandroid2.2新特性,是否准备尝试恢复所有的备份,默认false
taskAffinity拥有相同的affinity的Activity理论上属于相同的Task。具体见Activity的加载原理
theme默认的主题风格,各Activity可覆盖

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>
属性解析
alwaysRetainTaskState是否保留状态不变,如切换回home
clearTaskOnLaunchc重新回到Activity中时,是否显示跳转过程。如:ActivityA启动ActivityB后,回到home,再回到ActivityB,是否显示ActivityA跳转到ActviityB的过程
configChanges当配置list发生修改时, 调用onConfigurationChanged()
excludeFromRecents是否可被显示在最近打开的activity列表里,默认false
finishOnTaskLaunch重启任务时,是否显示已打开的Activity,默认false。与allowTaskReparenting配合使用
launchMode加载模式
multiprocess是否允许多进程,默认false
noHistoryActivity不可见时,是否从Activity stack中清除并结束,默认false
screenOrientation屏幕显示模式。unspecified:系统自动判断


landscape:横屏
portrait:竖屏
user:用户当前首选的方向
behind:与跳转的Activity一致
sensor:由物理的感应器决定
nosensor:忽略物理感应器 |
| stateNotNeeded | activity被销毁或者成功重启时是否保存状态 |
| windowSoftInputMode | 软键盘交互模式,Android1.5新特性
stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置

stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
stateHidden:用户选择activity时,软键盘总是被隐藏
stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
stateVisible:软键盘通常是可见的
stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分 |

intent-filter 属性

<intent-filter 
	android:icon="drawable resource"
	android:label="string resource"
	android:priority="integer" >

	<action />

	<category />

	<data />

</intent-filter> 
属性解析
priority优先级,-1000~1000
actionandroid.intent.action.MAIN:程序入口。
action值:http://hi.baidu.com/linghtway/blog/item/83713cc1c2d053170ff477a7.html>
categoryandroid.intent.category.LAUNCHER:应用程序是否显示在程序列表里)
取值:http://chroya.javaeye.com/blog/685871

meta-data属性

<meta-data android:name="string"
           android:resource="resource specification"
           android:value="string"/>
属性解析
name元数据项名字,保证唯一性,通常使用包名
resource资源的一个引用,指定给这个项的值是该资源的id。该id值可通过Bundle.getInt()获取到
value可通过bundle获取

activity-alias属性

​ 快捷方式相关属性

<activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string">

	<intent-filter/> 
	<meta-data/>
</activity-alias>
<activity-alias 
	android:name=".CreateShortcuts" 				
	android:targetActivity=".ShortcutActivity" 		//点击快捷方式,跳转的目标页面				
	android:label="@string/shortcut">				//快捷方式名称

    <intent-filter>
		<action android:name="android.intent.action.CREATE_SHORTCUT" />
		<category android:name="android.intent.category.DEFAULT" />
     </intent-filter>

 </activity-alias>

Service属性

<service android:enabled=["true" | "false"]
         android:exported[="true" | "false"]
         android:icon="drawable resource"
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string">
</service>

Receiver属性

​ 与service一样

Provider属性

<provider android:authorities="包名.标识"				//标识,一般为包名.标识
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]	//对某个URI授予权限
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string">
           <grant-uri-permission/>
           <meta-data/>
</provider>

uses-library属性

​ 用户库,可自定义。所有android的包都可以引用

supports-screens属性

​ android1.6新特性,支持多屏幕机制,以下属性分别为是否支持大屏,中屏,小屏,多种不同密度

<supports-screens  android:smallScreens=["true" | "false"] 
                  android:normalScreens=["true" | "false"] 
                  android:largeScreens=["true" | "false"] 
                  android:anyDensity=["true" | "false"] />

uses-configuration\uses-feature属性

​ 描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装

<uses-configuration  android:reqFiveWayNav=["true" | "false"] 
                    android:reqHardKeyboard=["true" | "false"]
                    android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" |   "twelvekey"]
                    android:reqNavigation=["undefined" | "nonav" | "dpad" |  "trackball" | "wheel"]
                    android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />

<uses-feature android:glEsVersion="integer"
              android:name="string"
              android:required=["true" | "false"] />

uses-sdk属性

<uses-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer"/>

instrumentation属性

​ 用于探测和分析应用性能等等相关的类,可以监控程序。初始化优于其他组件

<instrumentation android:functionalTest=["true" | "false"]
                 android:handleProfiling=["true" | "false"]
                 android:icon="drawable resource"
                 android:label="string resource"
                 android:name="string"
                 android:targetPackage="string"/>

permission\uses-permission\permission-tree\permission-group属性

待更新

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值