為什么需要配置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即可 ,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/449807.html
標籤:其他
下一篇:洗掉嵌套集合中的檔案
