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