Gradle的代理问题

Author Avatar
purefkh 9月 08, 2018
  • 在其它设备中阅读本文章

暑假前凭 一腔热血 报了 Java及手机app开发 这门课。谁知 ××教务 却不认这门课的学分。便又是凭着 一腔热血 没有退课。

暑假在家就一直困扰于 gradle 的网络连接问题。由于一些众所周知的原因,Android 开发对国内的网络环境实在是不算友好。

最开始的时候通过 proxychains 来启动 Android Studio,还是可以编译的,但是在连接虚拟机的时候又会出现端口占用的问题。只能重新启动 AS,很是不便。

也找了一些个解决方法,但是由于基本没有 Android 知识,一直不知道该如何去执行。

这些天也开始了 Android 的学习,渐渐对基本文件有了一丁点的了解,也就顺便解决了 Gradle 的网络连接问题。

先要从 AS 项目中文件的作用说起

当你新建一个项目时,AS 会 默认使用 Android 模式的项目结构,这种结构看起来更简洁,但是由于 不是真实结构,可能会让人摸不着头脑,建议先在左上角切换至 Project 视图,更适合我这种小白使用。

由于这篇文章只用来记录 gradle 代理的设置,所以各个文件并不一一介绍。

可以看到,在 gradle/ 下以及 app/src/ 下分别有一个 build.gradle 文件。这便分别是 项目全局的 gradle 构建脚本app 模块的 gradle 构建脚本

便看 gradle 全局构建脚本。

buildscript {    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

文件中的两处 repositories 都声明了 jcenter() 配置,而 jcenter 就是 Android 开源项目的一个代码托管仓库。相似的,google() 是一个依赖仓库,由于种种原因,我们想要稳定的连接这个仓库并不容易。

这样讲的话此处就有两个解决方案

  1. 通过合适的方式进行全局代理(由于个人水平有限,我在Linux下实在没有找到完美的方法,此处便不作介绍)

  2. 通过国内的镜像站(此处使用了阿里的镜像站)

    通过上文对 build.gradle 文件中 仓库配置 的简单描述,现在来看只要有了镜像站,修改起来并不是什么难事。只须将 google() jcenter() 注释掉,并添加镜像地址即可。

    示例如下

    buildscript {
        repositories {
    //        google()
    //        jcenter()
            maven { url 'https://plugins.gradle.org/m2/' }
            maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
            maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
            maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
    
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.4'
        }
    }
    
    allprojects {
        repositories {
    //        google()
    //        jcenter()
            maven { url 'https://plugins.gradle.org/m2/' }
            maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
            maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
            maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    至此,gradle 的依赖问题 完美解决

本文参考 完美解决gradle依赖库导致build慢的问题