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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值