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="..." /> 所指定的值。

資料來源

沒有留言:

張貼留言