<應用程式>

語法:
<application android:allowTaskReparenting=["true" | "false"]
             android:allowBackup=["true" | "false"]
             android:allowClearUserData=["true" | "false"]
             android:allowNativeHeapPointerTagging=["true" | "false"]
             android:appCategory=["accessibility" | "audio" | "game" |
             "image" | "maps" | "news" | "productivity" | "social" | "video"]
             android:backupAgent="string"
             android:backupInForeground=["true" | "false"]
             android:banner="drawable resource"
             android:dataExtractionRules="string resource"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:enabled=["true" | "false"]
             android:extractNativeLibs=["true" | "false"]
             android:fullBackupContent="string"
             android:fullBackupOnly=["true" | "false"]
             android:gwpAsanMode=["always" | "never"]
             android:hasCode=["true" | "false"]
             android:hasFragileUserData=["true" | "false"]
             android:hardwareAccelerated=["true" | "false"]
             android:icon="drawable resource"
             android:isGame=["true" | "false"]
             android:isMonitoringTool=["parental_control" | "enterprise_management" |
             "other"]
             android:killAfterRestore=["true" | "false"]
             android:largeHeap=["true" | "false"]
             android:label="string resource"
             android:logo="drawable resource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:networkSecurityConfig="xml resource"
             android:permission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:requestLegacyExternalStorage=["true" | "false"]
             android:requiredAccountType="string"
             android:resizeableActivity=["true" | "false"]
             android:restrictedAccountType="string"
             android:supportsRtl=["true" | "false"]
             android:taskAffinity="string"
             android:testOnly=["true" | "false"]
             android:theme="resource or theme"
             android:uiOptions=["none" | "splitActionBarWhenNarrow"]
             android:usesCleartextTraffic=["true" | "false"]
             android:vmSafeMode=["true" | "false"] >
    . . .
</application>
包含於:
<manifest>
可包含:
<activity>
<activity-alias>
<meta-data>
<service>
<receiver>
<profileable>
<provider>
<uses-library>
<uses-native-library>
說明:
應用程式宣告。這個元素包含用來宣告每個應用程式元件的子元素,並擁有可影響所有元件的屬性。

其中的許多屬性 (例如 iconlabelpermissionprocesstaskAffinityallowTaskReparenting) 會針對元件元素的對應屬性設定預設值,而 debuggableenableddescriptionallowClearUserData 等其他屬性會針對應用程式設定整體的值,且不會遭到元件覆寫。

屬性
android:allowTaskReparenting
指出應用程式定義的活動能否從啟動該活動的工作中,移至與該活動有相依性的工作 (在下一次該工作移至前景時)。如果可以移動,則為 "true";如果活動必須繼續位於啟動該活動的工作中,則為 "false"。預設值為 "false"

<activity> 元素有專屬的 allowTaskReparenting 屬性,可覆寫此處設定的值。

android:allowBackup

指出是否允許應用程式參與備份與還原基礎架構。如果此屬性設為 "false",系統就完全不會執行應用程式備份或還原作業,即使是使用 adb 儲存所有應用程式資料的完整系統備份方法也不例外。此屬性的預設值為 "true"

注意:假如應用程式在搭載 Android 12 以上版本的裝置上執行,而且指定 Android 12 (API 級別 31) 以上版本,您就無法停用應用程式檔案的裝置對裝置遷移功能。在這種情況下,系統會自動支援這項功能。

不過,即使您的應用程式指定 Android 12 (API 級別 31) 以上版本,您還是可以將這個屬性設為 "false",藉此停用應用程式檔案的雲端備份與還原功能。

詳情請參閱這個頁面的「備份與還原」一節說明。該頁面說明瞭指定 Android 12 (API 級別 31) 以上版本的應用程式有哪些行為異動。

android:allowClearUserData

指出是否允許應用程式重設使用者資料。這類資料包括標記 (例如使用者是否已看過簡介工具提示),以及使用者可自訂的設定和偏好設定。此屬性的預設值為 "true"

注意:只有屬於系統映像檔的應用程式才能明確宣告這個屬性。第三方應用程式不得在資訊清單檔案中加入這個屬性。

