前言html
本章內容爲開發者指南(Dev Guide)/Appendix/Android API Levels,版本爲Android3.0 r1,翻譯來自:"jackeylu",歡迎你們訪問他的博客:" http://jackeylu.wordpress.com/",再次感謝"jackeylu" !期待你一塊兒參與翻譯Android的相關資料,聯繫我over140@gmail.com。
原文app
http://developer.android.com/guide/appendix/api-levels.html框架
Android API Levelside
在本文中wordpress
參見
<uses-sdk> manifest element
當你開發你的Android應用程序時,瞭解該平臺API變動管理的基本方法和概念是頗有幫助的。一樣的,知道API級別標識以及該標識如何保障你的應用與實際硬件設備相兼容對於開發及後續的發佈、維護都是有益的。
本節內容告訴你API級別的知識,以及它如何影響你開發和使用的應用。
關於如何使用「以API級別進行過濾」來使用API參考手冊,從本文末尾的文檔過濾(Filtering the documentation)中能夠獲得更多信息。
API級別是什麼?(What is API Level?)
API級別是一個整數值,它惟一標識了一個具體版本的Android平臺,及其框架的API的版本。
Android平臺提供了一套框架API,使得應用程序能夠與系統底層進行交互。該框架API由如下模塊組成:
每一個Android平臺的後續版本會包括它提供的更新的Android應用程序框架的API。
該框架的API的更新設計,使高版本的API與早期版本兼容。也就是說,在新版本API中大多數都是新增功能,和引進新的或替代的功能。做爲API的部分升級,老的替換的部分已過期,但不會重新版本中刪除,使得已有的應用程序仍然可使用它們。在極少數狀況下,舊版本API的部分可能被修改或刪除,一般這種變化是爲了保障API的穩定性及應用程序或系統的安全。全部其餘早期版本的API將不作修改的保留。
一個Android平臺提供的框架API,被指定一個整數標識符,稱爲「API級別」。每個版本的Android平臺只支持有一個API級別,雖然該支持是隱含地包括了全部早期的API級別(一直到API級別1級)。 Android平臺的最第一版本提供的框架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中使用API級別(Uses of API Level in Android)
API級別標識爲保證用戶和應用程序開發者的最佳體驗,起了關鍵做用:
每一個版本的Android平臺都在其內部存儲了本身的API級別標識。
應用程序能夠用框架API提供的清單文件元素 — <uses-sdk>
來描述該應用程序能夠運行的最小和最大API級別,以及應用程序開發者設計指望運行的平臺版本。三種屬性分別描述以下:
android:minSdkVersion
— 指明該應用程序能夠運行的API最低版本。默認是「1」。android:targetSdkVersion
— 指明該應用程序設計時指望運行的目標API版本。在某些狀況下,這容許應用程序使用目標API級別下定義的清單元素或行爲,而不是隻限於使用最低API級別定義的內容。(譯者注:android之targetsdkversion的理解---兼容性問題)android:maxSdkVersion
— 指明該應用程序能夠運行的最高API級別。重要聲明: 使用該屬性以前請閱讀<uses-sdk>文檔。好比,要指明一個應用程序可以運行的最低API級別,應當在該應用程序的清單文件的<uses-sdk>元素中加入android:minSdkVersion
屬性。
android:minSdkVersion
的值是一個正整數,對應的是該應用程序可以運行的最低平臺的
API
級別標識。
用戶嘗試安裝一個應用程序,或者在系統升級後重驗證應用程序的時候,Android系統首先會檢查應用程序的清單文件中的<uses-sdk>屬性,將其與系統內部API級別對比。系統只有在知足下列狀況時才容許進行應用程序安裝:
android:minSdkVersion
屬性,其屬性值必須小於或等於該系統的API級別對應的整數值。若是未聲明,系統會默認該應用程序運行須要的最低API級別是1。
android:maxSdkVersion
屬性,其屬性值必須等於或大於該系統的API級對應的整數值。
若是未聲明,系統會默認該應用程序沒有最高API級別限制。請經過閱讀文檔<uses-sdk>以得到系統如何處理該屬性的更多信息。應用程序清單文件中聲明該屬性後, <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級)上倒是沒法安裝的。
欲知關於如何聲明應用程序API級別需求的更多信息,請閱讀文檔中關於清單文件的<uses-sdk>章節。
開發者須要考慮的內容(Development Considerations)
本節屬於應用程序開發者須要瞭解的內容。
應用程序的向前兼容性(Application forward compatibility)
Android應用程序通常向前兼容於Android平臺的新版本。
這是由於幾乎全部的框架API變動都是添加性質的,一個以某種版本的API開發的應用程序是向前兼容與後續Android系統及高版本API。應用程序應當能夠運行於高版本的平臺,除非使用了將來因某種緣由移除的API。
向前兼容性的特性如此重要,是由於不少的Android驅動的設備可以使用OTA遠程下載技術進行系統更新。用戶開始時可以很好的安裝和使用你開發的應用程序,後來進行了OTA升級到新版本的Android平臺。一旦升級完畢,你的應用程序將運行在一個新的版本環境下,而這個環境應當包含了你的應用程序所需的API和系統功能。
某些狀況下,API背後的變化,例如系統底層的變化,可能會影響到你的應用程序運行在新的環境下。爲此,做爲應用程序開發人員,應當瞭解應用程序在不一樣系統環境下將會有如何的外觀和行爲。Android SDK包含了多個平臺版本,開發人員能夠下載下來,用於測試本身的應用程序在不一樣版本下的運行狀況。每一個版本的平臺都提供了兼容的系統鏡像,你能夠將應用程序運行在對應的Android虛擬設備(模擬器)上進行測試。
應用程序的向後兼容性(Application backward compatibility)
Android應用程序不必定向後兼容於那些比這些應用程序開發環境低的平臺環境。
Android平臺的每一個新版本包含了新的框架API,例如新的平臺功能,或者替代部分已有的API。應用程序在新平臺上能夠訪問這些新的API,就像以前提到的,在後續更新的版本中,這些新功能API也是能夠繼續使用。相反的,由於早期版本的平臺不會包含新的API功能,使用了新API的應用程序在那些舊平臺上是沒法運行的。
雖然一個Android平臺設備不太可能降級到之前的版本,可是須要了解的是:實際生活中可能會有不少設備運行的是較舊的平臺版本。即便在設備接收到OTA遠程下載升級,有些人仍然可能會滯後甚至可能不會收到更新。
平臺版本和API級別的選擇(Selecting a platform version and API Level)
當你開發應用程序時,你須要選擇一個平臺用於編譯該應用程序。一般,你應該在你的應用程序能夠支持的最低版本的平臺上進行編譯。
你能夠經過尋找最低的能夠支持你的應用程序編譯的平臺方式來決定你將會支持的最低平臺版本。一旦你肯定了支持的最低版本後,你就能夠建立對應版本的AVD模擬器來全面測試你的應用程序。你須要注意的是不要忘記在應用程序清單文件中申明android:minSdkVersion
屬性,並賦上正確的
API
級別標識。
聲明最低API級別(Declaring a minimum API Level)
若是你開發的應用程序使用了最新平臺上引入的API或平臺特性,你就須要將android:minSdkVersion
屬性賦最新平臺的
API
級別標識。這將保證用戶只能在他們的設備與你的應用程序平臺版本兼容狀況下安裝。反過來講,這樣可以保證你的應用程序在他們的設備上表現正常。
若是你用了最新的API或平臺特性,可是沒有申明android:minSdkVersion
屬性,那麼你的應用程序在最新平臺上運行是沒有穩定,可是在早期版本的平臺上是會出錯的。在後一種狀況,應用程序在嘗試訪問舊平臺上不存在的
API
時會崩潰。
針對高版本的API級別測試(Testing against higher API Levels)
編譯完你的應用程序,你應當在支持的最低版本平臺上詳細測試應用程序的表現。能夠經過建立對應平臺的AVD模擬器進行測試。此外,要保證向前兼容性,你應當在你的應用程序可能運行的更高平臺版本上進行運行和測試。
Android SDK包含了多個平臺版本供開發者使用,其中包括了最新的版本,而且提供了升級工具使得開發者能夠獲取其餘的版本。
要使用升級工具,能夠經過Android命令行方式,該工具位於<sdk>/tools路徑下。你能夠用敲入android指令運行該升級工具,而不用指定任何參數。你也能夠簡單地經過雙擊Windows下的android.bat或OS X/Linux下的android文件來啓動升級工具。在ADT工具界面,你能夠經過菜單的Window > Android SDK and AVD Manager來訪問升級工具。
要想將你的應用程序在不一樣平臺版本的模擬器上運行,須要建立對應的AVD設備。關於AVD的更多信息,請參見Creating and Managing Virtual Devices。若是你用物理設備進行測試,確保清楚運行的具體平臺版本。經過本文開始部分的映射表格能夠知道平臺版本對應的API級別標識。
使用臨時的API級別(Using a Provisional API Level)
某些狀況下,有可能會發布「早期預覽(Early Look)」版的Android 平臺SDK。在此平臺版本上開發使用的API將不會是最終發佈版,平臺的API級別標識數字就不會指定。你必須在程序清單文件中使用臨時的API級別進行標識,以便創建對應的平臺應用。臨時API級別不是一個整數,而是一個表示未發佈的平臺版本的字符串代號。「早期預覽」版本的API級別在發佈說明中會申明,該代號是大小寫敏感的。
臨時API級別標識的用途是保護開發者和設備使用者免於無心中發佈或安裝在「早期預覽」平臺版本上開發的應用程序,這些應用程序可能在最終的發佈系統上運行不穩定。
臨時API級別標識僅僅在使用「早期預覽」版本的SDK下有效,而且只能運行應用程序於模擬器之中。實際的Android設備上是沒法安裝使用臨時API級別標識的應用程序的。在最終版本平臺發佈後,你必須將程序清單文件中用到的臨時API級別標識替換成最終平臺的實際API級別整數值。
經過API級別進行文檔內容過濾
(Filtering the Reference Documentation by API Level)
Android開發者站點上的參考文檔的每一個頁面的右上方提供了「Filter by API Level」控件。你能夠用這個控件來僅僅顯示你應用程序相關的那部分API文檔,能夠經過應用程序清單文件中的android:minSdkVersion
屬性值進行過濾。
要使用過濾功能,能夠經過頁面搜索框下面的選擇框來啓用過濾功能。好比設定「Filter by API Level」控件內容與你應用程序申明的相同。注意:在選定級別以後引入的心API會以灰色顯示,而且內容被隱藏,由於你的應用程序是沒法訪問這些新功能。
API級別過濾方法不會提供每一個API級別中新添加的功能視圖,僅僅展示對應API級別的整個內容,其中去除了後續新版本中的內容。
若是你不想過濾API文檔了,只須要關閉該選擇框的特性。API級別過濾默認是關閉的,所以你能夠看到整個框架API的全貌,而無論具體的API級別。
還要注意的是個別的API元素申明瞭該API參考文檔在哪一級引入的。這經過在每一個文檔頁面正文部分的右上角的「Since <api level>」進行聲明該包和類的引入信息。類成員的API級別在其詳細描述文件頭部的右邊進行描述。