AndroidManifest.xml文件详解

来源:互联网 发布:重庆知行科技学校 编辑:程序博客网 时间:2024/05/26 05:53

声明:今天在网上看到这个博客,感觉很有用就转载了。
为了不产生误会把博主的地址贴上 http://blog.csdn.net/lfx_xianxian/article/details/51066792

一、AndroidManifest.xml结构

1:<?xmlversion="1.0"encoding="utf-8"?>

2: <manifest>  

3: <uses-sdkandroid:minSdkVersion="21" />  

4: <uses-permission/>

5:<original-packageandroid:name="com.android.settings" />

6:<uses-libraryandroid:name="xxx.xxx.xxx"/>

7:<application>

8:<activity>

9:<intent-filter>

10:<action/>

11:<category/>

12:</intent-filter> 

13:</activity>

14:<activity-alias> 

15:<intent-filter></intent-filter>

16:<meta-data/>  

17:</activity-alias> 

18:<service>  

19:<intent-filter></intent-filter>  

20:<meta-data/> 

21:</service>  

22:<receiver>  

23:<intent-filter></intent-filter>  

24:<meta-data/> 

25:</receiver> 

26:<provider>  

27:<grant-uri-permission/>  

28:<intent-filter></intent-filter>  

29:<meta-data/>  

30:</provider>

31:</application> 

32:<permission/> 

33:<permission-tree/>  

34:<permission-group/> 

35:<instrumentation/>  

36:<uses-configuration/>  

37:<uses-feature/>  

38:<supports-screens/>

39: </manifest>

二、各个节点的详细介绍 
1、第一层(Manifest):(属性)

1<manifest xmlns:android="http://schemas.android.com/apk/res/android"

2 xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"

3package="com.android.settings"

4 coreApp="true"

5 android:sharedUserId="android.uid.system">

自己写Demo的Manifest文件:

1:<manifest xmlns:android="http://schemas.android.com/apk/res/android"

2:package="com.example.broadcastdemo"

3: android:versionCode="1"

4: android:versionName="1.0" >

A、xmlns:Android

定义android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。

B、package

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

C、sharedUserId

表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了。

扩展:

1.系统中所有使用android.uid.system作为共享UID的APK,都会首先在manifest节点中增加android:sharedUserId=”android.uid.system”,然后在Android.mk中增加LOCAL_CERTIFICATE := platform。可以参见Settings等

2.系统中所有使用android.uid.shared作为共享UID的APK,都会在manifest节点中增加android:sharedUserId=”android.uid.shared”,然后在Android.mk中增加LOCAL_CERTIFICATE := shared。可以参见Launcher等

3.系统中所有使用android.media作为共享UID的APK,都会在manifest节点中增加android:sharedUserId=”android.media”,然后在Android.mk中增加LOCAL_CERTIFICATE := media。可以参见Gallery等。

D、versionCode

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

E、versionName

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


结合google大神源代码分析

/packages/apps/Settings/AndroidManifest.xml

一:manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"//android命名空间

2 xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"  

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

3 package="com.android.settings" 

//coreApp=true,不是代表该APP具有系统权限,而是把该类app归类为核心APP,核心app其实也是最小android framework系统。

4 coreApp="true"

//表明数据权限,使其拥有root权限(系统权限)

5 android:sharedUserId="android.uid.system">

6

7<uses-sdk//应用所需的api level,在此属性中可以指定支持的最小版本

8 android:minSdkVersion="21"/>

//与package=""值一样,如注意所述

10<original-package android:name="com.android.settings"/>

//当我们需要获取某个权限的时候就必须在我们的manifest文件中声明uses-permission

12<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>

注意:这里package=”com.android.settings”,产生的R.java就会在com.android.settings中 

/packages/apps/Launcher2/AndroidManifest.xml

1:<manifest  

2:xmlns:android="http://schemas.android.com/apk/res/android"  