詳情請參閱「資料備份總覽」。

android:allowNativeHeapPointerTagging

指出應用程式是否已啟用堆積指標標記功能。此屬性的預設值為 "true"

注意:這項功能「無法」解決基礎程式碼的執行狀況問題。日後的硬體裝置可能不支援這個資訊清單標記。

詳情請參閱「標記指標」。

android:appCategory

宣告這個應用程式的類別。類別可用來將多個應用程式分成有意義的群組,例如匯總電池、網路或磁碟的用量。請只針對適用其中一個特定類別的應用程式定義這個值。

必須是下列其中一個常數值。

說明
accessibility主要為無障礙應用程式,例如螢幕閱讀器。
audio主要為與音訊或音樂相關的應用程式,例如音樂播放器。
game主要為遊戲應用程式。
image主要為與圖片或相片相關的應用程式,例如相機或圖庫應用程式。
maps主要為地圖應用程式,例如導航應用程式。
news主要為新聞應用程式,例如報紙、雜誌或體育新聞應用程式。
productivity主要為效率提升應用程式,例如雲端儲存空間或工作場所應用程式。
social主要為社交應用程式,例如訊息、通訊、電子郵件或社群網路應用程式。
video主要為與影片或電影相關的應用程式,例如串流影片應用程式。

android:backupAgent
實作應用程式備份代理程式的類別名稱,為 BackupAgent 的子類別。屬性值是完整的類別名稱,例如 "com.example.project.MyBackupAgent"。不過為了精簡起見,如果名稱的第一個字元是半形句號,例如 ".MyBackupAgent",則會加到 <manifest> 元素中所指定套件名稱的後方。

這項屬性沒有預設值。名稱不得重複。

android:backupInForeground
表示即使應用程式位於等同於前景的狀態,系統也可以對其執行自動備份作業。系統會在自動備份作業期間關閉應用程式,因此請謹慎使用此屬性。將此標記設為 "true",可能會影響應用程式本身在運作期間的行為。

預設值為 "false",表示當應用程式在前景執行時 (例如音樂應用程式正在透過 startForeground() 狀態下的服務播放音樂),作業系統會避免對該應用程式進行備份。

android:banner
一種可繪製資源,用於為相關聯的項目提供延伸圖形橫幅。可與 <application> 標記搭配使用,為所有應用程式活動提供預設橫幅,或是與 <activity> 標記搭配使用,為特定活動提供橫幅。

系統會使用橫幅來表示 Android TV 主畫面上的應用程式。因此,只有當應用程式含有處理 CATEGORY_LEANBACK_LAUNCHER 意圖的活動時,才需要指定此屬性。

這項屬性會設為包含圖片的可繪製資源參照,例如 "@drawable/banner"。此屬性沒有預設橫幅。

詳情請參閱「提供主畫面橫幅」。

android:dataExtractionRules

應用程式可將此屬性設為 XML 資源,在其中指定規則,以決定您可以在備份或傳輸作業中從裝置複製哪些檔案和目錄。

如需 XML 檔案格式的相關資訊,請參閱「備份與還原」。

android:debuggable
指定是否可以對應用程式執行偵錯 (即使是在使用者模式的裝置上執行)。"true" 表示可以,"false" 表示不可以。預設值為 "false"
android:description
關於應用程式的文字敘述,為使用者可理解的內容,比應用程式標籤更長且淺顯易懂。此值已設為對字串資源的參照。與標籤不同,這不能是原始字串。沒有預設值。
android:enabled
指出 Android 系統能否將應用程式元件例項化。"true" 表示可以,"false" 表示不可以。如果值為 "true",每個元件的 enabled 屬性會決定是否啟用該元件。若值為 "false",則會覆寫元件專屬的值,且所有元件都會停用。

預設值為 "true"

android:extractNativeLibs

從 AGP 4.2.0 起,DSL 選項 useLegacyPackaging 取代了 extractNativeLibs 資訊清單屬性。請使用應用程式 build.gradle 檔案中的 useLegacyPackaging 設定原生資料庫的壓縮行為,不要使用資訊清單檔案中的 extractNativeLibs。詳情請參閱版本資訊中的「使用 DSL 封裝壓縮的原生資料庫」。

