为什么需要配置gradle?
本机环境:win10 + AS2021.1.1版本
另外说明:搞android,jdk如果是8的,AS会根据你使用的AGP版本,提醒你升级到java11版本,会半自动往sdk文件夹下载11版本的jre。所以在这不说明jdk版本。
名词解释: AGP - Android Gradle 插件
最重要的环境就是AGP版本,官网版本说明中提到了版本变化,由早先1.0-4.~ ,直接跨越到了7.0
AS官网链接: https://developer.android.google.cn/studio/releases/gradle-plugin
经过我千辛万苦的试错,终于透过了现象和语言障碍看到了本质(加载过程)
首先你的AS,创建新项目时,会根据你的AS版本找到对应的默认AGP版本,比如我的AS是2021.1.1,对应就是AGP7.1.1版本,而这个AGP版本就对应了Gradle7.2+的版本
而AS在构建项目时,会根据AS的settings,也就是IDE的设置进行查找:这里现放出默认配置。
再来看项目里的properties文件是怎样进行默认配置的:
现放出AGP版本图:
对应文件
可以看到这几个加载项,顺序可变,一共五个,第一个找不到去第二个加载,以此类推,但一般情况下:如果你使用默认配置(没有配置自定义Gradle,和Gradle环境变量),那么我们自然就会跳转到url,也就是图中第二个加载项去下载整个gradle。
所以会很慢,但最慢的并不是下载gradle,而是加载常用的jar包依赖,比如junit,fastjson等等,会变得奇慢无比。 因为要去外网下载。
这时候也就是我们要配置gradle的原因了。
相信大家看到这里,也搜过类似的国内配置,但你能看到我这篇文章,说明你看的未能解决你的问题,或者令你一知半解。我教你,怎么在AS中正确配置自定义Gradle让其加载。
另外说一句,你想从Github上拉取Android项目,也需要修改各种Gradle配置,往下看,以后你不用在修改任何配置也能直接加载别人的项目
首先,去下载不低于你当前项目使用的AGP版本对应版本的Gradle,(这里直接百度Gradle即可,有官网,官网有版本可选择)。
为什么说不低于,是因为Gradle向下兼容,所以不必每次都对应上,直接下个最高的不好么、、、
下载完毕去配置一下国内镜像,这里我用的我贴一下。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
}
}
}
maven { url ALIYUN_REPOSITORY_URL }
maven { url ALIYUN_JCENTER_URL }
maven { url ALIYUN_GOOGLE_URL }
maven { url ALIYUN_GRADLE_PLUGIN_URL }
}
buildscript{
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
}
}
}
maven { url ALIYUN_REPOSITORY_URL }
maven { url ALIYUN_JCENTER_URL }
maven { url ALIYUN_GOOGLE_URL }
maven { url ALIYUN_GRADLE_PLUGIN_URL }
}
}
} 创建一个init.gradle文件,内容为上述。放置到下载好的Gradle根目录下即可。
这里说明:你用你搜到的哪种写法的配置,哪个镜像都行,目的是让AS识别到镜像(AS构建项目时,会使用指定Gradle,去加载,如果你配置了镜像,它会识别到)
刷新同步时,可以看看
如图,有这个就可。
下面重点来了
配置AS的Gradle目标目录:
2必须勾选,1随意,1用于别人可以用你Gradle,在混合开发中。一般没啥用。
2 为使用你配置里的配置项去下载依赖jar包。
3 则是最重要,使用你指定的位置的Gradle。
4则为 Gradle根目录,别忘了配置init.gradle
然后配置完ok,再次同步即可,你可以看到飞快的速度。
打包问题:
打包成apk时,可以试试.一个hello world的empty基本只需要不到20s
如果持续卡在某一步,好几十秒一分钟左右不变化.那么就可以试一下此解决方案:
打开app下的子模块的build.gradle配置文件
在此文件的android {} 中
配置// 解决打包问题lintOptions {
//不检查版本发布
checkReleaseBuilds false
//出现错误不终止
abortOnError false
} 重新打包APK即可 。
|