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級別在其詳細描述標題中指定,位於右邊距。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章