Android Zone

Android AndroidManifest.xml 简介

2018-05-03  本文已影响10人  翻译不了的声响

AndroidManifest.xml 是Android应用的入口文件,为系统提供应用的必要信息,系统必须具有这些信息才能正常运行。

此外,清单文件还可执行以下操作:

manifests文件图
1. 文件结构

下面的代码段显示了清单文件的通用结构及其可包含的每个元素。每个元素及其所有属性全部记录在一个单独的文件中。

下面是清单文件的示例:

<?xmlversion="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/>
    <supports-screens/>

    <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>
2. 文件约定

1)元素
只有 <manifest><application> 元素是必需的,它们都必须存在并且只能出现一次。其他大部分元素可以出现多次或者根本不出现。但清单文件中必须至少存在其中某些元素才有用。

同一级别的元素通常不分先后顺序。例如,<activity><provider><service> 元素可以按任何顺序混合在一起。这条规则有两个主要例外:

2)属性
从某种意义上说,所有属性都是可选的。但是,必须指定某些属性,元素才可实现其目的。

<manifest  xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.finddreams.csdn"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource"
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
</manifest>
<application  android:allowClearUserData=["true" | "false"]
             android:allowTaskReparenting=["true" | "false"]
             android:backupAgent="string"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:enabled=["true" | "false"]
             android:hasCode=["true" | "false"]
             android:icon="drawable resource"
             android:killAfterRestore=["true" | "false"]
             android:label="string resource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:permission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:taskAffinity="string"
             android:theme="resource or theme" >
</application>
<activity android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:clearTaskOnLaunch=["true" | "false"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "orientation", "screenLayout",
                                 "fontScale", "uiMode"]
          android:enabled=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["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:permission="string"
          android:process="string"
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
          android:stateNotNeeded=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
</activity>
<activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string">
    <intent-filter/> 
    <meta-data/>
</activity-alias>
<service android:enabled=["true" | "false"]
         android:exported[="true" | "false"]
         android:icon="drawable resource"
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string">
</service>
<provider android:authorities="list"
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string">
    <grant-uri-permission/>
    <meta-data/>
</provider>
<supports-screens  
       android:smallScreens=["true" | "false"] 
       android:normalScreens=["true" | "false"] 
       android:largeScreens=["true" | "false"] 
       android:anyDensity=["true" | "false"] />
<intent-filter  
        android:icon="drawable resource"
        android:label="string resource"
        android:priority="integer" >
   <action />
   <category />
   <data />
</intent-filter> 
<data  android:host="string"
    android:mimeType="string"
    android:path="string"
    android:pathPattern="string"
    android:pathPrefix="string"
    android:port="string"
    android:scheme="string"/>

3)声明类名
许多元素对应于 Java 对象,包括应用本身的元素(<application> 元素)及其主要组件:Activity (<activity>)、服务 (<service>)、广播接收器 (<receiver>) 以及内容提供程序 (<provider>)。

ActivityServiceBroadcastReceiverContentProvider都需要子类通过 name 属性来声明。该名称必须包含完整的包名称。例如,Service 子类可能会声明如下:

<manifest . . . >
    <application . . . >
        <service android:name="com.example.project.SecretService" . . . >
            . . .
        </service>
        . . .
    </application>
</manifest>

但是,如果字符串的第一个字符是句点,则应用的包名称(如 <manifest> 元素的 package 属性所指定)将添加到该字符串。例如:

<manifest package="com.example.project" . . . >
    <application . . . >
        <service android:name=".SecretService" . . . >
            . . .
        </service>
        . . .
    </application>
</manifest>

当启动组件时,Android 系统会创建已命名子类的实例。如果未指定子类,则会创建基类的实例。

4)多个值

如果可以指定多个值,则几乎总是在重复此元素,而不是列出单个元素内的多个值。例如,intent 过滤器可以列出多个操作:

<intent-filter . . . >
    <action android:name="android.intent.action.EDIT" />
    <action android:name="android.intent.action.INSERT" />
    <action android:name="android.intent.action.DELETE" />
    . . .
</intent-filter>
上一篇 下一篇

猜你喜欢

热点阅读