您的位置:首页 > 移动开发 > Android开发

AndroidManifest.xml清单文件分析

2013-05-23 07:29 489 查看
清单文件的一般格式:

<?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>
MUST CONTAIN:
<action>
CAN CONTAIN:
<category>
 
<data>

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android