在项目根目录下的build.gralde里一般有项目的整体maven repo配置,例如
buildscript {
repositories {
jcenter()
mavenCentral()
//since gradle 4.0
google()
//maven { url uri('./repo') }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://dl.google.com/dl/android/maven2/' }
jcenter { url 'http://jcenter.bintray.com/' }
maven { url 'http://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
...
}
}
allprojects {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://dl.google.com/dl/android/maven2/' }
jcenter { url 'http://jcenter.bintray.com/' }
flatDir { dirs rootProject.rootDir.absolutePath + File.separator + 'aars' }
}
}
其中常用的repo有
jcenter()
mavenCentral()
//since gradle 4.0
google()
这些repo都是国外网站,由于大陆网络原因,下载jar/aar会很慢,幸亏有aliyun maven repo,所以可以全局替换这些repo配置为aliyun
实现方法:把如下配置保存为init.gradle文件,放到$HOME/.gradle/目录下。
allprojects {
repositories {
def ALIYUN_REPO = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository) {
def repoUrl = url
if (url instanceof java.net.URI) {
repoUrl = url.toString()
}
if (repoUrl.startsWith('https://repo1.maven.org/maven2')
|| repoUrl.startsWith('http://repo1.maven.org/maven2')
|| repoUrl.startsWith('https://jcenter.bintray.com/')
|| repoUrl.startsWith('http://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repoUrl} replaced by ${ALIYUN_REPO}"
remove repo
}
}
}
maven {
url ALIYUN_REPO
}
}
}
有些dns解析会把google()这个repo解析到国外,导致下载不了,其实它等价于maven { url 'https://dl.google.com/dl/android/maven2/' },当然可以用上面的方法替换,但dl.google.com同时也是studio里更新android sdk的地址,所以更好的方法是修改hosts文件,添加下面两行:
# android studio
203.208.39.238 dl.google.com
hosts文件的位置:
- Windows 为
C:\Windows\System32\drivers\etc - Unix/Linux 为
/etc
然后就可以正常编译了。