Gradle Wrapper
我們推薦使用
Gradle Wrapper
執行
gradle
建構,(後面簡稱
Wrapper
).
Wrapper
實質上是一個腳本,這個腳本使用申明版本的
gradle
執行建構任務。如果本地沒有
Wrapper
中申明的
gradle
版本,
Wrapper
會先下載下傳它。這樣開發者不必必須下載下傳和項目指定版本相同的
gradle
,就可以完成建構。進而為公司節約時間、節約成本。
-
僅僅是一個執行Wrapper
的腳本 。gradle
-
隻是為了讓我們更友善快捷的使用Wrapper
。gradle
AndroidStudio 中的 Gradle Wrapper
我們在
AndroidStudio
打包的時候會使用到這樣的指令
./gradlew assmeble
。為什麼可以使用這個指令?其實
gradlew
就是一個腳本,可以打開它看一看( 部分)。
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
這就是
Wrapper
中的執行的腳本,那麼它在哪裡确定
gradle
的版本的呢,它還有個配置檔案
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-
的值為distributionBase
,那GRADLE_USER_HOME
代表的路徑是什麼呢?就是GRADLE_USER_HOME
這個檔案夾,也就是目前使用者下的~/.gradle/
檔案夾 。如.gradle
Use/xxxxx/.gradle
-
指定distributionUrl
中使用的Wrapper
版本。gradle
如果本地沒有這個Wrapper
版本它就會去下載下傳。然後放在gradle
+distributionBase
路徑下。也就是distributionPath
路徑下。~/.gradle/wrapper/dists
- 我本地就有這些下好的
版本。gradle
gradle_1Gradle 和 Gradle Wrapper 到底是什麼關系。
Wrapper
到底為我們提供了什麼便利?
Wrapper
我們本地開發的時候
gradle
肯定需要下載下傳。但比如給同僚的電腦上打個包什麼的,我們希望隻把代碼
clone
下來就行了。如果還要下載下傳配置
gradle
環境也太麻煩了。或
Jenkins
上,沒有我們需要
gradle
版本。實質上我們現在從
git
倉庫
clone
代碼後并不需要配置
gradle
環境,使用
gradlew
相關指令就可以進行打包了。而這一切當然都是
Wrapper
的功勞。
我們會把哪些對于打包比較重要的檔案上傳到 git
倉庫(這裡主要說和 Wrapper
相關的)
git
Wrapper
-
這個檔案的重要性自然不必說了,這是個腳本檔案。gradlew
-
這是gradle-wrapper.properties
配置檔案,肯定要 上傳 。Wrapper
- 跟
同在gradle-wrapper.properties
下的gradle/wrapper
,這個gradle-wrapper.jar
包可以勉強認為就是jar
gradle
- 比如
、build.gradle
、settings.gradle
gradle.properties
等等我就不一一列舉了。
在這些檔案的通力合作下,我們可以在沒有
的情況下使用gradle
完成打包等任務。Wrapper
Wrapper
如此強大,為什麼我們還會出現 gradle 版本的問題呢?
Wrapper
既然
Wrapper
如此強大,這個報錯又是怎麼回事呢?
Error : minimum supported gradle version is 4.6 in android studio 3.0.1
這是因為
Android Gradle
插件。
Android Studio
編譯系統以
Gradle
為基礎,并且
Android Gradle
插件添加了幾項專用于編譯
Android
應用的功能。雖然
Android
插件通常會與
Android Studio
的更新步調保持一緻,但插件(以及 Gradle 系統的其餘部分)可獨立于
Android Studio
運作并單獨更新。另外由于
gradle
各個版本之間支援的功能存在差異。是以會存在不同
Android Gradle
插件,對支援的
gradle
最低版本有要求 。在
project
的
build.gradle
檔案中指定
Android Gradle
插件版本。如下
dependencies {
classpath 'com.android.tools.build:gradle:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Gradle 環境配置
如果你沒有配置
gradle
環境,執行
gradle
相關指令是無法找到指令的。如果需要深入研究
gradle
這也是無法逃避的一個環節。那麼我們現在就來配置下
Mac
平台的
gradle
環境。(其他環境類似,請自行配置,就是不配置也不影響本文的閱讀)
-
中執行如下指令Terminal
vim ~/.bash_profile
- 在配置檔案
中增加如下.bash_profile
#gradle
export GRADLE_HOME=/Users/zhang/.gradle/wrapper/dists/gradle-5.1.1-all/97z1ksx6lirer3kbvdnh7jtjg/gradle-5.1.1/bin
export PATH=$GRADLE_HOME:$PATH
- 注意這是我的
路徑,我們剛剛已經找到Gradle
幫我們下載下傳好的各個版本Wrapper
。我這裡選了Grale
版本的進行配置。指定路徑的時候需要一直指定到gradle-5.1.1
路徑下。bin
- 執行
使剛剛配置的source ~/.bash_profile
路徑生效即可。gradle
- 執行
,如果顯示gradle -v
的 版本資訊,則說明配置成功。gradle
總結
Android Gradle
插件、
Gradle
、
Gradle Wrapper
共同組成了
android
的建構體系。本文并沒有就三者的關系進行死磕,僅僅點到即止。我們需要形成的是大局觀。好吧,就這麼多了。