3:package="com.android.launcher">  

4:<original-package android:name="com.android.launcher2" />

这里package=”com.android.launcher”,产生的R.java就会在com.android.launcher中

< original-package android:name=”com.android.launcher2” /> 这个地方表示,源码包是com.android.launcher2。所以在代码中引用的R.java必须是import com.android.launcher.R;

二:application

<applicationandroid:label="@string/settings_label"

//图标

87android:icon="@mipmap/ic_launcher_settings"

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

88android:taskAffinity=""  

//资源的风格

89android:theme="@style/Theme.Settings"

//设置true,意味着对你的整个应用启用硬加速

90android:hardwareAccelerated="true"

91android:requiredForAllUsers="true"

92android:supportsRtl="true"

93android:allowBackup="false"

94android:usesCleartextTraffic="true">

95 ...

96<!-- Settings -->

注意: 
Application级 
  在你的manifest文件中,把以下属性添加到< application >标签来对你的整个应用启用硬加速: 
< applicationandroid:hardwareAccelerated=”true” … > 
如果你的应用在全局启用硬加速时行为不正确,你可以对个别activities单独启用硬加速.欲在actvity级别启用或禁止硬加速,你可以对< activity >元素使用android:hardwareAccelerated属性.下面的例子在整个应用中启用了硬加速但对一个activity禁止了硬加速: 
Activity级 
  如果你的应用在全局启用硬加速时行为不正确,你可以对个别activities单独启用硬加速.欲在actvity级别启用或禁止硬加速,你可以对< activity >元素使用android:hardwareAccelerated属性.下面的例子在整个应用中启用了硬加速但对一个activity禁止了硬加速:

1:<application android:hardwareAccelerated="true">

2:<activity... />

3:<activityandroid:hardwareAccelerated="false" />

4:</application>

三:activity 与 activity-alias

<activityandroid:name="Settings"

99android:taskAffinity="com.android.settings"

100android:label="@string/settings_label_launcher"

101android:launchMode="singleTask">//启动模式

//广播优先级,值越大优先级越高,范围是从-1000~1000102

<intent-filterandroid:priority="1">

103<actionandroid:name="android.settings.SETTINGS" />

104<categoryandroid:name="android.intent.category.DEFAULT" />

105</intent-filter>

106<meta-dataandroid:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"

107android:value="true" />

108</activity>

注意: 
intent filter内会设定的资料包括action,data与category三种。也就是说filter只会与intent里的这三种资料作对比动作

<!-- Alias for launcher activity only, as this belongs to each profile. -->

111<activity-aliasandroid:name="Settings"

112android:taskAffinity="com.android.settings"

113android:label="@string/settings_label_launcher"

114android:launchMode="singleTask"

115android:targetActivity="Settings">

116<intent-filter>

//"android.intent.action.MAIN"表明此activity是作为应用程序的入口

117<actionandroid:name="android.intent.action.MAIN" />

//如果支持隐式启动在没有category情况下,必须加上这个

118<categoryandroid:name="android.intent.category.DEFAULT" />

//显示在launcher中

119<categoryandroid:name="android.intent.category.LAUNCHER" />

120</intent-filter>

121</activity-alias>

四 备注:

<!--  

--exported:是否运行被其他程序调用

--android:configChanges="orientation|keyboardHidden|screenSize" :旋转屏幕后,Activity不会重新走生命周期

--launchMode:加载模式,包含四种:standard,singleTop,singleTask,singleInstance

--<actionandroid:name="android.intent.action.MAIN" />:程序入口

--<categoryandroid:name="android.intent.category.LAUNCHER" /> :显示在launcher中

--<categoryandroid:name="android.intent.category.HOME" /> :launcher应用

--<categoryandroid:name="android.intent.category.DEFAULT" >:如果支持隐式启动在没有category情况下,必须加上这个

--meta-data :提供额外信息 

-->

0 0