在项目开发,使用gradle编译项目app代码的时候,碰到如下问题,辗转反侧夜不能寐,终于搞定。记录如下:

出错log

A problem occurred configuring root project ‘SHAKESHAKE’.
Could not resolve all files for configuration ‘:classpath’.
Could not resolve com.android.tools.build:gradle:3.0.1.
Required by:
project :
Could not resolve com.android.tools.build:gradle:3.0.1.
Could not get resource ‘https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.pom’.
Could not GET ‘https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.pom’.
Remote host closed connection during handshake

原因

  1. 由于国内的网络环境限制,所以不能顺利连接到外网。
  2. 由于公司服务网络策略原因,不能顺利连接到外网。

解决方法

  1. 获取已经下载成功的gradle缓存。无论是科学上网还是从其他机器拷贝。比如我自己搭建了一个可以上网,并且也可以成功编译app的docker,缓存地址在:

jenkins@690649a9f262:~$ find ./ -name gradle-3.0.1.pom
./.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle/3.0.1/f6941bdcc20f1efd54b55db56be1085bbe24e554/gradle-3.0.1.pom

将整个.gradle目录压缩,然后拷贝到编译失败的环境同目录下面。
2. 将编译失败环境中的app的build gradle指定为使用本地gradle。修改build.gradle,添加mavenLocal()

allprojects {
repositories {
mavenLocal()
google()
jcenter()
maven {
url ‘https://maven.google.com/’
name ‘Google’
}
}
}

总结

其实整个过程就是,将编译ok的环境里面的gradle,放到问题环境里面,并且指定问题环境里面的gradle使用本地仓库。这样就避免了该问题。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