- 1. 简介:
AndroidManifest.xml是每个Android应用必不可少的配置文件,它主要完成以下工作
1、向系统暴露应用的包名(package)
2、配置应用版本、版本号
3、配置应用使用的Android sdk版本
4、申请系统权限(如sd卡读写权限,网络访问等)
5、配置应用组件(activity,service等)
……
Android系统会根据其中的配置文件去执行分配权限,分配运行空间,启动组件等操作。
- 2. 文件结构:
新建一个应用会在代码跟目录下自动生成一个AndroidManifest.xml文件,对应用进行了基础的描述,可以对AndroidManifest.xml的格式进行初步的理解。其格式规范符合一般的xml文件的规范,有各种标签和属性组成,其标签层级关系格式如下 :
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<!-- 基本配置 -->
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<compatible-screens />
<supports-gl-texture />
<!-- 应用配置 -->
<application>
<!-- Activity 配置 -->
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>
<!-- Service 配置 -->
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<!-- Receiver 配置 -->
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>
<!-- Provider 配置 -->
<provider>
<grant-uri-permission />
<meta-data />
</provider>
<!-- 所需类库配置 -->
<uses-library />
</application>
</manifest>
AndroidManifest.xml的格式基本如上,manifest标签在最外层,下一层包含了【uses-sdk,uses-permission,application】;application标签下配置Android的组件,包括【activity,service,provider,receiver等】。后文对常用的标签进行详细的介绍。
- 3. 标签的详细介绍:
3.1 manifest标签
3.1.1 常用标签
package属性:配置应用的包名,应用安装后暴露给系统的包名就是package配置的。
context.getPackageName() 获取
versionCode属性:应用版本码,必须是正整数字符串,应用市场会根据版本号进行更新/安装,版本号越高版本越新。
versionName属性:版本名,可以为任意字符传标记应用的版本
PackageInfo packageInfo=getPackageManager().getPackageInfo(getPackageName(),0);
int versionCode = packageInfo.versionCode;
String versionName = packageInfo.versionName;
3.1.2 补充
sharedUserId属性:不同应用间共享userid,应用运行时Android会为应用分配单独的空间,不同应用程序间不能互相访问;通过设置同一个userid可以让多个应用运行在同一空间中,可以互相访问数据。
system)权限。可以在system权限目录下进行文件操作,以及访问其他应用资源。【注意:system权限不等同root权限,有了root权限可以对系统中的所有文件进行读写操作】
3.2 uses-sdk标签
用于指定应用所支持的SDK的版本号
android:minSdkVersion="8" 用于指定当前应用适用的最小sdk版本
用于指定当前应用适用的目标sdk版本
用于指定当前应用适用的最大sdk版本
应用程序安装时如果设备的API等级小于
minSdkVersion或高于maxSdkVersion应用将无法安装,对于targetSdkVersion一般指最佳适配版本。
3.3 uses-permission
为应用向系统申请某项功能的使用权限,例如sd卡的读写权限、相机使用权限、网络访问权限等,如果不在这里申请某项功能的使用权限的话是无法使用该项功能!
常用的权限如下
<!-- 通知相关功能 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 使用相机权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- SDcard权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 网络访问权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 网络检测权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!-- WIFI相关 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 读取电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
3.4 application标签
配置应用的Application,可以通过name属性制定自定义的Application。Application是一个在应用的整个运行周期都存在的一个单例的全局的静态变量对象,在应用启动时Application就会被加载到内存,直到应用被结束才进行回收。可以在Application中定义全局变量,运行过程中可以使用context.getApplication()获取得到。
在application标签中可以定义部分属性值,子元素标签会默认继承这些属性。
3.4.1 常用属性
debugable:允许调试,为保证发布的apk安全,发布时该属性必须设为false
It's best to leave out the android:debuggable
attribute from the manifest. If you do, then the tools will automatically insert android:debuggable=true
when building an APK to debug on an emulator or device. And when you perform a release build, such as Exporting APK, it will automatically set it to false
. allowBackup:允许备份应用数据,
为保证发布的apk安全,发布时该属性必须设为false
3.4.2 子元素
activity标签:活动组件(即界面控制器组件)的声明标签。
Android应用中的每一个Activity都必须在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。
<!-- Activity对应的类名 -->
android:name="com.example.activity.MyActivity"
<!-- 当进行横竖屏切换时不会重新执行onCreate函数中的onConfigurationChanged()方法 -->
android:configChanges="orientation|keyboardHidden"
<!-- 强制屏幕方向为竖屏(横屏为landscape) -->
android:screenOrientation="portrait"
<!-- 去除标题栏&全屏 -->
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
<!-- 键盘交互 -->
android:windowSoftInputMode="stateAlwaysHidden"
类似的还有service、receiver、provider等标签,不在一一列举
《后面想到再继续完善》