AndroidManifest.xml文件详解
2016-06-22 15:30
471 查看
声明:今天在网上看到这个博客,感觉很有用就转载了。
为了不产生误会把博主的地址贴上 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版本等等。。。
/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
:提供额外信息
-->
为了不产生误会把博主的地址贴上 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
:提供额外信息
-->
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories