清单文件的一般格式:
<?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> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </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 /> <path-permission /> </provider> <uses-library /> </application> </manifest>
第一行为XML的版本与编码方式;
根元素<manifest>分析:
语法:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="string"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
. . .
</manifest>
属性:
xmlns:android:该属性表示命名空间,总是被设置成http://schemas.android.com/apk/res/android;
package:包名称,需要独一无二的;
versionCode是给设备程序识别版本(升级)用的,必须是一个interger值,整数,代表app更新过多少次;
versionName是给用户看的,可以写1.1 , 1.2等等版本;
其他属性暂时没用到。
<uses-sdk>分析:
<uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" android:maxSdkVersion="integer" />
属性minSdkVersion指的是该应用程序运行所需的最低的API版本,否则将无法安装该应用程序;如果不设置,系统默认为“1”,即表示该APP将适应所有版本的API;
有以下这种情况需要注意:如果在你的APP中使用了某个版本的API(比如level4),并且该APP运行在API版本小于4的系统上,而minSdkVersion属性又没有设置,当APP调用level 4的API时程序会崩溃,因此必须设置minSdkVersion属性。
<application>元素分析:
<application android:allowTaskReparenting=["true" | "false"] android:backupAgent="string" android:debuggable=["true" | "false"] android:description="string resource" android:enabled=["true" | "false"] android:hasCode=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:killAfterRestore=["true" | "false"] android:largeHeap=["true" | "false"] android:label="string resource" android:logo="drawable resource" android:manageSpaceActivity="string" android:name="string" android:permission="string" android:persistent=["true" | "false"] android:process="string" android:restoreAnyVersion=["true" | "false"] android:supportsRtl=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] > . . . </application>
android:icon属性:表示应用程序的图标,同样也可以作为application中其他组件的默认图标(如果该组件未设置icon属性)。必须指向drawable 资源(为什么分为4种drawable 呢?),不存在默认的图标。
android:label属性:同理icon。(有一句话不理解,However, as a convenience while you're developing the application, it can also be set as a raw string.)
下面是重要的Activity元素
语法:
<activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "screenLayout", "fontScale", "uiMode", "orientation", "screenSize", "smallestScreenSize"] android:enabled=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:hardwareAccelerated=["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:parentActivityName="string" android:permission="string" android:process="string" android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "reverseLandscape" | "reversePortrait" | "sensorLandscape" | "sensorPortrait" | "sensor" | "fullSensor" | "nosensor"] android:stateNotNeeded=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] > . . . </activity>
android:name:表示该Activity子类的类名,必须将该类名写完整(如com.example.MyActivity,如果在<Manifest>元素中定义了package 属性为com.example,则可以省略.MyActivity);一旦发布了你的APP,就不能修改此属性(除非你设置了android:exported="false",为什么???);该属性没有默认值,必须设置。
android:label:表示activity的标题;如果该值未设置,则默认使用<application>中的label属性;该属性页同样作为activity's intent filters的默认属性;
<intent-filter>元素分析:
<intent-filter android:icon="drawable resource" android:label="string resource" android:priority="integer" > . . . </intent-filter>CONTAINED IN:
<activity>
<activity-alias>
<service>
<receiver>
<action>
<category>
<data>