此屬性指出套件安裝程式是否會將原生資料庫從 APK 擷取至檔案系統。如果設為 "false",原生資料庫會以未壓縮的形式儲存在 APK 中。雖然您的 APK 可能較大,但應用程式的載入速度會更快,因為程式庫是在執行階段直接從 APK 載入。

extractNativeLibs 的預設值取決於 minSdkVersion 和您使用的 AGP 版本。在多數情況下,預設行為可能符合您的需求,因此您不必明確設定這個屬性。

android:fullBackupContent
這個屬性指向一個含有自動備份完整備份規則的 XML 檔案。這些規則會決定要備份的檔案。詳情請參閱自動備份功能的「XML 設定語法」。

此屬性為選用項目。如果未指定屬性值,自動備份功能會預設為包含大部分的應用程式檔案。詳情請參閱「已備份的檔案」。

android:fullBackupOnly
此屬性指出是否要在具備自動備份功能的裝置上使用這項功能。如果設為 "true",當應用程式安裝在搭載 Android 6.0 (API 級別 23) 以上版本的裝置上,就會執行自動備份功能。如果應用程式是在較舊的裝置上安裝,則會忽略此屬性,並執行鍵/值備份

預設值為 "false"

android:gwpAsanMode
此屬性指出是否使用GWP-ASan,此為原生記憶體配置器功能,可協助找出「使用已釋放記憶體」及「堆積緩衝區溢位」錯誤。

預設值為 "never"

android:hasCode
指出應用程式是否包含任何程式碼。"true" 表示包含,"false" 表示不包含。如果值為 "false",則系統不會在啟動元件時嘗試載入任何應用程式程式碼。預設值為 "true"

舉例來說,您的應用程式可能支援 Play Feature Delivery,且包含不會產生任何 DEX 檔案 (為 Android 平台進行最佳化的位元碼) 的功能模組。如有這種情況,您必須將模組資訊清單檔案中的此屬性設為 "false",以免發生執行階段錯誤。

android:hasFragileUserData
指出是否要在使用者解除安裝應用程式時顯示提示,詢問是否保留應用程式資料。預設值為 "false"
android:hardwareAccelerated
指出是否要為應用程式中的所有活動和檢視畫面啟用硬體加速轉譯功能。"true" 表示啟用,"false" 表示不啟用。如果您將 minSdkVersiontargetSdkVersion 設為 "14" 以上,則預設值為 "true",否則為 "false"

自 Android 3.0 (API 級別 11) 起,應用程式可使用硬體加速 OpenGL 轉譯器,提高許多常見 2D 圖形作業的效能。啟用硬體加速轉譯器後,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多數運算都會加速。

因此,就算應用程式沒有明確使用架構的 OpenGL 程式庫,也能讓動畫更流暢、捲動更順暢,並且改善整體回應靈敏度。

並非所有 OpenGL 2D 運算都會加速。如果您啟用了硬體加速轉譯器,請測試應用程式,讓其可以順利使用轉譯器。

詳情請參閱硬體加速指南。

android:icon
整個應用程式的圖示,以及每個應用程式元件的預設圖示。請參閱 <activity><activity-alias><service><receiver><provider> 元素個別的 icon 屬性。

這項屬性會設為包含圖片的可繪製資源參照,例如 "@drawable/icon"。沒有預設圖示。

android:isGame
指出應用程式是否為遊戲。系統可能會將分為遊戲的應用程式歸為一組,或將它們與其他應用程式分開顯示。預設為 "false"
android:isMonitoringTool

指出此應用程式是專為監控他人而設計。

注意:如果應用程式在資訊清單中宣告此屬性,開發人員必須遵循「追蹤軟體」政策,才能將應用程式發布到 Google Play。

沒有預設值。開發人員必須指定下列其中一個值:

