API級別是什么
當你開發你的Android應用程序時,了解該平臺API變更管理的基本方法和概念是很有幫助的。同樣的,知道API級別標識以及該標識如何保障你的應用與實際硬件設備相兼容對于開發及后續的發布、維護都是有益的。API級別是一個整數值,它唯一標識了一個具體版本的Android平臺,及其框架的API的版本。
Android平臺提供了一套框架API,使得應用程序可以與系統底層進行交互。該框架API由以下模塊組成:
每個Android平臺的后續版本會包括它提供的更新的Andr??oid應用程序框架的API。
該框架的API的更新設計,使高版本的API與早期版本兼容。也就是說,在新版本API中大多數都是新增功能,和引進新的或替代的功能。作為API的部分升級,老的替換的部分已過時,但不會從新版本中刪除,使得已有的應用程序仍然可以使用它們。在極少數情況下,舊版本API的部分可能被修改或刪除,通常這種變化是為了保障API的穩定性及應用程序或系統的安全。所有其他早期版??本的API將不做修改的保留。
一個Android平臺提供的框架API,被指定一個整數標識符,稱為“API級別”。每一個版本的Android平臺只支持有一個API級別,雖然該支持是隱含地包括了所有早期的API級別(一直到API級別1級)。 Andr??oid平臺的最初版本提供的框架API級別是1級,隨后的版本依次遞增。
下表說明了具體平臺版本和支持的API級別的對應關系。
平臺版本 | API級別 |
Android 3.0 | 11 |
Android 2.3.3 | 10 |
Android 2.3 | 9 |
Android 2.2 | 8 |
Android 2.1 | 7 |
Android 2.0.1 | 6 |
Android 2.0 | 5 |
Android 1.6 | 4 |
Android 1.5 | 3 |
Android 1.1 | 2 |
Android 1.0 | 1 |
android 3.0 11
android 2.3.3 10
android 2.3 9
android 2.2 8
android 2.1 7
android 2.0.1 6
android 2.0 5
android 1.6 4
android 1.5 3
在Android中使用API級別
每個版本的Android平臺都在其內部存儲了自己的API級別標識。
應用程序可以用框架API提供的清單文件元素 — <uses-sdk>
來描述該應用程序可以運行的最小和最大API級別,以及應用程序開發者設計期望運行的平臺版本。三種屬性分別描述如下:
android:minSdkVersion
— 指明該應用程序可以運行的API最低版本。默認是“1”。android:targetSdkVersion
— 指明該應用程序設計時期望運行的目標API版本。這允許應用程序使用目標API級別下定義的清單元素或行為,而不是只限于使用最低API級別定義的內容。android:maxSdkVersion
— 指明該應用程序可以運行的最高API級別。 用戶嘗試安裝一個應用程序,或者在系統升級后重驗證應用程序的時候,Android系統首先會檢查應用程序的清單文件中的<uses-sdk>屬性,將其與系統內部API級別對比。系統只有在滿足下列情況時才允許進行應用程序安裝:
android:minSdkVersion
屬性,其屬性值必須小于或等于該系統的API級別對應的整數值。如果未聲明,系統會默認該應用程序運行需要的最低API級別是1。
android:maxSdkVersion
屬性,其屬性值必須等于或大于該系統的API級對應的整數值。
如果未聲明,系統會默認該應用程序沒有最高API級別限制。 應用程序清單文件中聲明該屬性后, <uses-sdk>
元素看起來應類似于下面的例子:
這樣做的主要原因是,應用程序會通過android:miniSdkVersion聲明的API級別來告知系統——該應用程序使用的API是指定引入的API級別。假如沒有這種屬性聲明,一個應用程序如果因為某些不知名的原因被安裝在低級別API系統之上,那么該應用程序會在運行時因為嘗試訪問不存在的API而崩潰。為此,Android系統通過不允許應用程序被安裝在不滿足其最低API級別要求的目標硬件上來防止此類結果發生。
例如,android.appwidget
類包是在
API
級別
3
中開始引入的。如果一個應用程序使用了這個
API
,就必須通過指明
android:minSdkVersion
屬性為
3
來聲明運行的最低要求。于是,該應用程序就可以在
Android 1.5
(
API
級別
3
級)、
Android 1.6 (API級別4級)等平臺上安裝,但是在Android 1.1 (API級別2級)和 Android 1.0 平臺(API級別1級)上卻是無法安裝的