前言
聲明
歡迎轉載,但請保留文章原始出處:)
原文
android api levels
在本文中
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#whatisapilevel">api的級别是什麼?</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#usesofapilevelinan">在android中使用api級别</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#developmentconsiderations">開發者需要考慮的内容</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#applicationbackwardcompatibility">應用程式的向前相容性</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#applicationbackwardcompatibility">應用程式的向後相容性</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#selectingaplatformversionandapilev">平台版本和api級别的選擇</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#declaringaminimumapilevel">聲明最低api級别</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#testingagainsthigherapilevels">針對高版本的api級别測試</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#usingaprovisionalapilevel">使用臨時的api級别</a>
<a href="http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html#filteringthereferencedocumentationby">通過api級别進行文檔内容過濾</a>
參見
當你開發你的android應用程式時,了解該平台api變更管理的基本方法和概念是很有幫助的。同樣的,知道api級别辨別以及該辨別如何保障你的應用與實際硬體裝置相相容對于開發及後續的釋出、維護都是有益的。
本節内容告訴你api級别的知識,以及它如何影響你開發和使用的應用。
api級别是一個整數值,它唯一辨別了一個具體版本的android平台,及其架構的api的版本。
android平台提供了一套架構api,使得應用程式可以與系統底層進行互動。該架構api由以下子產品組成:
一組核心的包和類
清單(manifest)檔案的xml元素和屬性聲明
資源檔案的xml元素和屬性聲明及通路形式
各類意圖(intents)
應用程式可以請求的各類授權,以及系統中包含的授權執行
每個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
api級别辨別為保證使用者和應用程式開發者的最佳體驗,起了關鍵作用:
它讓android平台可以描述它支援的架構api的最高版本
它讓應用程式可以描述它需要的架構api版本
它使得系統可以在硬體裝置上安裝應用程式時能夠檢查版本是否比對,使得版本不相容的應用程式不會被錯誤安裝在裝置之上.
每個版本的android平台都在其内部存儲了自己的api級别辨別。
應用程式可以用架構api提供的清單檔案元素 — <code><uses-sdk></code> 來描述該應用程式可以運作的最小和最大api級别,以及應用程式開發者設計期望運作的平台版本。三種屬性分别描述如下:
<code>android:minsdkversion</code> — 指明該應用程式可以運作的api最低版本。預設是“1”。
比如,要指明一個應用程式能夠運作的最低api級别,應當在該應用程式的清單檔案的<uses-sdk>元素中加入<code>android:minsdkversion</code><code>屬性。</code><code>android:minsdkversion</code><code>的值是一個正整數,對應的是該應用程式能夠運作的最低平台的</code><code>api</code><code>級别辨別。</code>
使用者嘗試安裝一個應用程式,或者在系統更新後重驗證應用程式的時候,android系統首先會檢查應用程式的清單檔案中的<uses-sdk>屬性,将其與系統内部api級别對比。系統隻有在滿足下列情況時才允許進行應用程式安裝:
如果聲明了<code>android:minsdkversion</code><code>屬性,其屬性值必須小于或等于該系統的api級别對應的整數值。如果未聲明,系統會預設該應用程式運作需要的最低api級别是1。</code>
應用程式清單檔案中聲明該屬性後, <code><uses-sdk></code><code>元素看起來應類似于下面的例子:</code>
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuEzX5ITL00SMxAjMvwFNvwVMxAjMvwFM0EjclZ3bvwVbvN2Xzd2bsJmbj9CXt92YuM3ZvxmYuNmLzV2Zh1Wavw1LcpDc0RHaiojIsJye.png)
這樣做的主要原因是,應用程式會通過android:minisdkversion聲明的api級别來告知系統——該應用程式使用的api是指定引入的api級别。假如沒有這種屬性聲明,一個應用程式如果因為某些不知名的原因被安裝在低級别api系統之上,那麼該應用程式會在運作時因為嘗試通路不存在的api而崩潰。為此,android系統通過不允許應用程式被安裝在不滿足其最低api級别要求的目标硬體上來防止此類結果發生。
本節屬于應用程式開發者需要了解的内容。
android應用程式一般向前相容于android平台的新版本。
這是因為幾乎所有的架構api變更都是添加性質的,一個以某種版本的api開發的應用程式是向前相容與後續android系統及高版本api。應用程式應當可以運作于高版本的平台,除非使用了未來因某種原因移除的api。
向前相容性的特性如此重要,是因為很多的android驅動的裝置能夠使用ota遠端下載下傳技術進行系統更新。使用者開始時能夠很好的安裝和使用你開發的應用程式,後來進行了ota更新到新版本的android平台。一旦更新完畢,你的應用程式将運作在一個新的版本環境下,而這個環境應當包含了你的應用程式所需的api和系統功能。
某些情況下,api背後的變化,例如系統底層的變化,可能會影響到你的應用程式運作在新的環境下。為此,作為應用程式開發人員,應當了解應用程式在不同系統環境下将會有如何的外觀和行為。android sdk包含了多個平台版本,開發人員可以下載下傳下來,用于測試自己的應用程式在不同版本下的運作情況。每個版本的平台都提供了相容的系統鏡像,你可以将應用程式運作在對應的android虛拟裝置(模拟器)上進行測試。
android應用程式不一定向後相容于那些比這些應用程式開發環境低的平台環境。
android平台的每個新版本包含了新的架構api,例如新的平台功能,或者替代部分已有的api。應用程式在新平台上可以通路這些新的api,就像之前提到的,在後續更新的版本中,這些新功能api也是可以繼續使用。相反的,因為早期版本的平台不會包含新的api功能,使用了新api的應用程式在那些舊平台上是無法運作的。
雖然一個android平台裝置不太可能降級到以前的版本,但是需要了解的是:實際生活中可能會有很多裝置運作的是較舊的平台版本。即使在裝置接收到ota遠端下載下傳更新,有些人仍然可能會滞後甚至可能不會收到更新。
當你開發應用程式時,你需要選擇一個平台用于編譯該應用程式。通常,你應該在你的應用程式可以支援的最低版本的平台上進行編譯。
你可以通過尋找最低的可以支援你的應用程式編譯的平台方式來決定你将會支援的最低平台版本。一旦你确定了支援的最低版本後,你就可以建立對應版本的avd模拟器來全面測試你的應用程式。你需要注意的是不要忘記在應用程式清單檔案中申明<code>android:minsdkversion</code><code>屬性,并賦上正确的</code><code>api</code><code>級别辨別。</code><code></code>
如果你開發的應用程式使用了最新平台上引入的api或平台特性,你就需要将<code>android:minsdkversion</code><code>屬性賦最新平台的</code><code>api</code><code>級别辨別。這将保證使用者隻能在他們的裝置與你的應用程式平台版本相容情況下安裝。反過來說,這樣能夠保證你的應用程式在他們的裝置上表現正常。</code>
如果你用了最新的api或平台特性,但是沒有申明<code>android:minsdkversion</code><code>屬性,那麼你的應用程式在最新平台上運作是沒有穩定,但是在早期版本的平台上是會出錯的。在後一種情況,應用程式在嘗試通路舊平台上不存在的</code><code>api</code><code>時會崩潰。</code><code></code>
編譯完你的應用程式,你應當在支援的最低版本平台上詳細測試應用程式的表現。可以通過建立對應平台的avd模拟器進行測試。此外,要保證向前相容性,你應當在你的應用程式可能運作的更高平台版本上進行運作和測試。
android sdk包含了多個平台版本供開發者使用,其中包括了最新的版本,并且提供了更新工具使得開發者可以擷取其他的版本。
要使用更新工具,可以通過android指令行方式,該工具位于<sdk>/tools路徑下。你可以用敲入android指令運作該更新工具,而不用指定任何參數。你也可以簡單地通過輕按兩下windows下的android.bat或os x/linux下的android檔案來啟動更新工具。在adt工具界面,你可以通過菜單的window > android sdk and avd manager來通路更新工具。
某些情況下,有可能會釋出“早期預覽(early look)”版的android 平台sdk。在此平台版本上開發使用的api将不會是最終釋出版,平台的api級别辨別數字就不會指定。你必須在程式清單檔案中使用臨時的api級别進行辨別,以便建立對應的平台應用。臨時api級别不是一個整數,而是一個表示未釋出的平台版本的字元串代号。“早期預覽”版本的api級别在釋出說明中會申明,該代号是大小寫敏感的。
臨時api級别辨別的用途是保護開發者和裝置使用者免于無意中釋出或安裝在“早期預覽”平台版本上開發的應用程式,這些應用程式可能在最終的釋出系統上運作不穩定。
臨時api級别辨別僅僅在使用“早期預覽”版本的sdk下有效,并且隻能運作應用程式于模拟器之中。實際的android裝置上是無法安裝使用臨時api級别辨別的應用程式的。在最終版本平台釋出後,你必須将程式清單檔案中用到的臨時api級别辨別替換成最終平台的實際api級别整數值。
(filtering the reference documentation by api level)
android開發者站點上的參考文檔的每個頁面的右上方提供了“filter by api level”控件。你可以用這個控件來僅僅顯示你應用程式相關的那部分api文檔,可以通過應用程式清單檔案中的<code>android:minsdkversion</code><code>屬性值進行過濾。</code>
要使用過濾功能,可以通過頁面搜尋框下面的選擇框來啟用過濾功能。比如設定“filter by api level”控件内容與你應用程式申明的相同。注意:在標明級别之後引入的心api會以灰色顯示,并且内容被隐藏,因為你的應用程式是無法通路這些新功能。
api級别過濾方法不會提供每個api級别中新添加的功能視圖,僅僅展現對應api級别的整個内容,其中去除了後續新版本中的内容。
如果你不想過濾api文檔了,隻需要關閉該選擇框的特性。api級别過濾預設是關閉的,是以你可以看到整個架構api的全貌,而不管具體的api級别。
還要注意的是個别的api元素申明了該api參考文檔在哪一級引入的。這通過在每個文檔頁面正文部分的右上角的“since <api level>”進行聲明該包和類的引入資訊。類成員的api級别在其較長的描述檔案頭部的右邊進行描述。
轉載:http://www.cnblogs.com/over140/archive/2011/04/29/2032433.html