說明
"parental_control"應用程式的設計目的是提供家長監護功能,特別鎖定想要確保兒童安全的家長為目標對象。
"enterprise_management"應用程式的設計目的是讓企業管理及追蹤分配給員工的裝置。
"other"應用程式的用途未於此表中另行指定。
android:killAfterRestore
指出在完整系統還原作業期間,應用程式在還原自身設定後是否會終止運作。單一套件還原作業絕不會導致應用程式關機。完整系統還原作業通常只會在首次設定手機時執行一次。第三方應用程式通常不需要使用這個屬性。

預設值為 "true",表示應用程式在完整系統還原作業期間處理完資料後,就會終止運作。

android:largeHeap
指出是否使用大型 Dalvik 堆積建立應用程式的程序。適用於為應用程式建立的所有處理程序。此屬性只適用於載入至處理程序的第一個應用程式。如果您使用共用的使用者 ID 讓多個應用程式使用同一個程序,則所有應用程式都必須一致使用這個選項,以免產生無法預測的結果。

大多數應用程式不需要使用這項屬性,而是專注於減少整體記憶體用量以提升效能。此外,啟用這個屬性無法保證記憶體的可用量會固定增加,因為某些裝置會受到其可用記憶體總量限制。

如要查詢執行階段的可用記憶體大小,請使用 getMemoryClass()getLargeMemoryClass() 方法。

android:label
使用者可理解的整體應用程式標籤,以及每個應用程式元件的預設標籤。請參閱 <activity><activity-alias><service><receiver><provider> 元素個別的 label 屬性。

這個標籤應設為字串資源的參照,這樣才能像使用者介面中的其他字串一樣進行本地化。不過為了方便起見,您也可以在開發應用程式時將其設為原始字串。

android:logo
整體應用程式的標誌,以及活動的預設標誌。這項屬性會設為包含圖片的可繪製資源參照,例如 "@drawable/logo"。沒有預設標誌。
android:manageSpaceActivity
Activity 子類別的完整名稱,系統可以啟動該子類別,讓使用者管理裝置上應用程式占用的記憶體。該活動也會透過 <activity> 元素宣告。
android:name
為應用程式實作的 Application 子類別完整名稱。應用程式處理程序啟動後,此類別會在應用程式的所有元件之前先進行例項化。

子類別為選用項目,大多數應用程式都不需要。如果沒有子類別,Android 會使用基本 Application 類別的例項。

android:networkSecurityConfig

指出包含您應用程式網路安全性設定的 XML 檔案名稱。這個值是對含有相應設定的 XML 資源檔案的參照。

這是在 API 級別 24 中新增的屬性。

android:permission
用戶端要與應用程式互動所需權限的名稱。此屬性可讓您輕鬆設定要套用至所有應用程式元件的權限。可藉由設定個別元件的 permission 屬性將其覆寫。

如要進一步瞭解權限,請參閱應用程式資訊清單總覽中的「權限」一節和「安全性提示」。

android:persistent
指出應用程式是否隨時保持運作。如果是,則為 "true";如果不是,則為 "false"。預設值為 "false"。應用程式通常不會設定這個標記。持續性模式僅適用於特定系統應用程式。
android:process
處理程序的名稱,應用程式的所有元件皆在此處理程序中執行。每個元件都可以設定專屬的 process 屬性來覆寫這項屬性的預設值。

根據預設,Android 會在需執行應用程式的第一個元件時,為應用程式建立處理程序。之後,所有元件都會在該處理程序中執行。處理程序的名稱與 <manifest> 元素設定的套件名稱相符。

只要將這項屬性設為與其他應用程式共用的程序名稱,您就可以安排讓兩個應用程式的元件在相同程序中執行,前提是這兩個應用程式也共用同一個使用者 ID,並且使用相同的憑證簽署。

如果指派給這個屬性的名稱開頭為半形冒號 (:),系統會視需要建立一個該應用程式專屬的新程序。如果程序名稱的開頭是小寫半形字元,則會建立採用該名稱的全域處理程序。全域處理程序可以與其他應用程式共用,以減少資源用量。

android:restoreAnyVersion
表示應用程式已準備好嘗試還原任何已備份的資料集,即使儲存該備份的應用程式版本比裝置當前安裝的版本還要新,此屬性也不受影響。將這項屬性設為 "true" 之後,即使版本不符且系統表示資料不相容,備份管理員仍會嘗試還原資料。請小心使用!

