歡迎和大家交流技術相關問題:
部落格園位址: http://www.cnblogs.com/jiangxinnju
GitHub位址: https://github.com/jiangxincode
知乎位址: https://www.zhihu.com/people/jiangxinnju
首先用一段通俗易懂但是不是非常專業的話描述一下三者的概念、差別和聯系。
- Gradle是個建構系統,能夠簡化你的編譯、打包、測試過程。熟悉Java的同學,可以把Gradle類比成Maven。
- Gradle Wrapper的作用是簡化Gradle本身的安裝、部署。不同版本的項目可能需要不同版本的Gradle,手工部署的話比較麻煩,而且可能産生沖突,是以需要Gradle Wrapper幫你搞定這些事情。Gradle Wrapper是Gradle項目的一部分。
- Android Plugin for Gradle是一堆适合Android開發的Gradle插件的集合,主要由Google的Android團隊開發,Gradle不是Android的專屬建構系統,但是有了Android Plugin for Gradle的話,你會發現使用Gradle建構Android項目尤其的簡單。
另外需要說明的一點是Gradle、Gradle Wrapper與Android Plugin for Gradle不一定要和Android Studio一起使用,你可以完全脫離Android Studio,使用三者獨立進行Android項目的建構。下面是三者官方的指導文檔(從位址可以看出Gradle Wrapper是Gradle項目的一部分):
- Gradle: https://docs.gradle.org/current/userguide/userguide_single.html
- Gradle Wrapper: https://docs.gradle.org/current/userguide/gradle_wrapper.html
- Android Plugin for Gradle: https://developer.android.com/studio/build/index.html
為了加深大家對于三者的了解,我們聊一聊在實際的項目建構中,這三者的關系,之前已經說過三者可以脫離Android Studio獨立使用,但是這種情況在實際開發場景中并不多見,是以本文還是使用Android Studio作為開發工具進行介紹。當我們建立一個Android項目時,會出現類似于下圖所示的目錄結構:

可以看到一個gradle/wrapper目錄,其中有兩個檔案:gradle-wrapper.jar/gradle-wrapper.properties,gradle-wrapper.jar是Gradle Wrapper的主體功能包。在Android Studio安裝過程中産生gradle-wrapper.jar(如果預設安裝的話會在
C:\Program Files\Android\Android Studio\plugins\android\lib\templates\gradle\wrapper\gradle\wrapper\gradle-wrapper.jar
)。然後每次建立項目,會将gradle-wrapper.jar拷貝到你的項目的gradle/wrapper目錄中。gradle-wrapper.properties檔案主要指定了該項目需要什麼版本的Gradle,從哪裡下載下傳該版本的Gradle,下載下傳下來放到哪裡,如下圖所示:
其中GRADLE_USER_HOME一般指
~/.gradle
,從圖示項目中可以知道我要使用gradle-4.1版本,從
https://services.gradle.org/distributions/gradle-4.1-all.zip
下載下傳,下載下傳到本地的
~/.gradle/wrapper/dists
目錄。
有時由于網絡問題,可能無法正常下載下傳對應的gradle版本,導緻Sync Project With Gradle Files失敗,此時可以在AS報錯後在
~/.gradle/wrapper/dists
目錄中找到gradle版本對應的那個目錄,比如
~/.gradle/wrapper/dists/gradle-4.1-all/cdund22i8guosqylfo49op4dv
,然後從網上下載下傳gradle-4.1-all.zip并将其放到該目錄中,重新Sync Project With Gradle Files即可。
那是不是各個項目的Gradle都要通過Gradle Wrapper下載下傳,能不能所有的項目共用一個Gradle?這樣理論上是可以的,但是由于Gradle本身不一定保持完全的相容性,是以新老項目共用一個Gradle有時可能會遇到意想不到的問題。指定對應版本的Gradle,而不通過Gradle Wrapper下載下傳的設定方式是勾選如下圖中的
Use local gradle distribution
,同時指定Gradle home:
Gradle對應版本下載下傳完成之後,Gradle Wrapper的使命基本完成了,Gradle會讀取build.gradle檔案,該檔案中指定了該項目需要的Android Plugin for Gradle版本是什麼,從哪裡下載下傳該版本的Android Plugin for Gradle。如下圖所示:
從圖示項目中可以知道我們要使用3.0.1版本,從google和jcenter處下載下傳,那麼下載下傳到我們本地的哪裡呢?它會下載下傳到
~\.gradle\caches\modules-2\files-2.1\com.android.tools.build
中。有時候大家網絡裝填不好,選擇下圖中的
Offline work
時可能出現"No cached version of com.android.tools.build:gradle:xxx available for offline mode"問題,此時你隻要将對應版本的Android Plugin for Gradle下載下傳到本地的
C:\Program Files\Android\Android Studio\gradle\m2repository\com\android\tools\build
中即可。
好了,三者的關系從樣例項目中理清楚了。如果大家有什麼疑問可以給我留言。
我的部落格即将搬運同步至騰訊雲+社群,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan