1. 程式人生 > >Android官方文件—APP清單(uses-sdk)

Android官方文件—APP清單(uses-sdk)

<uses-sdk>

語法:

<uses-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer" />

包含於:

<manifest>

說明:

允許您通過API級別整數表達應用程式與Android平臺的一個或多個版本的相容性。應用程式表示的API級別將與給定Android系統的API級別進行比較,這可能因不同的Android裝置而異。

儘管名稱如此,但此元素用於指定API級別,而不是SDK(軟體開發工具包)或Android平臺的版本號。 API級別始終是一個整數。您無法從其關聯的Android版本號中派生API級別(例如,它與主要版本或主要版本和次要版本的總和不同)。

另請閱讀有關版本控制應用程式的文件。

屬性:

android:minSdkVersion

一個整數,指定應用程式執行所需的最低API級別。如果系統的API級別低於此屬性中指定的值,則Android系統將阻止使用者安裝應用程式。您應該始終宣告此屬性。

警告:如果您未宣告此屬性,系統將採用預設值“1”,表示您的應用程式與所有Android版本相容。如果您的應用程式與所有版本不相容(例如,它使用API​​級別3中引入的API)並且您尚未宣告正確的minSdkVersion,那麼當安裝在API級別小於3的系統上時,應用程式將在崩潰期間崩潰嘗試訪問不可用的API時的執行時。因此,請務必在minSdkVersion屬性中宣告相應的API級別。

android:targetSdkVersion

一個整數,指定應用程式所針對的API級別。如果未設定,則預設值等於給予minSdkVersion的值。

此屬性通知系統您已針對目標版本進行了測試,系統不應啟用任何相容性行為來維持應用程式與目標版本的向前相容性。該應用程式仍然可以在舊版本(低至minSdkVersion)上執行。

隨著Android隨著每個新版本的發展,一些行為甚至外觀都可能會發生變化。但是,如果平臺的API級別高於應用程式的targetSdkVersion宣告的版本,則系統可能會啟用相容性行為,以確保您的應用程式繼續以您期望的方式工作。您可以通過指定targetSdkVersion以匹配執行它的平臺的API級別來禁用此類相容性行為。例如,將此值設定為“11”或更高允許系統在Android 3.0或更高版本上執行時將新的預設主題(Holo)應用於您的應用,並在大螢幕上執行時禁用螢幕相容模式(因為支援API) 11級隱含支援更大的螢幕)。

根據您為此屬性設定的值,系統可以啟用許多相容性行為。其中一些行為由Build.VERSION_CODES參考中的相應平臺版本描述。

要在每個Android版本中維護您的應用程式,您應該增加此屬性的值以匹配最新的API級別,然後在相應的平臺版本上徹底測試您的應用程式。

引入於:API Level 4

android:maxSdkVersion

一個整數,指定應用程式執行的最大API級別。

在Android 1.5,1.6,2.0和2.0.1中,系統在安裝應用程式時以及在系統更新後重新驗證應用程式時檢查此屬性的值。在任何一種情況下,如果應用程式的maxSdkVersion屬性低於系統本身使用的API級別,則系統將不允許安裝應用程式。在系統更新後重新驗證的情況下,這會有效地從裝置中刪除您的應用程式。

要說明此屬性在系統更新後如何影響您的應用程式,請考慮以下示例:

在Google Play上釋出了在其清單中宣告maxSdkVersion =“5”的應用程式。裝置執行Android 1.6(API級別4)的使用者下載並安裝應用程式。幾周後,使用者會收到Android 2.0(API級別5)的無線系統更新。安裝更新後,系統會檢查應用程式的maxSdkVersion併成功重新驗證它。應用程式正常執行。但是,一段時間後,裝置會收到另一個系統更新,這次是針對Android 2.0.1(API級別6)。更新後,系統無法再重新驗證應用程式,因為系統自身的API級別(6)現在高於應用程式支援的最大值(5)。系統會阻止應用程式對使用者可見,實際上將其從裝置中刪除。

警告:不建議宣告此屬性。首先,沒有必要將屬性設定為阻止將應用程式部署到Android平臺的新版本上的方法。根據設計,該平臺的新版本完全向後相容。您的應用程式應該在新版本上正常執行,前提是它只使用標準API並遵循開發最佳實踐。其次,請注意,在某些情況下,宣告屬性可能會導致在系統更新到更高的API級別後將應用程式從使用者的裝置中刪除。大多數可能安裝應用程式的裝置將通過無線方式定期進行系統更新,因此在設定此屬性之前,應考慮它們對應用程式的影響。

引入於:API Level 4

什麼是API級別?


API Level是一個整數值,用於唯一標識Android平臺版本提供的框架API修訂版。

Android平臺提供了一個框架API,應用程式可以使用它與底層Android系統進行互動。框架API包括:

  • 一組核心包和類
  • 用於宣告清單檔案的XML元素和屬性集
  • 用於宣告和訪問資源的一組XML元素和屬性
  • 一組意圖
  • 應用程式可以請求的一組許可權,以及系統中包含的許可權強制執行

