Build Tools & Platform Tools & Tools & platform & Gradle 貌似複雜的依賴關係

寫在前面

這篇博客的主題不是很明顯,但是等你看完,可以明白兩個問題:

  • 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+

SDK Platform Release Notes

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+

SDK Tools Release Notes

總結

寫到這裏,上面已經出現 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,保持較新的版本。

然後,下篇博客見。


歡迎關注博主的微信公衆號,快快加入哦,期待與你一起成長!
發佈了125 篇原創文章 · 獲贊 367 · 訪問量 124萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章