應(yīng)用清單

應(yīng)用清單

每個(gè)應(yīng)用的根目錄中都必須包含一個(gè) AndroidManifest.xml 文件(且文件名精確無誤)。 清單文件向 Android 系統(tǒng)提供應(yīng)用的必要信息蜓洪,系統(tǒng)必須具有這些信息方可運(yùn)行應(yīng)用的任何代碼胯努。

此外牢裳,清單文件還可執(zhí)行以下操作:

  • 為應(yīng)用的 Java 軟件包命名。軟件包名稱充當(dāng)應(yīng)用的唯一標(biāo)識符康聂。
  • 描述應(yīng)用的各個(gè)組件贰健,包括構(gòu)成應(yīng)用的 Activity、服務(wù)恬汁、廣播接收器和內(nèi)容提供程序伶椿。它還為實(shí)現(xiàn)每個(gè)組件的類命名并發(fā)布其功能,例如它們可以處理的 Intent消息氓侧。這些聲明向 Android 系統(tǒng)告知有關(guān)組件以及可以啟動這些組件的條件的信息脊另。
  • 確定托管應(yīng)用組件的進(jìn)程。
  • 聲明應(yīng)用必須具備哪些權(quán)限才能訪問 API 中受保護(hù)的部分并與其他應(yīng)用交互约巷。還聲明其他應(yīng)用與該應(yīng)用組件交互所需具備的權(quán)限
  • 列出 Instrumentation類偎痛,這些類可在應(yīng)用運(yùn)行時(shí)提供分析和其他信息。這些聲明只會在應(yīng)用處于開發(fā)階段時(shí)出現(xiàn)在清單中独郎,在應(yīng)用發(fā)布之前將移除
  • 聲明應(yīng)用所需的最低 Android API 級別
  • 列出應(yīng)用必須鏈接到的庫

清單文件結(jié)構(gòu)

下面的代碼段顯示了清單文件的通用結(jié)構(gòu)及其可包含的每個(gè)元素踩麦。每個(gè)元素及其所有屬性全部記錄在一個(gè)單獨(dú)的文件中。

下面是清單文件的示例:

<?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>

以下列表包含可出現(xiàn)在清單文件中的所有元素氓癌,按字母順序列出:

注:這些是僅有的合法元素 – 您無法添加自己的元素或?qū)傩浴?/p>

文件約定

本節(jié)描述普遍適用于清單文件中所有元素和屬性的約定和規(guī)則谓谦。

元素

只有 <manifest><application> 元素是必需的,它們都必須存在并且只能出現(xiàn)一次贪婉。其他大部分元素可以出現(xiàn)多次或者根本不出現(xiàn)反粥。但清單文件中必須至少存在其中某些元素才有用。

如果一個(gè)元素包含某些內(nèi)容,也就包含其他元素才顿。所有值均通過屬性進(jìn)行設(shè)置莫湘,而不是通過元素內(nèi)的字符數(shù)據(jù)設(shè)置。

同一級別的元素通常不分先后順序郑气。例如幅垮,<activity><provider><service> 元素可以按任何順序混合在一起竣贪。這條規(guī)則有兩個(gè)主要例外:

  • <activity-alias> 元素必須跟在別名所指的 <activity> 之后军洼。
  • <application>元素必須是 <manifest> 元素內(nèi)最后一個(gè)元素。換言之演怎,</manifest> 結(jié)束標(biāo)記必須緊接在 </application>結(jié)束標(biāo)記后。

屬性

從某種意義上說避乏,所有屬性都是可選的爷耀。但是,必須指定某些屬性拍皮,元素才可實(shí)現(xiàn)其目的歹叮。請使用本文檔作為參考。對于真正可選的屬性铆帽,它將指定默認(rèn)值或聲明缺乏規(guī)范時(shí)將執(zhí)行何種操作咆耿。

除了根 <manifest>元素的一些屬性外,所有屬性名稱均以 android: 前綴開頭爹橱。例如萨螺,android:alwaysRetainTaskState。由于該前綴是通用的愧驱,因此在按名稱引用屬性時(shí)慰技,本文檔通常會將其忽略。

