原文地址:https://blog.csdn.net/zhaohad/article/details/104031757
先吐槽:Google的文檔寫的真爛。下載一次代碼要花幾個小時的時間,而且給的現成的REPO下載下來之後還會存在編譯失敗的情況,網上也很難找到編譯失敗的解決方法只能自己不斷猜測、嘗試來解決。我臺式電腦用的Ubuntu系統,雖然Ubuntu上的源碼已經能跑起來了,但是在mac的環境上還是有編譯問題,現在還沒解決。最詳細的說明可以參考 https://android.googlesource.com/platform/tools/base/+/studio-master-dev/source.md,但是裏面很多東西,並不是文檔上說的這麼回事。
1. 代碼下載
官方文檔:https://android.googlesource.com/platform/tools/base/+/studio-master-dev/source.md
這個是文檔列舉的應該是Gradle和AndroidStudio的主開分之的manifest,裏面的Gradle版本是3.6.0,版本太新。此時google官方提供的AndroidStudio版本是3.5.3,還沒法支持Gradle 3.6.0。所以我用的Gradle 3.4.0的版本分支
在官方文檔最後寫了這麼一段:
所以要下載Gradle 3.4.0的代碼需要執行下面的命令:
$ repo init -u https://android.googlesource.com/platform/manifest -b gradle_3.4.0
$ repo sync
原代碼位於
android.googlesource.com/platform/tools/base/
android.googlesource.com/platform/tools/base/+/XXXXX 可以直接在瀏覽器看到某個XXXX版本的源代碼
後面的url參數 +/XXXX是該git倉庫的tag,源碼下載之後可以運行
git tag
可以列出來這個工程的所有tag,比如我們要看gralde 3.4.0版本的源碼。可以直接寫url
https://android.googlesource.com/platform/tools/base/+/gradle_3.4.0
所有的tag可以從這裏找到:https://android.googlesource.com/platform/manifest/+refs
所以官方文檔也要對應版本換一下了:Gradle 3.4.0的文檔在這裏:https://android.googlesource.com/platform/tools/base/+/gradle_3.4.0/source.md
2. 源碼編譯
官方文檔:https://android.googlesource.com/platform/tools/base/+/gradle_3.4.0/build-system/README.md
下載完代碼之後進入到tools目錄,運行
$ ./gradlew :publishAndroidGradleLocal
我的Mac上會出現這樣的錯誤
FAILURE: Build failed with an exception.
* Where:
Script '<path/to/your/gradle/>/gradle-3.4.0/tools/buildSrc/base/baseJava.gradle' line: 6
* What went wrong:
A problem occurred evaluating script.
> Could not get unknown property 'cloneArtifacts' for root project 'tools' of type org.gradle.api.Project.
我寫了一篇單獨的解決方法在這:https://blog.csdn.net/zhaohad/article/details/104068936。
在Ubuntu上編譯也會出現問題:
FAILURE: Build failed with an exception.
* Where:
Build file '<path/to/your/gradle>/tools/base/instant-run/instant-run-server/build.gradle' line: 43
* What went wrong:
A problem occurred evaluating project ':base:instant-run:instant-run-server'.
> android-25 android.jar not found at <path/to/your/gradle>/prebuilts/studio/sdk/linux/platforms/android-27/android.jar
解決方法就是把Android SDK Manager下載的相關的platforms目錄下的東西考別到<path/to/your/gradle>/prebuilts/studio/sdk/linux/platforms/這個目錄下然後重新編譯下就好了。
運行成功之後,會在根目錄下生成out/repo/com/android/tools/build/gradle/3.4.0-dev目錄,然後將這個目錄加入到目標Android項目的maven裏面就可以了。方法如下:
打開AndroidStudio,新建一個Android工程,然後將根目錄下的build.gradle改成下面這樣:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven { url '<path/to/your/gradle>/out/repo' }
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0-dev'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven { url '<path/to/your/gradle>/out/repo' }
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
之後在AS裏面執行GradleSync,就完成了
3. Hello Gradle
Gradle源碼查看官方推薦的是Intellij Idea,我也沒啥其他的可以推薦的,畢竟Intellij和AS是我最喜歡的IDE。但是官方說已經寫好了每個項目的.idea,我把工程導入進去之後也沒發現他事先寫好的這些.idea有啥用。
下載好Intellij Idea之後直接以java項目的方式導入Gradle的根目錄就好了,導入之後的結構大概是這樣的:
工程太大,導入的過程非常慢,整個IDEA都不好了。
導完之後,打開 AppExtension.java 這個文件,然後找到他的構造函數裏面寫上這麼一句:
System.out.println("Hello Gradle !!!");
然後回到terminal,在Gradle根目錄運行編譯:$ ./gradlew :publishAndroidGradleLocal
編譯完,回到剛創建的Android項目的AS,右邊打開“Gradle”,運行assemble
之後你就會看到在AS的輸出結果裏的信息:
至於爲什麼要在 AppExtension.java 這個裏面寫,也沒啥原因我只是簡單的找了一個gradle腳本的入口的類,證明一下我們編譯的Gradle是能夠正常執行的。
現在整個Gradle在你手上了,後面就自己造吧~