2011-04-26

Android API Level

Android API Level 不同於 Android 平台版本號碼,因為 Android 平台向前相容,所以新版本的平台等於舊版本的平台加上新功能,層層累加,所以 Android API Level 從 Android 平台 1.0 的 「1」逐漸累加到 Android 平台 2.2 的 「8」,最後到 Android 平台 3.0 的 「11」。


使用 Android API Level

在 uses-sdk 中,除了 android:minSdkVersion 以外,還有 android:targetSdkVersion 和 android:maxSdkVersion,雖然名為 uses-sdk,但是用的卻是 API Level,而不是 SDK 版本或者 Android 平台版本。
  •  minSdkVersion - 執行該 Android 應用程式所需最小的 Android 平台版本,Android 系統會依據這個設定決定該 Android 平台是否可以安裝該 Android 應用程式,所以這個設定值是必須的,如果未設定則使用預設值「1」。
  • targetSdkVersion - 標注經過測試的版本,到底有什麼用途?看不懂。
  • maxSdkVersion - 執行該 Android 應用程式所需最大的 Android 平台版本,如果 Android 平台自動更新後超過 maxSdkVersion 設定值,Android 平台會自動將該 Android 應用程式移除。
    不建議使用 maxSdkVersion,因為 Android 平台向後相容所有 Android 應用程式,或者說 Android 應用程式向前相容所有 Android 平台,甚至當 Android 應用程式有自動更新功能時,會因為 maxSdkVersion 自動移除而失效。
    在 Android 2.0.1 以後,Android 平台在安裝或更新時不再檢查 maxSdkVersion 設定值,maxSdkVersion 只保留給 Android Market 過濾可安裝的 Android 應用程式使用。

版本相容

Android 平台的功能是累加的,所以一定能向前相容,也就是說 API Level 8  的應用程式一定能執行在 8 以後(9、10、11)的所有平台,新版本的平台一定包含舊版本的功能,再加上新功能。

因為 Android 平台有自動更新的功能(OTA, over-the-air),所以 Android 應用程式一定要能向前相容,不能因為平台更新導致原本可正常使用的 Android 應用程式掛掉。

Android 不支援向後相容,也就是依據新版本而寫的應用程式無法執行在舊版本的平台上,尤其使用到新增加的功能。

在開發 Android 應用程式時,應該盡可能支援較舊的版本,該值即為 AndoridManifest.xml 裡 <uses-sdk android:minSdkVersion="..." /> 所指定的值,也是 Android Virtual Device(AVD)裡的 target 設定值。

android:minSdkVersion 決定了可安裝該 Android 應用程式的機器 Android 平台最小版本。

除了使用 android:minSdkVersion 指定的版本建立 AVD 進行測試外,也必須另外建立所有較新版本的 AVD 進行完整的相容性測試。

可以在 Eclipse > Android SDK and AVD manager 下載最新版本的 Android 平台。

開發尚未 release 的 Android 版本

尚未 release 的 Android 版本不會有一個數值的 API Level,只會有一個文字的代碼,僅能用於開發環境與模擬機上,不能安裝到真正的機器上。

如何在 Android Reference(API Docs)裡使用 API Level?

在 Android Reference 裡預設是顯示最新版本的 API,但是在頁面右上角可以看到一個 checkbox,提供 Filter by API Level 的功能。


勾選後,選取想要的 API Level,頁面會立即將不相容的 API 灰階顯示,不相容指的多半是較新的版本才有的功能。


Android Reference 並未提供單一頁面顯示特定 API Level 的所有 API,只能從各個頁面的右上角看到 Since: API Level xxx 資訊。

這邊的 Filter by API Level 所要選定的值就是 AndoridManifest.xml 裡 <uses-sdk android:minSdkVersion="..." /> 所指定的值。

資料來源

沒有留言:

張貼留言