聲明類名

許多元素對應(yīng)于 Java 對象组砚,包括應(yīng)用本身的元素(<application> 元素)及其主要組件:Activity (<activity>)吻商、服務(wù) (<service>)、廣播接收器 (<receiver>) 以及內(nèi)容提供程序 (<provider>)糟红。

如果按照您針對組件類(Activity艾帐、ServiceBroadcastReceiver ContentProvider)幾乎一直采用的方式來定義子類,則該子類需通過 name 屬性來聲明盆偿。該名稱必須包含完整的軟件包名稱柒爸。例如,Service 子類可能會聲明如下:

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

但是陈肛,如果字符串的第一個(gè)字符是句點(diǎn)揍鸟,則應(yīng)用的軟件包名稱(如 <manifest>元素的 package 屬性所指定)將附加到該字符串。以下賦值與上述方法相同:

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

當(dāng)啟動組件時(shí),Android 系統(tǒng)會創(chuàng)建已命名子類的實(shí)例阳藻。如果未指定子類晰奖,則會創(chuàng)建基類的實(shí)例。

多個(gè)值

如果可以指定多個(gè)值腥泥,則幾乎總是在重復(fù)此元素匾南,而不是列出單個(gè)元素內(nèi)的多個(gè)值。例如蛔外,intent 過濾器可以列出多個(gè)操作:

<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>

資源值

某些屬性的值可以顯示給用戶蛆楞,例如,Activity 的標(biāo)簽和圖標(biāo)夹厌。這些屬性的值應(yīng)該本地化豹爹,并通過資源或主題進(jìn)行設(shè)置。資源值用以下格式表示:

@[<i>package</i>:]<i>type</i>/<i>name</i>

如果資源與應(yīng)用在同一個(gè)軟件包中矛纹,可以省略軟件包名稱臂聋。類型是資源類型,例如字符串或可繪制對象或南,名稱是標(biāo)識特定資源的名稱孩等。下面是示例:

<activity android:icon="@drawable/smallPic" . . . >

主題中的值用類似的方法表示,但是以 ? 開頭采够,而不是以 @ 開頭:
?[<i>package</i>:]<i>type</i>/<i>name</i>

字符串值

如果屬性值為字符串肄方,則必須使用雙反斜杠 ( \ \ ) 轉(zhuǎn)義字符,例如蹬癌,使用 \ \n 表示換行符或使用 \ \uxxxx 表示 Unicode 字符权她。

文件功能

下文介紹在清單文件中體現(xiàn)某些 Android 特性的方式。

Intent 過濾器

應(yīng)用的核心組件(例如其 Activity冀瓦、服務(wù)和廣播接收器)由 intent 激活伴奥。Intent 是一系列用于描述所需操作的信息(Intent 對象),其中包括要執(zhí)行操作的數(shù)據(jù)翼闽、應(yīng)執(zhí)行操作的組件類別以及其他相關(guān)說明拾徙。Android 系統(tǒng)會查找合適的組件來響應(yīng) intent,根據(jù)需要啟動組件的新實(shí)例感局,并將其傳遞到 Intent對象尼啡。

組件將通過 intent 過濾器公布它們可響應(yīng)的 intent 類型。由于Android 系統(tǒng)在啟動某組件之前必須了解該組件可以處理的 intent询微,因此 intent 過濾器在清單中被指定為 <intent-filter> 元素崖瞭。一個(gè)組件可有任意數(shù)量的過濾器,其中每個(gè)過濾器描述一種不同的功能撑毛。

顯式命名目標(biāo)組件的 intent 將激活該組件书聚,因此過濾器不起作用。不按名稱指定目標(biāo)的 intent 只有在能夠通過組件的一個(gè)過濾器時(shí)才可激活該組件。

如需了解有關(guān)如何根據(jù) intent 過濾器測試 Intent 對象的信息雌续,請參閱 Intent 和 Intent 過濾器文檔斩个。

