本篇文章介紹了Android SDK更新的包裏關於compileSdk、minSdk、targetSdk、buildTools、Tools、Platform-tools的概念html
在開發中常常發現有AS有更新提示,在以前沒有徹底弄明白這些SDK,Tools的概念前都不敢輕易去更新,總擔憂更完就編譯出錯,API不能用==狀況。因此對這幾個概念進行深度梳理。android
國外一篇很清楚的關於compileSdk、minSdk、targetSdk的文章,建議看完譯文後再從新看一遍原文app
原文:
picking-your-compilesdkversion-minsdkversion-targetsdkversionide
譯文:
如何選擇 compileSdkVersion, minSdkVersion 和 targetSdkVersion工具
關於tools的解釋:
Android關於buildToolVersion與CompileSdkVersion的區別開發工具
如下內容摘自譯文測試
compileSdkVersion 告訴 Gradle 用哪一個 Android SDK 版本編譯你的應用。使用任何新添加的 API 就須要使用對應 Level 的 Android SDK。gradle
須要強調的是 修改 compileSdkVersion 不會改變運行時的行爲 。當你修改了 compileSdkVersion 的時候,可能會出現新的編譯警告、編譯錯誤,但新的 compileSdkVersion 不會被包含到 APK 中:它純粹只是在編譯的時候使用。(你真的應該修復這些警告,他們的出現必定是有緣由的)ui
所以咱們強烈推薦 老是使用最新的 SDK 進行編譯 。在現有代碼上使用新的編譯檢查能夠得到不少好處,避免新棄用的 API ,而且爲使用新的 API 作好準備。google
注意,若是使用 Support Library ,那麼使用最新發布的 Support Library 就須要使用最新的 SDK 編譯。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本號要一致!)。一般,新版的 Support Library 隨着新的系統版本而發佈,它爲系統新增長的 API 和新特性提供兼容性支持。
若是 compileSdkVersion 設置爲可用的最新 API,那麼 minSdkVersion 則是應用能夠運行的最低要求。minSdkVersion 是 Google Play 商店用來判斷用戶設備是否能夠安裝某個應用的標誌之一。
在開發時 minSdkVersion 也起到一個重要角色:lint 默認會在項目中運行,它在你使用了高於 minSdkVersion 的 API 時會警告你,幫你避免調用不存在的 API 的運行時問題。若是隻在較高版本的系統上才使用某些 API,一般使用運行時檢查系統版本的方式解決。
請記住,你所使用的庫,如 Support Library 或 Google Play services,可能有他們本身的 minSdkVersion 。你的應用設置的 minSdkVersion 必需大於等於這些庫的 minSdkVersion 。例若有三個庫,它們的 minSdkVersion 分別是 4, 7 和 9 ,那麼你的 minSdkVersion 必需至少是 9 才能使用它們。在少數狀況下,你仍然想用一個比你應用的 minSdkVersion 還高的庫(處理全部的邊緣狀況,確保它只在較新的平臺上使用),你可使用 tools:overrideLibrary 標記,但請作完全的測試!
當你決定使用什麼 minSdkVersion 時候,你應該參考當前的 Android 分佈統計,它顯示了最近 7 天全部訪問 Google Play 的設備信息。他們就是你把應用發佈到 Google Play 時的潛在用戶。最終這是一個商業決策問題,取決於爲了支持額外 3% 的設備,確保最佳體驗而付出的開發和測試成本是否值得。
固然,若是某個新的 API 是你整個應用的關鍵,那麼肯定 minSdkVersion 的值就比較容易了。不過要記得 14 億設備中的 0.7% 也是個不小的數字。
三個版本號中最有趣的就是 targetSdkVersion 了。 targetSdkVersion 是 Android 提供向前兼容的主要依據,在應用的 targetSdkVersion 沒有更新以前系統不會應用最新的行爲變化。這容許你在適應新的行爲變化以前就可使用新的 API (由於你已經更新了 compileSdkVersion 不是嗎?)。
targetSdkVersion 所暗示的許多行爲變化都記錄在 VERSION_CODES 文檔中了,可是全部恐怖的細節也都列在每次發佈的平臺亮點中了,在這個 API Level 表中能夠方便地找到相應的連接。
例如,Android 6.0 變化文檔中談了 target 爲 API 23 時會如何把你的應用轉換到運行時權限模型上,Android 4.4 行爲變化闡述了 target 爲 API 19 及以上時使用 set() 和 setRepeating() 設置 alarm 會有怎樣的行爲變化。
因爲某些行爲的變化對用戶是很是明顯的(棄用的 menu 按鈕,運行時權限等),因此將 target 更新爲最新的 SDK 是全部應用都應該優先處理的事情。但這不意味着你必定要使用全部新引入的功能,也不意味着你能夠不作任何測試就盲目地更新 targetSdkVersion ,請必定在更新 targetSdkVersion 以前作測試!你的用戶會感謝你的。
buildTools、Tools、Platform-tools這3個東西其實都是開發工具,即它的版本更新並不會影響運行的APP,只是工具上的升級。
在 build.gradle 中的 buildToolsVersion 版本號通常是API-LEVEL.0.0,其中API-LEVEL要大於等於compileSdkVersion。
在前面的compileSdkVersion解釋中建議選用最新的SDK Version,so,buildToolsVersion也建議選擇最新的版本號。build.gradle中這2個的修改可讓你體驗最新的API和工具。
至於Tools、Platform-tools這2個東西,直接更新最新吧。Only 工具。
通過上面的深刻了解後,總結如下:
更多文章關注個人公衆號