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"
//拥有相同的affinity的Activity理论上属于相同的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 :提供额外信息
-->
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml 文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml文件详解
- AndroidManifest.xml 文件详解
- AndroidManifest.xml文件详解
- *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
- 编译安装php扩展fileinfo
- js 里 escape,encodeURI,encodeURIComponent编码方法之我见
- Hibernate事务与并发问题处理(悲观锁与乐观锁)
- 谷歌开源项目风格指南笔记(上)
- AndroidManifest.xml文件详解
- 【6】旋转数组 的最小数字
- js同源策略
- http协议响应状态码大全以及常用状态码
- 最接近的数
- Cloudera:Hue监控页面的时间显示问题
- 分类算法中的ROC与PR指标
- UNIX/Linux系统取证之信息采集案例
- A guide to Python's function decorators