圖標(biāo)和標(biāo)簽

對于可以顯示給用戶的小圖標(biāo)和文本標(biāo)簽,大量元素具有 iconlabel 屬性驯杜。此外受啥,對于同樣可以顯示在屏幕上的較長說明文本,某些元素還具有 description 屬性鸽心。例如滚局,<permission> 元素具有所有這三個(gè)屬性。因此顽频,當(dāng)系統(tǒng)詢問用戶是否授權(quán)給請求獲得權(quán)限的應(yīng)用時(shí)藤肢,權(quán)限圖標(biāo)、權(quán)限名稱以及所需信息的說明均會呈現(xiàn)給用戶糯景。

無論何種情況下谤草,在包含元素中設(shè)置的圖標(biāo)和標(biāo)簽都將成為所有容器子元素的默認(rèn) iconlabel 設(shè)置。因此莺奸,在 <application> 元素中設(shè)置的圖標(biāo)和標(biāo)簽是每個(gè)應(yīng)用組件的默認(rèn)圖標(biāo)和標(biāo)簽。同樣冀宴,為組件(例如 <activity> 元素)設(shè)置的圖標(biāo)和標(biāo)簽是組件每個(gè) <intent-filter> 元素的默認(rèn)設(shè)置灭贷。如果 <application> 元素設(shè)置標(biāo)簽,但是 Activity 及其 intent 過濾器不執(zhí)行此操作略贮,則應(yīng)用標(biāo)簽將被視為 Activity 和 intent 過濾器的標(biāo)簽甚疟。

在實(shí)現(xiàn)過濾器公布的功能時(shí),只要向用戶呈現(xiàn)組件逃延,系統(tǒng)便會使用為 intent 過濾器設(shè)置的圖標(biāo)和標(biāo)簽表示該組件览妖。例如,具有 android.intent.action.MAIN 和 android.intent.category.LAUNCHER 設(shè)置的過濾器將 Activity 公布為可啟動應(yīng)用的功能揽祥,即讽膏,公布為應(yīng)顯示在應(yīng)用啟動器中的功能。在過濾器中設(shè)置的圖標(biāo)和標(biāo)簽顯示在啟動器中拄丰。

權(quán)限

權(quán)限是一種限制府树,用于限制對部分代碼或設(shè)備上數(shù)據(jù)的訪問。施加限制是為了保護(hù)可能被誤用以致破壞或損害用戶體驗(yàn)的關(guān)鍵數(shù)據(jù)和代碼料按。

每種權(quán)限均由一個(gè)唯一的標(biāo)簽標(biāo)識奄侠。標(biāo)簽通常指示受限制的操作。以下是 Android 定義的一些權(quán)限:

  • android.permission.CALL_EMERGENCY_NUMBERS
  • android.permission.READ_OWNER_DATA
  • android.permission.SET_WALLPAPER
  • android.permission.DEVICE_POWER
    一個(gè)功能只能由一種權(quán)限保護(hù)载矿。

如果應(yīng)用需要訪問受權(quán)限保護(hù)的功能垄潮,則必須在清單中使用 <uses-permission> 元素聲明應(yīng)用需要該權(quán)限。將應(yīng)用安裝到設(shè)備上之后,安裝程序會通過檢查簽署應(yīng)用證書的頒發(fā)機(jī)構(gòu)并(在某些情況下)詢問用戶弯洗,確定是否授予請求的權(quán)限旅急。如果授予權(quán)限,則應(yīng)用能夠使用受保護(hù)的功能涂召。否則坠非,其訪問這些功能的嘗試將會失敗,并且不會向用戶發(fā)送任何通知果正。
應(yīng)用也可以使用權(quán)限保護(hù)自己的組件炎码。它可以采用由 Android 定義(如 android.Manifest.permission 中所列)或由其他應(yīng)用聲明的任何權(quán)限。它也可以定義自己的權(quán)限秋泳。新權(quán)限用 <permission> 元素來聲明潦闲。例如,Activity 可受到如下保護(hù):

