API級(jí)別是什么
當(dāng)你開發(fā)你的Android應(yīng)用程序時(shí),了解該平臺(tái)API變更管理的基本方法和概念是很有幫助的。同樣的,知道API級(jí)別標(biāo)識(shí)以及該標(biāo)識(shí)如何保障你的應(yīng)用與實(shí)際硬件設(shè)備相兼容對(duì)于開發(fā)及后續(xù)的發(fā)布、維護(hù)都是有益的。API級(jí)別是一個(gè)整數(shù)值,它唯一標(biāo)識(shí)了一個(gè)具體版本的Android平臺(tái),及其框架的API的版本。
Android平臺(tái)提供了一套框架API,使得應(yīng)用程序可以與系統(tǒng)底層進(jìn)行交互。該框架API由以下模塊組成:
- 一組核心的包和類
- 清單(manifest)文件的XML元素和屬性聲明
- 資源文件的XML元素和屬性聲明及訪問形式
- 各類意圖(Intents)
- 應(yīng)用程序可以請(qǐng)求的各類授權(quán),以及系統(tǒng)中包含的授權(quán)執(zhí)行
每個(gè)Android平臺(tái)的后續(xù)版本會(huì)包括它提供的更新的Andr??oid應(yīng)用程序框架的API。
該框架的API的更新設(shè)計(jì),使高版本的API與早期版本兼容。也就是說(shuō),在新版本API中大多數(shù)都是新增功能,和引進(jìn)新的或替代的功能。作為API的部分升級(jí),老的替換的部分已過時(shí),但不會(huì)從新版本中刪除,使得已有的應(yīng)用程序仍然可以使用它們。在極少數(shù)情況下,舊版本API的部分可能被修改或刪除,通常這種變化是為了保障API的穩(wěn)定性及應(yīng)用程序或系統(tǒng)的安全。所有其他早期版??本的API將不做修改的保留。
一個(gè)Android平臺(tái)提供的框架API,被指定一個(gè)整數(shù)標(biāo)識(shí)符,稱為“API級(jí)別”。每一個(gè)版本的Android平臺(tái)只支持有一個(gè)API級(jí)別,雖然該支持是隱含地包括了所有早期的API級(jí)別(一直到API級(jí)別1級(jí))。 Andr??oid平臺(tái)的最初版本提供的框架API級(jí)別是1級(jí),隨后的版本依次遞增。
下表說(shuō)明了具體平臺(tái)版本和支持的API級(jí)別的對(duì)應(yīng)關(guān)系。
平臺(tái)版本 |
API級(jí)別 |
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 |
平臺(tái)版本 API級(jí)別
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級(jí)別
API級(jí)別標(biāo)識(shí)為保證用戶和應(yīng)用程序開發(fā)者的最佳體驗(yàn),起了關(guān)鍵作用:
- 它讓Android平臺(tái)可以描述它支持的框架API的最高版本
- 它讓應(yīng)用程序可以描述它需要的框架API版本
- 它使得系統(tǒng)可以在硬件設(shè)備上安裝應(yīng)用程序時(shí)能夠檢查版本是否匹配,使得版本不兼容的應(yīng)用程序不會(huì)被錯(cuò)誤安裝在設(shè)備之上.
每個(gè)版本的Android平臺(tái)都在其內(nèi)部存儲(chǔ)了自己的API級(jí)別標(biāo)識(shí)。
應(yīng)用程序可以用框架API提供的清單文件元素 — <uses-sdk> 來(lái)描述該應(yīng)用程序可以運(yùn)行的最小和最大API級(jí)別,以及應(yīng)用程序開發(fā)者設(shè)計(jì)期望運(yùn)行的平臺(tái)版本。三種屬性分別描述如下:
android:minSdkVersion — 指明該應(yīng)用程序可以運(yùn)行的API最低版本。默認(rèn)是“1”。
android:targetSdkVersion — 指明該應(yīng)用程序設(shè)計(jì)時(shí)期望運(yùn)行的目標(biāo)API版本。這允許應(yīng)用程序使用目標(biāo)API級(jí)別下定義的清單元素或行為,而不是只限于使用最低API級(jí)別定義的內(nèi)容。
android:maxSdkVersion — 指明該應(yīng)用程序可以運(yùn)行的最高API級(jí)別。
用戶嘗試安裝一個(gè)應(yīng)用程序,或者在系統(tǒng)升級(jí)后重驗(yàn)證應(yīng)用程序的時(shí)候,Android系統(tǒng)首先會(huì)檢查應(yīng)用程序的清單文件中的<uses-sdk>屬性,將其與系統(tǒng)內(nèi)部API級(jí)別對(duì)比。系統(tǒng)只有在滿足下列情況時(shí)才允許進(jìn)行應(yīng)用程序安裝:
- 如果聲明了
android:minSdkVersion 屬性,其屬性值必須小于或等于該系統(tǒng)的API級(jí)別對(duì)應(yīng)的整數(shù)值。如果未聲明,系統(tǒng)會(huì)默認(rèn)該應(yīng)用程序運(yùn)行需要的最低API級(jí)別是1。
- 如果聲明了
android:maxSdkVersion 屬性,其屬性值必須等于或大于該系統(tǒng)的API級(jí)對(duì)應(yīng)的整數(shù)值。 如果未聲明,系統(tǒng)會(huì)默認(rèn)該應(yīng)用程序沒有最高API級(jí)別限制。
應(yīng)用程序清單文件中聲明該屬性后, <uses-sdk> 元素看起來(lái)應(yīng)類似于下面的例子:
- API Levels" name=image_operate_69861311043279109 alt="[轉(zhuǎn)載]Android - API Levels" src="http://s14.sinaimg.cn/middle/48a45b95xa8630b496c5d&690" real_src="http://s14.sinaimg.cn/middle/48a45b95xa8630b496c5d&690">
這樣做的主要原因是,應(yīng)用程序會(huì)通過android:miniSdkVersion聲明的API級(jí)別來(lái)告知系統(tǒng)——該應(yīng)用程序使用的API是指定引入的API級(jí)別。假如沒有這種屬性聲明,一個(gè)應(yīng)用程序如果因?yàn)槟承┎恢脑虮话惭b在低級(jí)別API系統(tǒng)之上,那么該應(yīng)用程序會(huì)在運(yùn)行時(shí)因?yàn)閲L試訪問不存在的API而崩潰。為此,Android系統(tǒng)通過不允許應(yīng)用程序被安裝在不滿足其最低API級(jí)別要求的目標(biāo)硬件上來(lái)防止此類結(jié)果發(fā)生。
例如,android.appwidget 類包是在 API 級(jí)別 3 中開始引入的。如果一個(gè)應(yīng)用程序使用了這個(gè) API ,就必須通過指明 android:minSdkVersion 屬性為 3 來(lái)聲明運(yùn)行的最低要求。于是,該應(yīng)用程序就可以在 Android 1.5 ( API 級(jí)別 3 級(jí))、 Android 1.6 (API級(jí)別4級(jí))等平臺(tái)上安裝,但是在Android 1.1 (API級(jí)別2級(jí))和 Android 1.0 平臺(tái)(API級(jí)別1級(jí))上卻是無(wú)法安裝的
|