AndroidManifest.xml文件詳解(uses-sdk)

語法(SYNTAX):

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

被包含於(CONTAINED IN):

<manifest>

說明(DESCRIPTION):

這個元素用API 的級別(一個整數)來說明應用程序會跟哪些Android平臺版本兼容。由應用程序給出的API級別會跟給定不同的設備中的Android系統的API級別比較。

盡管這個元素被用於指定API的級別,但它並不是SDK(軟件開發工具包)或Android平臺的版本號。API級別始終是用一個整數表示。不能夠從根API級別關聯的Android版本號中獲取API級別信息(例如,它不是主版本號,也不是主版本號和次版本號的和)。

屬性(ATTRIBUTES):

android:minSdkVersion

一個整數,它指定瞭應用程序運行所需要的最小的API級別。如果Android系統的API級別被該應用程序清單中的這個屬性值小,那麼系統就阻止安裝該應用程序,應該始終聲明這個屬性。

警告:如果沒有聲明這個屬性,Android系統就會假設一個默認值1,它表明該應用程序會跟所有的Android版本兼容。如果應用不是跟所有的Android版本兼容(例如,應用要使用在API Level 3中引入的API),並且也沒有聲明正確的minSdkVersion屬性,那麼當應用安裝到API Level 3小的系統上時,應用程序會在視圖訪問無效的API時崩潰。由於這個原因,必須要在minSdkVersion屬性中聲明適當的API Level。

android:targetSdkVersiion

一個整數,它指定瞭應用程序要運行的目標的API級別。如果沒有設置,它的默認值等於給定的minSdkVersion屬性值。

這個屬性用於通知系統,應用測試時所針對的目標平臺版本,並且系統不應該啟用任何兼容行為來維護應用程序跟目標平臺版本的向前兼容性。應用程序依然能夠運行在較低版本的平臺上(一直到minSdkVersion屬性值所指定的版本)。

在Android演進的每個新版本中,都會有一些行為甚至外觀的改變。但是,如果平臺的API級別比應用程序聲明的targetSdkVersion的值大,那麼系統就可以啟用兼容行為,以便確保應用程序能夠繼續執行期望的工作。因此,可以通過指定應用程序所運行的目標SDK版本(targetSdkVersion)來禁止啟用這種兼容行為,例如,把這個屬性值設置為11或更大,就會允許系統把新的默認主題應用給在Android3.0或更高版本平臺之上的應用程序,並且在運行在較大屏幕的設備上時,也禁止使用屏幕兼容模式(因為針對API Level 11的支持,暗示著對較大屏幕的支持)。

系統會基於這個屬性所設置的值,啟用很多兼容行為。這些行為的一些內容通過相應平臺版本的Build.VERSION_CODES參考來描述。(http://developer.android.com/reference/android/os/Build.VERSION_CODES.html)

應用程序為瞭跟隨每個Android的發佈版本,應該增長這個屬性值,讓它跟最新的API級別相匹配,然後再對應的平臺版本上進行完整的測試。

這個屬性在API Leve 4中被引入。

android:maxSdkVersion

一個整數,表明該應用要運行的最大的API Level。

在Android1.5、1.6、2.0和2.0.1中,在安裝應用程序時,系統會檢查這個值,並且在系統升級後也會重新驗證該應用程序的這個值。另外,如果應用程序的maxSdkVersion屬性值比系統自身所使用的API Level低,那麼系統就不會允許應用程序被安裝,在因系統升級而重新驗證的情況中,這種情況所帶來的影響是把該應用程序從設備上刪除。

以下是系統升級更新後,這個屬性是如何影響應用程序的例子:

一個發佈到Google Play上的應用程序,在它的清單中聲明瞭maxSdkVersion=”5”。一個運行Android1.6(API Level 4)的用戶設備下載並安裝瞭該應用程序。幾周之後,用戶把系統升級到Android2.0(API Level 5),升級後,系統會檢查應用程序的maxSdkVersion屬性,並成功的重新的驗證瞭它。該應用程序能夠正常運行。但是,不久之後,該設備的系統又升級到Android2.0.1(API Level 6),升級之後的系統,不能在重新驗證該應用程序瞭,因為系統自己的API Level(6)比該應用程序所支持的最大API Level還有大,因此系統會阻止把該應用程序顯示給用戶,就像把該應用程序從設備刪除的效果一樣。

警告:不推薦聲明這個屬性,首先,沒有必要設置這個屬性是因為,這樣會阻止該應用程序在新發佈的Android平臺版本上運行。通過設計,新的平臺版本時完全向後兼容的。該應用程序應該在升級後的平臺上能夠正常運行。其二,要註意的是,在某些情況中,聲明這個屬性在用戶設備的系統升級較高的API Level之後,能夠導致該應用程序被刪除。大多數應用所在的設備都會定期的接到在線升級的請求,因此在設置這個屬性之前,要仔細考慮該屬性給應用程序所帶來的影響。

在Android的未來版本中(Android2.0.1除外),在安裝或重驗證期間,將不再檢查或強制要求maxSdkVersion屬性。但Google Play在把應用程序展示給用戶下載的時候,會繼續使用這個屬性作為過濾條件。

這個屬性在API Level 4中被引入。

引入版本(INTRODUCED IN):

API Level 1

 

 

摘自 FireOfStar的專欄

發佈留言