Android平臺的每個連續版本都可以包含其提供的Android應用程式框架API的更新。

設計框架API的更新,以便新API與早期版本的API保持相容。也就是說,API中的大多數更改都是附加的,並引入了新功能或替代功能。隨著API的某些部分升級,舊的替換部件已棄用但未被刪除,因此現有應用程式仍可使用它們。在極少數情況下,可以修改或刪除API的一部分,儘管通常只需要這些更改來確保API穩健性和應用程式或系統安全性。早期版本中的所有其他API部件無需修改即可繼續使用。

Android平臺提供的框架API使用稱為“API級別”的整數識別符號指定。每個Android平臺版本僅支援一個API級別,但支援是所有早期API級別(低至API級別1)的隱含。 Android平臺的初始版本提供了API級別1,後續版本增加了API級別。

下表指定了每個Android平臺版本支援的API級別。有關執行每個版本的裝置的相對數量的資訊,請參閱“平臺版本”儀表板頁面。

Android中API級別的使用


API級別識別符號在確保使用者和應用程式開發人員獲得最佳體驗方面發揮著關鍵作用:

  • 它允許Android平臺描述它支援的最大框架API修訂版
  • 它允許應用程式描述它們所需的框架API修訂版
  • 它允許系統協商使用者裝置上的應用程式安裝,以便不安裝與版本不相容的應用程式。

每個Android平臺版本都在Android系統內部儲存其API級別識別符號。

應用程式可以使用框架API提供的清單元素 - <uses-sdk> - 來描述它們能夠執行的最低和最高API級別,以及它們旨在支援的首選API級別。該元素提供三個關鍵屬性:

  • android:minSdkVersion - 指定應用程式能夠執行的最低API級別。預設值為“1”。
  • android:targetSdkVersion - 指定應用程式執行的API級別。在某些情況下,這允許應用程式使用目標API級別中定義的清單元素或行為,而不是僅限於使用為最低API級別定義的清單元素或行為。
  • android:maxSdkVersion - 指定應用程式能夠執行的最大API級別。重要提示:在使用此屬性之前,請閱讀<uses-sdk>文件。

例如,要指定應用程式執行所需的最低系統API級別,應用程式將在其清單中包含帶有android:minSdkVersion屬性的<uses-sdk>元素。 android:minSdkVersion的值將是對應於應用程式可以執行的最早版本Android平臺的API級別的整數。

當用戶嘗試安裝應用程式或在系統更新後重新驗證應用程式時,Android系統首先檢查應用程式清單中的<uses-sdk>屬性,並將這些值與其自己的內部API級別進行比較。只有滿足以下條件,系統才允許安裝:

  •   如果聲明瞭android:minSdkVersion屬性,則其值必須小於或等於系統的API Level整數。如果未宣告,則系統假定應用程式需要API級別1。
  • 如果聲明瞭android:maxSdkVersion屬性,則其值必須等於或大於系統的API Level整數。如果未宣告,則系統假定應用程式沒有最大API級別。有關係統如何處理此屬性的更多資訊,請閱讀<uses-sdk>文件。

在應用程式的清單中宣告時,<uses-sdk>元素可能如下所示:

<manifest>
  <uses-sdk android:minSdkVersion="5" />
  ...
</manifest>

應用程式在android:minSdkVersion中宣告API級別的主要原因是告訴Android系統它正在使用在指定的API級別中引入的API。如果應用程式以某種方式安裝在具有較低API級別的平臺上,那麼當它嘗試訪問不存在的API時,它將在執行時崩潰。如果應用程式所需的最低API級別高於目標裝置上的平臺版本,則系統會通過不允許安裝應用程式來防止此類結果。

例如,android.appwidget包是在API Level 3中引入的。如果應用程式使用該API,則必須宣告一個值為“3”的android:minSdkVersion屬性。然後,該應用程式可以安裝在Android 1.5(API Level 3)和Android 1.6(API Level 4)等平臺上,但不能安裝在Android 1.1(API Level 2)和Android 1.0平臺(API Level 1)上。

有關如何指定應用程式的API級別要求的更多資訊,請參閱清單檔案文件的<uses-sdk>部分。

發展考慮因素


以下部分提供了在開發應用程式時應考慮的API級別相關資訊。

應用向前相容性

Android應用程式通常與新版本的Android平臺向前相容。

由於幾乎所有對框架API的更改都是附加的,因此使用任何給定版本的API(由其API級別指定)開發的Android應用程式與更高版本的Android平臺和更高的API級別向前相容。應用程式應該能夠在Android平臺的所有更高版本上執行,除非在應用程式使用稍後因某種原因刪除的API的一部分的獨立情況下。

