為什么需要配置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,再次同步即可,你可以看到飛快的速度。
2022 . 4. 17日 更新
導入新項目時,如果你用上述方法出現奇怪的問題, 最好去官網查一下對應的AGP版本 然后直接下載gardle , 重新設置對應版本自定義Gradle 即可
打包問題:
打包成apk時,可以試試.一個hello world的empty基本只需要不到20s
如果持續卡在某一步,好幾十秒一分鍾左右不變化.那么就可以試一下此解決方案:
打開app下的子模塊的build.gradle配置文件
在此文件的
android {
}
中
配置
// 解決打包問題
lintOptions {
//不檢查版本發布
checkReleaseBuilds false
//出現錯誤不終止
abortOnError false
}
重新打包APK即可 。