Android Gradle 學習之一:源碼下載

原文地址: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在你手上了,後面就自己造吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章