<manifest . . . >
    <permission android:name="com.example.project.DEBIT_ACCT" . . . />
    <uses-permission android:name="com.example.project.DEBIT_ACCT" />
    . . .
    <application . . .>
        <activity android:name="com.example.project.FreneticActivity"
                  android:permission="com.example.project.DEBIT_ACCT"
                  . . . >
            . . .
        </activity>
    </application>
</manifest>

請注意迫皱,在此示例中歉闰,DEBIT_ACCT 權(quán)限不僅是通過 <permission> 元素來聲明,而且其使用也是通過 <uses-permission> 元素來請求卓起。要讓應(yīng)用的其他組件也能夠啟動受保護(hù)的 Activity和敬,您必須請求其使用權(quán)限,即便保護(hù)是由應(yīng)用本身施加的亦如此戏阅。

同樣還是在此示例中昼弟,如果將 permission 屬性設(shè)置為在其他位置(例如,android.permission.CALL_EMERGENCY_NUMBERS)聲明的權(quán)限奕筐,則無需使用 <permission> 元素再次聲明舱痘。但是,仍有必要通過 <uses-permission> 請求其使用權(quán)限离赫。

<permission-tree> 元素聲明為代碼中定義的一組權(quán)限聲明命名空間芭逝,<permission-group> 為一組權(quán)限定義標(biāo)簽,包括在清單中使用<permission>元素聲明的權(quán)限以及在其他位置聲明的權(quán)限渊胸。這只影響如何對提供給用戶的權(quán)限進(jìn)行分組旬盯。<permission-group> 元素并不指定屬于該組的權(quán)限,而只是為組提供名稱蹬刷∑白剑可通過向 <permission> 元素的 permissionGroup 屬性分配組名,將權(quán)限放入組中办成。

每個(gè)應(yīng)用均鏈接到默認(rèn)的 Android 庫泡态,該庫中包括用于開發(fā)應(yīng)用(以及通用類,如 Activity迂卢、服務(wù)某弦、intent桐汤、視圖、按鈕靶壮、應(yīng)用怔毛、ContentProvider)的基本軟件包。
但是腾降,某些軟件包駐留在自己的庫中拣度。如果應(yīng)用使用來自其中任一軟件包的代碼,則必須明確要求其鏈接到這些軟件包螃壤。清單必須包含單獨(dú)的 <uses-library> 元素來命名其中每個(gè)庫抗果。庫名稱可在軟件包的文檔中找到。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奸晴,一起剝皮案震驚了整個(gè)濱河市冤馏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寄啼,老刑警劉巖逮光,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異墩划,居然都是意外死亡涕刚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門乙帮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來副女,“玉大人,你說我怎么就攤上這事蚣旱。” “怎么了戴陡?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵塞绿,是天一觀的道長。 經(jīng)常有香客問我恤批,道長异吻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任喜庞,我火速辦了婚禮诀浪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘延都。我一直安慰自己雷猪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布晰房。 她就那樣靜靜地躺著求摇,像睡著了一般射沟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上与境,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天验夯,我揣著相機(jī)與錄音,去河邊找鬼摔刁。 笑死挥转,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的共屈。 我是一名探鬼主播绑谣,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趁俊!你這毒婦竟也來了域仇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤寺擂,失蹤者是張志新(化名)和其女友劉穎暇务,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怔软,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垦细,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挡逼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片括改。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖家坎,靈堂內(nèi)的尸體忽然破棺而出嘱能,到底是詐尸還是另有隱情,我是刑警寧澤虱疏,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布惹骂,位于F島的核電站,受9級特大地震影響做瞪,放射性物質(zhì)發(fā)生泄漏对粪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一装蓬、第九天 我趴在偏房一處隱蔽的房頂上張望著拭。 院中可真熱鬧,春花似錦牍帚、人聲如沸儡遮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峦萎。三九已至屡久,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爱榔,已是汗流浹背被环。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留详幽,地道東北人筛欢。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像唇聘,于是被迫代替她去往敵國和親版姑。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容