在编译java应用,比如android应用,有些组件仓库,使用的是国外仓库,甚至仓库中心本身已经关闭或者迁移,所以需要使用国内镜像,加快下载速度。
解决方法两种:
-
配置代理
-
翻墙下载组件,放到仓库下,地址 用户目录/.gradle/caches/modules-2/files-2.1
-
配置仓库镜像,一些特殊的组件没有在镜像中,只能使用后面方法
配置镜像,配置的地方可以两处:可以直接在工程中配置,也可以全局配置 (对电脑上所有的工程起作用),以上配置一个即可。
详细配置方法:
一. 在代码工程中配置
- gradle.properties中有proxy的配置,这个只能在公司中使用 (也许有效,我暂时注释了),现在启用了阿里云镜像,在BIM的rn项目的develop分支已经做了调整 。
##下面是公司的代理服务器地址,如果还有问题,必须翻墙,且在公司里编译,gradle.properties中去掉下面的注释
#systemProp.https.proxyHost=192.168.0.119
#systemProp.https.proxyPort=3128
2. 出现java.lang.NoClassDefFoundError android.support.v4.content.ContextCompat 报错
在react-native-*的一些包中,导入了android.support.v4.content.ContextCompat
- 找到报错的文件,将文件中
import android.support.v4.content.ContextCompat;
改成
import androidx.core.content.ContextCompat;
- 注意修改gradle.properties文件,在BIM的rn项目的develop分支已经做了调整
android.useAndroidX=true
android.enableJetifier=true
- 修改build.gradle,在上面增加。在BIM的rn项目的develop分支已经做了调整
allprojects {
repositories {
def ALIYUN_REPO_URL = 'https://maven.aliyun.com/repository/public/'
def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/'
def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPO_URL."
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
remove repo
}
if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
remove repo
}
if (url.startsWith('https://plugins.gradle.org/m2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
remove repo
}
}
}
mavenLocal()
maven { url ALIYUN_REPO_URL }
maven { url ALIYUN_JCENTER_URL }
maven { url ALIYUN_GOOGLE_URL }
maven { url ALIYUN_GRADLE_PLUGIN_URL }
}
}
二. 全局配置init.gradle
- [可选] 所在操作系统中,创建系统或者用户的全局变量
创建以下环境变量,例如在MAC/linux下 /etc/profile,
##根据不同的操作系统,安装的实际路径做修改
GRADLE_HOME=/usr/loca/gradle
GRADLE_USER_HOME =/Users/i/.m2/repository
##添加PATH
PATH=$PATH:$GRADLE_HOME/bin
windows下参考
按WIN+R → 输入sysdm.cpl → 选择系统属性→高级→点击环境变量(面板右下角)→添加用户和系统级别的环境变量
- 创建init.gradle,
创建init.gradle,可以放在以下目录之一,HOME是用户目录,GRADLE_HOME是gradle的安装目录
$HOME/.gradle/
$HOME/.gradle/init.d/
$GRADLE_HOME/init.d/
allprojects{
repositories {
def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/'
def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
remove repo
}
if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
remove repo
}
if (url.startsWith('https://plugins.gradle.org/m2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
remove repo
}
}
}
jcenter() { url 'https://maven.aliyun.com/repository/public' }
//maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
maven { url ALIYUN_REPOSITORY_URL }
maven { url ALIYUN_JCENTER_URL }
maven { url ALIYUN_GOOGLE_URL }
maven { url ALIYUN_GRADLE_PLUGIN_URL }
}
}