向日葵武士Android Gradle TipsAndroid 进阶

Gradle中配置内网仓库或者国内源加速下载

2017-08-02  本文已影响703人  act262

Android 项目中Gradle中默认使用jcenter仓库,网络不好的时候神马速度与激情都没了。。。
下面是默认的build.gradle配置,只有jcenter,成败在此一举

// 这里配置的是gradle plugin依赖的东东,比如build tools
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'
    }
}

// 这里配置的是具体项目依赖的东东,比如三方库
allprojects {
    repositories {
        jcenter()
    }
}

改善生活质量的小技能

1. 在当前项目的gradle配置中增加其他源,只对当前项目有效

// 阿里云 maven 服务,阿里云的maven服务应该算是比较靠谱的了吧
def MAVEN_ALIYUN = 'http://maven.aliyun.com/nexus/content/groups/public'

buildscript {
    repositories {
        jcenter()
        maven {
            url MAVEN_ALIYUN
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url MAVEN_ALIYUN
        }
    }
}

阿里云的maven仓库中已经包含了jcenter等几个常用的仓库,所以速度还是很有保障滴。
配置多个maven仓库时,优先级从上到下,也就是先从上面声明的仓库去找资源,找不到才往下找,常用的maven服务一般用 nexus

這样就能飞一般的加载一些依赖库了,但是不好的地方就是每个项目都要改动,还是不爽~

2. 使用gradle全局配置(推荐)

在不改变原有项目代码的情况下,使用全局gradle初始化脚本配置来修改一些属性最合适不过了
init.gradle文件放到.gradle目录下使用即可,不用跟随gradle版本不同而改动,如果是放到具体某个gradle版本的init.d目录下则每个版本都要放一次。

*unix用户 : ~/.gradle
windows用户: C:\Users\XXUser\.gradle

init.gradle具体内容如下,还可以做一些其他的功能

// 内网部署的 Maven
def NEXUS_SERVER = "http://nexus.company.com/content/groups/public"
def NEXUS_USERNAME = "username"
def NEXUS_PASSWORD = "password"

// 阿里云 maven 服务
def MAVEN_ALIYUN = 'http://maven.aliyun.com/nexus/content/groups/public'

allprojects {
    buildscript {
        repositories {
            maven {
                // 需要账号密码认证的maven服务
                credentials {
                    username NEXUS_USERNAME
                    password NEXUS_PASSWORD
                }
                url NEXUS_SERVER
            }

            maven {
                url MAVEN_ALIYUN
            }

            jcenter()
        }
    }

    repositories {
        maven {
            credentials {
                username NEXUS_USERNAME
                password NEXUS_PASSWORD
            }
            url NEXUS_SERVER
        }

        maven {
            url MAVEN_ALIYUN
        }

        jcenter()
    }
}

还可以把jitpack也放到这里来,这样就不用在要用到的项目中声明了
maven { url 'https://jitpack.io' }

3. 移除jcenter,用其他源替代,简单粗暴

allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                    remove repo
                }
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

欢迎推荐其他稳定的源~

开源中国的maven服务已经废了
最后附上一个sample init.gradle


参考:
https://docs.gradle.org/current/userguide/init_scripts.html
Sonatype Nexus

上一篇下一篇

猜你喜欢

热点阅读