minSdkVersion、targetSdkVersion、targetApiLevel的區別

在AndroidMenifest.xml中,常常會有下面的語句:
<uses-sdk android:minSdkVersion="4" 
          android:targetSdkVersion="10"
          android:maxSdkVersion="10" />

在default.properties中,會看到下面的語句:
target=android-10

如果是使用Eclipse的話,還可能會看到這樣的警告:
Attribute minSdkVersion (4) is lower than the project target API level (10)

那麼,這裏面的minSdkVersion、targetSdkVersion、maxSdkVersion、target API level四個數值到底有什麼區別?

minSdkVersion與maxSdkVersion比較容易理解,就是在安裝程序的時候,如果目標設備的API版本小於minSdkVersion,或者大於maxSdkVersion,程序將無法安裝。一般來說沒有必要設置maxSdkVersion。

targetSdkVersion相對複雜一些,如果設置了此屬性,那麼在程序執行時,如果目標設備的API版本正好等於此數值,他會告訴Android平臺:此程序在此版本已經經過充分測,沒有問題。不必爲此程序開啓兼容性檢查判斷的工作了。也就是說,如果targetSdkVersion與目標設備的API版本相同時,運行效率可能會高一些。

但是,這個設置僅僅是一個聲明、一個通知,不會有太實質的作用,比如說,使用了targetSdkVersion這個SDK版本中的一個特性,但是這個特性在低版本中是不支持的,那麼在低版本的API設備上運行程序時,可能會報錯:java.lang.VerifyError。也就是說,此屬性不會幫你解決兼容性的測試問題。你至少需要在minSdkVersion這個版本上將程序完整的跑一遍來確定兼容性是沒有問題的。(這個問題確實讓人頭疼)

在default.properties中的target是指在編譯的時候使用哪個版本的API進行編譯。

綜上,上面的四個值其實是作用於不同的時期:
target API level是在編譯的時候起作用,用於指定使用哪個API版本(SDK版本)進行編譯。
minSdkVersion和maxSdkVersion是在程序安裝的時候起作用,用於指定哪些版本的設備可以安裝此應用。
targetSdkVersion是在程序運行的時候起作用,用於提高指定版本的設備上程序運行體驗。

這四個數值在程序編譯時也沒有嚴格的檢查,比如說,你可以將minSdkVersion設置的比maxSdkVersion還大,他會自動忽略掉錯誤的maxSdkVersion。

參考:
http://developer.android.com/guide/appendix/api-levels.html
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章