Android Gradle 学习之一:源码下载(Mac问题解决篇)

原文地址:https://blog.csdn.net/zhaohad/article/details/104068936

本文解决gradle 3.4.0源码在mac平台编译不过的问题,源代码下载过程可以看之前的博客:https://blog.csdn.net/zhaohad/article/details/104031757

上文说到,mac下载了源码之后执行./gradlew :publishAndroidGradleLocal编译,会出现编译错误,编译错误如下。

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.

我先写解决方案,再说解决的过程吧。

1. 解决方法

terminal切到源代码根目录,执行

cd tools/
ls -s buildSrc/base/build.gradle build.gradle
ln -s buildSrc/base/build.xml build.xml
ls -s buildSrc/base/gradle.properties gradle.properties

运行完上面的命令之后就可以重新编译了,执行

./gradlew :publishAndroidGradleLocal

这次执行还是会有编译错误,但是编译错误已经变成了下面这样:


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

解决方法比较简单,上一篇里面也提到了,把相应的目录考过去就可以了。Mac下AS下载android SDK的目录在“~/Library/Android/sdk/platforms”

拷贝完之后就能顺利编译通过了。

2.解决过程

先看编译错误里面显示:Script '<path/to/your/gradle/>/gradle-3.4.0/tools/buildSrc/base/baseJava.gradle' line: 6,找不到cloneArtifacts。

所以直接全局里面搜一下cloneArtifacts,发现是在buildSrc/base/build.gradle里面定义的。

然后在buildSrc/base/build.gradle这个里面打了几行log,发现至始至终编译都不会走到这个文件。

所以就开始找buildSrc/base/build.gradle是在哪里被引入的。

“build.gradle”这样的文件名一般是作为模块或者项目的默认构建脚本存在的,那么他的引入应该是在buildSrc目录下或者根目录下的settings.gradle文件里面。找到跟目录下的settings.gradle后里面是直接include了另外一个文件

// This file is copied by repo to tools/settings.gradle

// To enable pre-submit checks, it imports settings-real.gradle,
// so changes are effective immediately, without a manual copy.
apply from: 'buildSrc/base/settings-real.gradle'
// Do not add anything else here.

然后继续找buildSrc/base/settings-real.gradle,发现里面有引用base模块,但是这个base模块指的应该是根目录下的base目录而不是buildSrc/base。

无奈!!!确实找不到buildSrc/base/build.gradle的引入源头。

 

仔细看build.gradle或者其他的一些.gradle文件里面可能会发现一些目录引用关系的细节,比如这段在buildSrc/base/build.gradle里面第一句话就有:

apply plugin: 'clone-artifacts'

buildscript {
    apply from: "$rootDir/buildSrc/base/version.gradle"

    repositories {
        maven { url "$rootDir/../prebuilts/tools/common/m2/repository" }
    }

    dependencies {
        classpath libs.kotlin_gradle_plugin
    }
}

细节就在里面用了一个rootDir的变量,这个变量表示根项目build文件的绝对路径,那么反推一下,跟项目应该位于buildSrc的上级目录也就是tools目录下。那么tools目录下应该有个build.gradle文件才对的嘛,找了一下这个文件,没有!!!!

难道是我不小心删掉了?运行了下git status,发现这个tools目录就不是个git工程。无奈跟Ubuntu上下载的源码做了一下对比,发现确实少了3个文件,就是在解决过程中写到的那3个build.gradle, build.xml, gradle.properties。再一看这三个文件是个软连接直接指向了buildSrc/base里面的3个同名文件!!!

创建了3个软连接之后,果然就能够编译了。所以之前一直在找buildSrc/base/build.gradle这个文件到底在哪里引入的,原来它才是最最最根的那个build.gradle。

至于为啥mac平台上repo下载之后软连接文件会丢失的问题,咱也不细追了,可能是repo的bug吧,总之问题也算是解决了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值