compileSdkVersion
1、compileSdkVersion僅僅是告訴Gradle使用哪個版本的SDK編譯應用,不會被包含到apk中,完全不影響應用的運行結果;
2、既然完全無影響,那爲什麼還要關注compileSdkVersion版本呢?
——①應用想兼容新版本、使用了新版本API,此時就必須使用新版本及以上版本編譯,否則就會編譯報錯;
——②如果使用了新版本的Support Library,此時也必須使用新版本及以上版本編譯;
——③推薦使用最新版本編譯,用新的編譯檢查,可以看到很多新版本相關的警告,提前預研新版本開發;
minSdkVersion
1、minSdkVersion表明此應用兼容的最低版本,在低於該版本的手機上安裝時會報錯,無法安裝;
2、如果最低版本設置爲19,在代碼中使用了API 23中的API,就會有警告。使用運行時檢查系統版本的方式可解決;
3、如果你使用的某個Support Library的最低版本爲7,那minSdkVersion就必須大於等於7了,否則該Support Library在低於7的手機中就要報錯了;
targetSdkVersion
1、如果targetSdkVersion爲19(對應爲Android4.4),應用運行時,最高只能使用API 19的新特性。即使代碼中使用了API 23的新特性,實際運行時,也不會使用該新特性;
2、同樣的API,比如AlarmManger的set()和get()方法,在API 19和之前的效果是不一樣的,如果targetSdkVersion爲18,無論運行手機是什麼版本,都是舊效果;如果targetSdkVersion爲19,那麼在4.4以上的手機上運行時,就是新效果了。
總結
綜上所訴,理想狀態下,minSdkVersion應該是最低兼容的版本,儘可能覆蓋更多手機。targetSdkVersion和compileSdkVersion應該是最新版本,讓新版本手機用戶獲得更好的體驗。