標籤:
在一年之中,也有可能只是幾個月後,你會發布你的Android應用程式。但是這中間有可能會發布新的版本的Android系統,比如:6.0+。
你肯定希望你的應用可以向前相容,當使用者升級到新的Android系統時候,你的應用調用的系統API不會編譯失敗,也不會Crashing。
這時候就要考慮一下三個參數了:compileSdkVersion, minSdkVersion, and targetSdkVersion (它們標識什麼版本的API可以使用,應用相容的版本,編譯需要的API版本)
compileSdkVersion
告訴Gradle,用哪個版本的sdk編譯你的應用,如果用到高版本的API,那就需要把compileSdkVersion設定為API對應的高版本。需要指出的是,改變編譯的版本,不會改變應用運行時候的展現,但是新的警告或者報錯可能會出現。compileSdkVersion不會包含到你的應用中,它只是純粹的編譯應用。所以,當編譯時間期遇見的錯誤和警告,最好的解決方案就是修複它們。
強烈推薦把你的compileSdkVersion設定為最新的,用最新的sdk編譯應用,會檢查最新的sdk對現有的代碼的影響,避免已經過時的API,並且準備用最新的API,那樣會使的你的應用在相容性方面更加健壯。
需要提示的是,如果你使用了Support Library,必須使用最新的sdk進行編譯,比如,為了使用 23.1.1 Support Library,你的編譯版本最少為23(第一位元字一定要匹配),一般情況下,新的Support Library 發布都會伴隨一個platform version提供更好的相容。
minSdkVersion
如果編譯版本設定使用最新的APIs,那麼你的minSdkVersion就要設定能夠使用最新APIs的版本。minSdkVersion是Google Play Store用來判定你的應用能夠安裝到那些裝置上。也就是你應用相容的最低版本,同時,對於開發人員,當你使用lint 檢查你的應用時候,會提示你哪些APIs不相容最低版本(minSdkVersion),這時候你就要根據系統的版本來使用不同APIs,以避免運行時遇見的各種意想不到的Crashing。
一定要時刻記住你所使用的第三方庫,比如 Support Libraries orGoogle Play services, 它們所支援的minSdkVersion是否跟你的應用衝突,是根據它們調整你的minSdkVersion,還是為了相容你的minSdkVersion,而判定不同的系統版本再使用第三方的庫,二者取其一,當然,如果你非要在你相容低版本的情況下使用高版本的庫,那麼需要你使用 tools:overrideLibrary marker,來設定更詳細的AndroidMainfest.xml.
targetSdkVersion
targetSdkVersion是Android提供了向前相容性的主要方式。最好的方式就是把它設定最新的。
三者之間關係:
minSdkVersion <= targetSdkVersion <= compileSdkVersion
理想的關係應該是這樣:
minSdkVersion (lowest possible) <=
targetSdkVersion == compileSdkVersion (latest SDK)
Android之 compileSdkVersion, minSdkVersion, and targetSdkVersion