此屬性的預設值為 "false"

android:requestLegacyExternalStorage

指出應用程式是否停用限定範圍儲存空間

注意:視政策或應用程式相容性的相關變更而定,系統可能不會接受這項停用要求。

android:requiredAccountType
指定應用程式運作所需的帳戶類型。假如您的應用程式需要 Account,這個屬性的值必須對應應用程式所用的帳戶驗證器類型 (由 AuthenticatorDescription 定義,例如 "com.google")。

預設值為空值,表示應用程式「不需」任何帳戶就能運作。

由於設有限制的個人資料無法新增帳戶,因此指定這項屬性後,設有限制的個人資料就無法使用您的應用程式,除非您也宣告 android:restrictedAccountType 具備相同的值。

注意:如果帳戶資料可能揭露個人識別資訊,請務必宣告這個屬性,並將 android:restrictedAccountType 保留空值,這樣的話,設有限制的個人資料就無法透過您的應用程式存取擁有者的使用者個人資訊。

這是在 API 級別 18 中新增的屬性。

android:resizeableActivity

指定應用程式是否支援多視窗模式。您可以在 <activity><application> 元素中設定這個屬性。

如果將這項屬性設為 "true",使用者就能在分割畫面和任意形式模式下啟動活動。如果將這項屬性設為 ”false”,應用程式就無法在多視窗環境中進行測試或最佳化。系統可能仍會將活動置於套用相容模式的多視窗模式下。

此外,即使您將這項屬性設為 "true",也無法保證螢幕畫面 (例如子母畫面) 或其他螢幕上,不會顯示其他處於多視窗模式下的應用程式。因此,設定此標記不代表應用程式擁有專屬資源存取權。

如果應用程式指定的 API 級別為 24 以上,則預設值為 "true"

如果應用程式指定的 API 級別為 31 以上,則此屬性在小螢幕和大螢幕上的運作方式會有所不同:

  • 大螢幕 (sw >= 600dp) 裝置:所有應用程式皆支援多視窗模式。這項屬性會表明能否調整應用程式大小,而不是應用程式是否支援多視窗模式。如果 resizeableActivity="false",應用程式會在必要時進入相容模式,以符合螢幕尺寸。
  • 小螢幕 (sw < 600dp) 裝置:如果 resizeableActivity="true" 以及主要活動的最小寬度和最小高度都符合多視窗模式的要求,則應用程式支援多視窗模式。如果 resizeableActivity="false",無論活動的最小寬度和高度為何,應用程式都不支援多視窗模式。

注意:裝置製造商可覆寫 API 級別 31 的行為。

這個屬性已新增至 API 級別 24。

注意:任務的根活動值會套用至該任務啟動的所有其他活動。也就是說,如果工作的根層級活動可以調整大小,系統會將工作內的所有其他活動視為可調整大小。如果根層級活動無法調整大小,工作內的其他活動就無法調整大小。

android:restrictedAccountType
指出這個應用程式需要的帳戶類型,並表示設有限制的個人資料可以存取這類屬於擁有者的使用者帳戶。假如您的應用程式需要 Account,而且受限制的個人資料「可以」存取主要使用者的帳戶,這個屬性的值必須對應您應用程式使用的帳戶驗證器類型 (由 AuthenticatorDescription 定義,如 "com.google")。

預設值為空值,表示應用程式「不需」任何帳戶就能運作。

注意:指定這個屬性後,受限制的個人資料就能透過擁有者的使用者帳戶存取您的應用程式,可能會因此而洩漏個人識別資訊。如果帳戶可能會洩漏個人資訊,「請勿」使用這項屬性,而是改為宣告 android:requiredAccountType 屬性,讓設有限制的個人資料無法使用您的應用程式。

這是在 API 級別 18 中新增的屬性。

android:supportsRtl
宣告應用程式是否支援從右至左 (RTL) 的版面配置。

