在寫 Android 項(xiàng)目的時(shí)候可能有時(shí)候會(huì)對 Module:app 中的三個(gè)字段 compileSdkVersion慷荔、minSdkVersion 和 targetSdkVersion 感到很疑惑喊递,這里我們對這三個(gè)字段的作用分別進(jìn)行介紹褪贵。
compileSdkVersion
顧名思義,意思就是編譯的版本改基,用來告訴 Gradle 用什么版本的 Android SDK 來編譯自己豺旬。
當(dāng)我們改變 compileSdkVersion 的時(shí)候也許會(huì)出現(xiàn)編譯警告、甚至是編譯錯(cuò)誤睁蕾,雖然他并不改變運(yùn)行時(shí)的行為苞笨,但是這個(gè)時(shí)候還是得修復(fù)這些錯(cuò)誤,它們的出現(xiàn)一定有原因的子眶。
這里推薦使用最新的 compileSdkVersion 進(jìn)行編譯瀑凝,同時(shí),在我們?nèi)粘i_發(fā)的時(shí)候還是使用最新的 support-Library 臭杰,要想使用最新的 support-Library 就要使用最新的 compileSdkVersion粤咪,也就是說 compileSdkVersion 的版本起碼要等于 support-Library 的版本。
使用最新的 support-Library 的好處也不用多說硅卢,它為系統(tǒng)提供的新的 API 和 新特性提供了兼容性的支持
minSdkVersion
minSdkVersion 是用戶設(shè)備是否可以運(yùn)行的最低要求射窒,同時(shí) minSdkVersion 也是 Google 商店評判用戶設(shè)備是否可以安裝應(yīng)用的評判標(biāo)準(zhǔn)之一。
同時(shí) lint 會(huì)默認(rèn)在項(xiàng)目中運(yùn)行将塑,并在你調(diào)用 minSdkVersion 沒有的 API 時(shí)給出相應(yīng)的警告脉顿,此時(shí)就需要我們開發(fā)者注意了,因?yàn)檫@個(gè)時(shí)候需要我們來解決版本兼容的問題点寥,解決的方法就是判斷是否大于相應(yīng)API支持的最低版本艾疟,是的話就可以執(zhí)行。
所以當(dāng)我們在選擇支持到什么版本的時(shí)候就需要考慮我們到底要覆蓋百分之多少的手機(jī)敢辩,這在我們創(chuàng)建一個(gè) Android 項(xiàng)目的時(shí)候可以看到蔽莱,這個(gè)數(shù)據(jù)對中國用戶來說其實(shí)并不準(zhǔn)確,因?yàn)檫@個(gè)統(tǒng)計(jì)數(shù)據(jù)顯示的是最近7天訪問 Google 商店的手機(jī)的統(tǒng)計(jì)數(shù)據(jù)戚长。
targetSdkVersion
targetSdkVersion 向我們提供了一個(gè)向前兼容的解決方案盗冷,我們更新了 compileSdkVersion 就可以使用最新的 API,但是此時(shí)如果沒有更新 targetSdkVersion 的話系統(tǒng)不會(huì)采用最新的 API同廉,換句話說系統(tǒng)好像還是 targetSdkVersion 的系統(tǒng)仪糖,所以要真正的支持后來的 Android 版本就需要同時(shí)調(diào)整 targetSdkVersion 和 compileSdkVersion。
總結(jié)
總的來說迫肖,一般情況下锅劝,compileSdkVersion、minSdkVersion 和 targetSdkVersion 三者之間的關(guān)系應(yīng)該是:
minSdkVersion <= targetSdkVersion <= compileSdkVersion
但是理想情況下蟆湖,我們希望它們的關(guān)系是:
minSdkVersion(盡量的低) < targetSdkVersion = compileSdkVersion