前向相容性非常重要,因為許多Android驅動的裝置都會收到無線(OTA)系統更新。使用者可以安裝您的應用程式併成功使用它,然後再接收新版Android平臺的OTA更新。安裝更新後,您的應用程式將在環境的新執行時版本中執行,但具有應用程式所依賴的API和系統功能。

在某些情況下,API下面的更改(例如底層系統本身的更改)可能會影響您在新環境中執行的應用程式。因此,作為應用程式開發人員,瞭解應用程式在每個系統環境中的外觀和行為方式非常重要。為了幫助您在各種版本的Android平臺上測試您的應用程式,Android SDK包含您可以下載的多個平臺。每個平臺都包含一個相容的系統映像,您可以在AVD中執行該映像以測試您的應用程式。

應用向後相容性

Android應用程式不一定與Android平臺的版本向後相容,而不是與編譯它們的版本相比。

每個新版本的Android平臺都可以包含新的框架API,例如那些使應用程式可以訪問新平臺功能或替換現有API部件的API。當在新平臺上執行時,應用程式可以訪問新API,並且如上所述,在API級別指定的平臺的更高版本上執行時也是如此。相反,由於平臺的早期版本不包含新API,因此使用新API的應用程式無法在這些平臺上執行。

雖然Android驅動的裝置不太可能降級到該平臺的先前版本,但重要的是要意識到該領域可能有許多裝置執行早期版本的平臺。即使在接收OTA更新的裝置中,有些裝置可能會滯後,並且可能無法在相當長的時間內收到更新。

選擇平臺版本和API級別

在開發應用程式時,您需要選擇要編譯應用程式的平臺版本。通常,您應該針對應用程式可以支援的最低版本的平臺編譯應用程式。

您可以通過針對連續較低的構建目標編譯應用程式來確定可能的最低平臺版本。確定最低版本後,應使用相應的平臺版本(和API級別)建立AVD並完全測試應用程式。確保在應用程式的清單中聲明瞭android:minSdkVersion屬性,並將其值設定為平臺版本的API級別。

宣告最低API級別

如果您構建的應用程式使用最新平臺版本中引入的API或系統功能,則應將android:minSdkVersion屬性設定為最新平臺版本的API級別。這可確保使用者只有在裝置執行相容版本的Android平臺時才能安裝應用程式。反過來,這可以確保您的應用程式可以在其裝置上正常執行。

如果您的應用程式使用最新平臺版本中引入的API但未宣告android:minSdkVersion屬性,那麼它將在執行最新版本平臺的裝置上正常執行,但不能在執行早期版本平臺的裝置上執行。在後一種情況下,當應用程式嘗試使用早期版本中不存在的API時,應用程式將在執行時崩潰。

針對更高的API級別進行測試

編譯應用程式後,應確保在應用程式的android:minSdkVersion屬性中指定的平臺上進行測試。為此,請建立一個使用應用程式所需平臺版本的AVD。此外,為了確保向前相容性,您應該在使用比應用程式使用的API級別更高的API級別的所有平臺上執行和測試應用程式。

Android SDK包含您可以使用的多個平臺版本,包括最新版本,並提供可用於下載其他平臺版本的更新程式工具。

要訪問更新程式,請使用位於<sdk> / tools目錄中的android命令列工具。您可以通過執行android sdk來啟動SDK更新程式。您也可以簡單地雙擊android.bat(Windows)或android(OS X / Linux)檔案。

要在模擬器中針對不同平臺版本執行應用程式,請為要測試的每個平臺版本建立AVD。有關AVD的更多資訊,請參閱建立和管理虛擬裝置。如果您使用物理裝置進行測試,請確保您瞭解其執行的Android平臺的API級別。有關平臺版本及其API級別的列表,請參閱本文件頂部的表格。

按API級別過濾參考文件


Android Developers網站上的參考文件頁面在每個頁面的右上角區域提供“按API級別過濾”控制元件。您可以使用該控制元件僅顯示應用程式實際可訪問的API部分的文件,具體取決於它在清單檔案的android:minSdkVersion屬性中指定的API級別。

要使用過濾,請選中複選框以啟用過濾,就在頁面搜尋框的下方。然後將“按API級別過濾”控制元件設定為與應用程式指定的API級別相同的API級別。請注意,在以後的API級別中引入的API會變灰並且其內容會被遮蔽,因為您的應用程式無法訪問它們。

按文件中的API級別過濾並未提供每個API級別中新增或引入的內容的檢視 - 它只是提供了一種檢視與給定API級別關聯的整個API的方法,同時排除了在以後的API級別中引入的API元素。

如果您決定不想過濾API文件,只需使用複選框禁用該功能。預設情況下,禁用API級別過濾,以便您可以檢視完整的框架API,無論API級別如何。

另請注意,各個API元素的參考文件指定了引入每個元素的API級別。包和類的API級別在每個文件頁面的內容區域的右上角指定為“自<api level>”。類成員的API級別在其詳細描述標題中指定,位於右邊距。