寫在前面
這篇博客的主題不是很明顯,但是等你看完,可以明白兩個問題:
- Build Tools & Platform Tools & Tools 的區別。
- Build Tools & Platform Tools & Tools & Platform & Gradle 這幾個貨版本到底是怎麼相互依賴對應的。
開篇
在安裝和配置 Android Studio 的時候,有一個很重要的步驟,就是配置 SDK 路徑,那麼 SDK 是什麼呢?
SDK(Soft Develop Kit),按照我硬翻的風格是是軟件開發工具箱,其實,正確的理解是一整套開發工具。例如 Android SDK,就是 Google 提供的和 Android 開發相關的一整套開發工具,不僅包括編譯,運行,打包這些必須的,還有很多其他小工具。瞭解和學習它們,對開發工作很有幫助。
然後就說到這三個文件夾,tools,build-tools,platform tools,首先它們仨都是 Android SDK 提供的文件夾,名字都像,常常傻傻分不清楚。
其實我也不知道弄懂它們有什麼意義,但是我不想每次都一臉懵逼,於是就有了這篇博客。
Build Tools
Build-Tools 的內部結構如圖。
沒想到的是,我目前使用的 SDK 中有這麼多版本的 Build-Tools。那麼問題就來了,
- Build-Tools 是幹嘛的?爲什麼要專門放一個文件夾?
- Build-Tools 爲什麼需要這麼多版本的?只有一個行不行?
這個時候,就要去看谷爹的官方介紹說明了,我認爲那裏是最準確的描述。
上面說,Build-Tools 是 Android 應用編譯和創建過程中所必須的一套工具集合。
開發的時候,我們應該時刻保證我們的 Build-Tools 是最新版的。而且從 Android Studio 3.0.0 開始,創建項目的時候,會根據 Gradle 插件的版本,默認使用版本支持範圍中最低版本的 Build-Tools。當然,如果需要更改的話,通過 build.gradle 中修改 buildToolsVersion 參數可以修改。
android {
buildToolsVersion "26.0.2"
...
}
以上是官方說明。從中,我們可以找到之前問題的答案:
-
build Tools 是幹嘛的?爲什麼要專門放一個文件夾?
build tools 是 Android 應用編譯和創建過程中所必須的一套工具集合,放一個文件夾的意義,就是我猜是爲了好分類吧。 -
build Tools 爲什麼會有這麼多版本的?只有一個行不行?
官方建議是最好及時更新,保持最新版本。從這句話可以看出,build tools 只需要保持一個最新版本就好。從 Android 系統整體都是向後兼容的特性考慮,一個最新版本也是足夠的。至於問什麼會有這麼多版本,是因爲我使用的時候,不是最新版,然後用了不同的版本的 SDK,每個 SDK 有對應的 Build-Tools 版本範圍,所以下了很多。
Gradle plugin & Build Tools
而且 從我們谷爹說的話中,可以知道 Gradle plugin 和 Build-Tools 版本之間有着不同尋常的關係。
Gradle 是目前比較流行的構建工具之一,Android Studio 中集成的就是 Gradle,並針對 Android 應用開發了插件 Gradle plugin 。在我看來,編譯和構建環節本就密不可分,由此猜測二者之間會不會有版本兼容的考慮,查看文檔果然如此。
Gradle Plugin 的版本說明中,對 Gradle 和 Build Tools 的版本都要最低要求。
把最新的幾個版本總結了如下表格:
Android Gradle Plugin | Gradle | Build Tools |
---|---|---|
3.0.0 | 4.1+ | 26.0.2+ |
2.3.0+ | 3.3+ | 25.0.0+ |
2.2.0+ | 2.14.1+ | 23.0.2+ |
Android Plugin for Gradle Release Notes
Platform Tools
Platform Tools 的內部結構如圖。
本來我以爲會像 Build-Tools 一樣有很多版本,然而並不是,只有一個。
看一下谷爹的說明:
Platform-Tools 是 Android SDK 的一個組件 。內容主要包含與 Android 移動平臺交互的工具,例如 adb(android 調試橋,用來和應用通信的),fastboot(線刷,一種刷機模式) 和 systrace(通過這個,可以查看分析系統運行中的所有數據)等。 這些工具堪稱 Android 應用開發之必備工具。如果想解鎖手機開機程序或者刷機的話,也需要它們。
儘管這些工具中的一些新功能僅適用於最新版本的 Android,但是因爲這些工具也是向後兼容的,然後只需要一個版本 Platform-Tools 的就好了。
我們應該儘量保證是最新版本,前幾天我的 adb 總是連接出錯,升級了版本就好了,應該是新版本已經發現問題並修復了。
Platform-Tools & Platform
博客最上面的圖片中,可以看到 sdk 文件夾內部組成中,有這樣兩個文件夾,platform tools 和 platform 。從名字上看,就感覺倆貨之間肯定是有事。
Platform 內部結構如圖。
很明顯,這就是不同版本 Android 系統們,以 API 爲序號。用戶下載了幾個版本,裏面就有幾個版本。build.gradle 中 compileSdkVersion
參數對應的就是這其中的版本。
android {
compileSdkVersion 26
...
}
查看 Platform 的官方介紹,發現 Platform 的每個版本都對 Platform tools 有最低版本要求。
從版本號看,基本保持一致,還是比較好記。例如 platform 25 就要求 platform tools 25.0.1+。
同時,我們也可以看到對 Build-Tools 的版本也要求,列出表格如下:
Android Version | API Level | Platform-tools | Build tools |
---|---|---|---|
Android 6.0 | 23 | 23+ | 24.3.4+ |
Android 5.1 | 22 | 22+ | 23.0.5+ |
Android 5.0 | 21 | 21+ | 23.0.5+ |
Tools
Tools 的內部結構如圖。
Tools 在我的環境中只有一個版本,所以按照這種規律,很明顯,開發環境中應該也只需要一個版本的就足夠的。
以下是我們的谷爹對它的一句話介紹:
Tools 也是 Android SDK 的一個組件,包括一套完整的 Android 開發和調試工具,Tools 也包含在 Android Studio 中。
Tools & Platform-Tools
翻翻 Tools 的版本記錄,發現 Tools 和 Platform 之間也有對應關係。例如下圖,26.0.0 的 Tools 就依賴 Platform-Tools 24+ 。
總結如下:
Build Tools | Platform-tools |
---|---|
24.4.0 | 24+ |
24.3.4 | 23+ |
24.3.3 | 19+ |
總結
寫到這裏,上面已經出現 Tools,Build-Tools,Platform -Tools,Platform,Gradle,Gradle Plugin,名字大多相似,關係也有點交錯,很容易暈,總結如下:
1.Gradle Plugin 基於 Gradle,Build-Tools 生成的。
2.Platform 基於 Platform-Tools,Build-Tools 生成的。
3.Tools 基於 Platform-Tools 生成的。
看圖更清晰一點:
寫在最後:
這篇博客的初衷是上篇博客中受啓發,想特意學習一下 Tools 文件夾想法的開始的,然而沒想到牽扯出來這麼多,想來還是因爲會的太少了。
寫完後,我突然明白了,之前遇到導入一個 Github 上拉取的新項目,然後就各種報錯各種需要下載的情況,版本不兼容報錯,解決方法是下載對應版本或者改成兼容的版本。
爲了避免出現這種情況,要定期更新 Build-Tools ,Platform-Tools 和 Tools,保持較新的版本。
然後,下篇博客見。