文章目錄
- 問題引入
- 原因
- 解決方法
- 1. 檢查gradle版本和gradle插件版本是否匹配
- 2. 解決gradle下載慢的問題
- 手動下載gradle包
- 替換依賴倉庫
- 方法一:在build.gradle(project級別)里改變依賴倉庫
- 方法二:配置全域替換的檔案(推薦)
問題引入
我們剛接觸安卓開發,在環境搭建階段,安裝Android studio的時候或者新建一個專案的時候,往往會卡到一個地方一直等待,一直等待,,,直到最后報紅線,怎么搞都不行,最后崩潰,放棄了,毀滅吧,搞不了了,
其實,就是一個gradle下載緩慢的小問題把好多新人擋在了Android開發的大門之外,
唉唉,朋友,別放棄,看這里,都是小問題,
這里給大家分享一下個人的解決方案,
原因
原因可能有兩個:
- gradle版本和gradle插件版本不匹配(這個會直接導致報錯)
- gradle服務器在國外,國內網路訪問自然慢啊,Android Studio已經盡力了,
解決方法
1. 檢查gradle版本和gradle插件版本是否匹配
- gradle版本的定義在你的
gradle-wrapper.properties
如:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
上述檔案中的 distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip 表明,你使用的gradle 版本是 6.5,具體的包是gradle-6.5-bin.zip
- gradle插件版本的定義在你的
build.gradle(project級別)檔案里,
如:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.0"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
上述檔案中的 classpath "com.android.tools.build:gradle:4.1.0" 表明,你的gradle plugin(插件)版本是 4.1.0
那么, 6.5 版本的 gradle 和 4.1.0 版本的gradle plugin匹配嗎?怎么號不太一樣?
答案是匹配的!這兩個的匹配關系有個表格,官方地址是:gradle與gradle plugin匹配關系,
當前已有的關系如下表:

所以,這下知道了吧,好多工程編譯出錯都可能是這兩個版本號的關系沒匹配造成的,
2. 解決gradle下載慢的問題
手動下載gradle包
既然Android studio下載不下來,那么我們可以手動下載啊,這里是gradle的官方下載地址:https://services.gradle.org/distributions/
點進去,下載對應的版本就行了,
舉個例子:
如我們需要gradle-6.5.all.zip這個包,下載好之后,需要把它放到你電腦的
C:\Users\fxjzz\.gradle\wrapper\dists\gradle-6.5-all\2oz4ud9k3tuxjg84bbf55q0tn
這個目錄下,不用解壓,在打開工程后android studio會自動幫我們解壓,
注意
- 上述路徑的
fxjzz是我電腦的用戶名,你的電腦是對應自己的用戶名,- 如果你的
dists下沒有對應的gradle版本檔案夾,你需要打開你的Android studio專案,它會開始sync,也就是下載需要的gradle,這時候就會自動在你的dists目錄下創建gradle-6.5-all檔案夾,以及后面的一串亂七八糟字母的子檔案夾2oz4ud9k3tuxjg84bbf55q0tn,這個名字是隨機生成的,你的肯定和我這個不一樣,
這樣手動下載了就好了嗎?
可能還不夠,,,
當我們手動下載,并且放置到對應位置,重新打開工程,可能會發現下面的進度仍然顯示在下載某些東西,瓦特?這是搞什么?!!
沒錯,它還要下一些東西,這時候如果你的網路下不下來,依然會非常慢,甚至報錯,
上述情況只是可能,有的人可能不會遇到,很順利的一會兒就成功了,
對于上述情況,
在手動下了gradle后,我們再增加一道措施:替換依賴倉庫,
替換依賴倉庫
這里也有兩種方法,
方法一:在build.gradle(project級別)里改變依賴倉庫
buildscript {
repositories {
// google()
// jcenter()
maven {url 'https://maven.aliyun.com/repository/jcenter'}
maven {url 'https://maven.aliyun.com/repository/google'}
maven {url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.0"
}
}
allprojects {
repositories {
// google()
// jcenter()
maven {url 'https://maven.aliyun.com/repository/jcenter'}
maven {url 'https://maven.aliyun.com/repository/google'}
maven {url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
即,用國內的代理倉庫地址取代google和jcenter這兩個倉庫地址,
方法二:配置全域替換的檔案(推薦)
在.gradle檔案夾下添加倉庫替代的組態檔init.gradle,這樣可以為所有工程自動替換倉庫,不需要每新建一個工程都修改里面的build.gradle檔案了,
創建一個init.gradle檔案,內容如下:
gradle.projectsLoaded {
rootProject.allprojects {
buildscript {
repositories {
def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
def NEXUS_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
all { ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
println("buildscript ${repo.url} replaced by $JCENTER_URL.")
remove repo
}
else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
remove repo
}
else if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
remove repo
}
}
}
jcenter {
url JCENTER_URL
}
google {
url GOOGLE_URL
}
maven {
url NEXUS_URL
}
}
}
repositories {
def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
def NEXUS_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
all { ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
println("buildscript ${repo.url} replaced by $JCENTER_URL.")
remove repo
}
else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
remove repo
}
else if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
remove repo
}
}
}
jcenter {
url JCENTER_URL
}
google {
url GOOGLE_URL
}
maven {
url NEXUS_URL
}
}
}
}
把這個檔案放到C:\Users\fxjzz\.gradle這個目錄下,這里 fxjzz 是我的用戶名,你自己的電腦會有自己的用戶名,
好了,這樣gradle下載緩慢的問題,應該能徹底的被解決啦~
再也不用氣到崩潰啦~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/264858.html
標籤:其他
上一篇:P1789 【Mc生存】插火把
下一篇:vue的自定義指令