如果設為 "true",而 targetSdkVersion 設為 17 以上,系統將啟用並使用多種 RTL API,讓您的應用程式能夠顯示 RTL 版面配置。如果設為 "false" 或將 targetSdkVersion 設為 16 以下,則 RTL API 會遭到忽略或失效,且無論使用者所選語言代碼的版面配置方向為何,應用程式的行為都會相同。也就是說,您的版面配置一律是由左至右。

此屬性的預設值為 "false"

這項屬性於 API 級別 17 中新增。

android:taskAffinity
表示相依性名稱,適用於應用程式中的所有活動,除了使用專屬 taskAffinity 屬性設定不同相依性的活動以外。詳情請參閱該屬性。

根據預設,應用程式中的所有活動都具有相同的相依性。該相依性名稱與 <manifest> 元素設定的套件名稱相同。

android:testOnly
指出此應用程式是否僅用於測試。例如,它可能對外公開功能或資料,這麼做可能造成安全漏洞,但對於測試非常實用。這類 APK 只能透過 adb 安裝,無法發布至 Google Play。

只要按一下「Run」圖示 ,Android Studio 就會自動新增這個屬性。

android:theme
對樣式資源的參照,用於為應用程式中的所有活動定義預設主題。個別活動可以透過設定專屬的 theme 屬性來覆寫預設值。詳情請參閱「樣式與主題」一文。
android:uiOptions
針對活動 UI 的額外選項。必須是下列其中一個值:
說明
"none"沒有額外的 UI 選項。此為預設值。
"splitActionBarWhenNarrow"當水平空間受限時 (例如手機處於直向模式),在畫面底部新增一列,以便在「應用程式列」(又稱為「動作列」) 中顯示操作項目。應用程式列將分成畫面頂端的導航部分和底部的操作項目列,不會在畫面頂端顯示少量操作項目。這表示操作項目和頂端的導覽列與標題元素,都能獲得適當空間。選單項目不會分割為兩個長條,一律會一同顯示。

如要進一步瞭解應用程式列,請參閱「新增應用程式列」一文。

這是在 API 級別 14 中新增的屬性。

android:usesCleartextTraffic
表示應用程式是否打算使用明文網路流量 (例如純文字 HTTP)。 針對以 API 級別 27 以下為目標的應用程式,預設值為 "true"。如果應用程式指定的 API 級別為 28 以上,則預設值為 "false"

當屬性設為 "false" 時,HTTP 和 FTP 堆疊、DownloadManagerMediaPlayer 等平台元件會拒絕應用程式使用明文流量的要求。

強烈建議第三方資料庫也依循這項設定。避免使用明文流量的主要原因在於,這類流量缺乏機密性、真實性以及防範竄改的保護機制。網路攻擊者不僅可以竊聽傳輸的資料,還可以在系統不會偵測到的情況下修改該資料。

系統只能盡可能依循這個標記,原因在於根據提供給 Android 應用程式的存取級別,系統不可能阻止所有來自 Android 應用程式的明文流量。舉例來說,系統無法預期 Socket API 會依循此標記,因為該 API 無法判斷此標記的流量是否為明文流量。

不過,來自應用程式的大部分網路流量是由較高層級的網路堆疊和元件處理,它們可從 ApplicationInfo.flagsNetworkSecurityPolicy.isCleartextTrafficPermitted() 讀取該標記,進而依循該標記。

注意:如果應用程式指定的 API 級別為 26 以上,WebView 會依循此屬性。

在應用程式開發期間,可使用 StrictMode 識別來自應用程式的任何明文流量。詳情請參閱 StrictMode.VmPolicy.Builder.detectCleartextNetwork()

這是在 API 級別 23 中新增的屬性。

如有 Android 網路安全性設定,則 Android 7.0 (API 級別 24) 以上版本將忽略此標記。

android:vmSafeMode
指出應用程式是否要讓虛擬機器 (VM) 在安全模式下運作。預設值為 "false"

這是在 API 級別 8 中新增的屬性,若值為 "true" 會停用 Dalvik 即時 (JIT) 編譯器。

此屬性在 API 級別 22 中進行調整,若值為 "true" 會停用 ART 預先 (AOT) 編譯器。

導入版本:
API 級別 1
另請參閱:
<activity>
<service>
<receiver>
<provider>