AndroidStudio與gradle相關(guān)的疑難雜癥基本都可以靠這個(gè)方法解決

想必大家在做Android開(kāi)發(fā)的時(shí)候最恨的就是gradle了,因?yàn)樗鲜浅霈F(xiàn)各種問(wèn)題讓你的項(xiàng)目跑不起來(lái),特別是你在使用別人的開(kāi)源項(xiàng)目的時(shí)候,更是各種問(wèn)題層出不窮,同步了半天最后給你一個(gè)錯(cuò)誤報(bào)告,接下來(lái)我將就我遇到的gradle相關(guān)的問(wèn)題做一個(gè)經(jīng)驗(yàn)分享:

問(wèn)題1,網(wǎng)絡(luò)問(wèn)題

問(wèn)題1.1,gradle.zip的下載問(wèn)題

當(dāng)你興沖沖的拿著GitHub的開(kāi)源項(xiàng)目想打開(kāi)它的時(shí)候一來(lái)就會(huì)遇到第一個(gè)問(wèn)題就是與gradle相關(guān)的下載問(wèn)題,因?yàn)閯e人的項(xiàng)目用的gardle的版本可能跟你一直以來(lái)用的版本不一致,或者是新人安裝AndroidStudio第一次打開(kāi)它的時(shí)候,就會(huì)遇到漫長(zhǎng)的gradle下載過(guò)程,因?yàn)榉?wù)器在外國(guó),國(guó)內(nèi)訪問(wèn)下載速度當(dāng)然和百度網(wǎng)盤(pán)有得一拼,如果你會(huì)魔法的話當(dāng)我沒(méi)說(shuō),現(xiàn)在講兩種方法:

方法一:

找到你工程目錄下面的gradle-wrapper.properties,它應(yīng)該只有一個(gè),然后找到里面的distributionUrl=https:xxxxxxxx/gradle-x.x-bin.zip,這個(gè)其實(shí)就是指定了gradle的下載路徑,你可以將其改成國(guó)內(nèi)的下載地址,其實(shí)就是將中間的xxx部分替換成:mirrors.cloud.tencent.com/gradle,就可以了,替換后應(yīng)該是這樣的:distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-x.x-bin.zip,這里面的x.x就是gradle的版本,你的項(xiàng)目是多少就是多少不要?jiǎng)铀?。這個(gè)方法能解決一部分的問(wèn)題但是不代表能解決所有的gradle文件的下載問(wèn)題。比如項(xiàng)目中還可能下載gradle-x.x-src.zip的問(wèn)題,我暫時(shí)不知道在哪里修改它的路徑,因此就要用第二種方法了。

方法二:

其實(shí)就是使用代理,找到你項(xiàng)目下面的gradle.properties,他有很多個(gè),要找后面標(biāo)注有project的那個(gè),然后在最后面添加以下代碼:

# 阿里云鏡像
systemProp.http.proxyHost=mirrors.aliyun.com
systemProp.http.proxyPort=80
systemProp.https.proxyHost=mirrors.aliyun.com
systemProp.https.proxyPort=443

然后再次同步的時(shí)候gradle的下載速度應(yīng)該會(huì)快一點(diǎn),等你下載完gradle后可以視情況把他注釋掉,因?yàn)槭褂盟孟襁€有坑,后面再說(shuō)有什么坑。

問(wèn)題1.2 ,plugin的下載問(wèn)題

當(dāng)你同步的時(shí)候報(bào)錯(cuò),無(wú)法應(yīng)用或下載某個(gè)插件,比如ktolin plugin,gradle plugin之類(lèi)的時(shí)候你應(yīng)該考慮是不是你開(kāi)啟了代理,其實(shí)就是前面說(shuō)的在gradle.properties中添加的代理,關(guān)掉它,或者注釋掉它就能正常下載了。有些時(shí)候你找不到怎么關(guān)閉代理的時(shí)候可以到gradle.properties里面去看一下,不過(guò)這次是global properties,就是前面說(shuō)的,gradle.properties有很多個(gè),其中一個(gè)是project的,這次是global的,總之這些帶properties的都可以去看看,里面到底有沒(méi)有添加代理,或者到Android studio的settings里面去關(guān)閉。

問(wèn)題1.3,依賴(lài)下載的問(wèn)題

先說(shuō)依賴(lài)下載的第一個(gè)問(wèn)題就是依賴(lài)下載慢,半天都下載不下來(lái)還報(bào)錯(cuò),解決辦法就是添加國(guó)內(nèi)鏡像源,在我們的settings.gradle或者settings.gradle.kts,只是一個(gè)是舊版本的gralde用的,一個(gè)是新版本用的,都一樣,語(yǔ)法上大致相同但是又稍微有點(diǎn)區(qū)別。不管怎樣先把它找到,這兩文件都應(yīng)該只有一個(gè),然后在下面這兩個(gè)地方添加:

//第一處添加的位置
pluginManagement {
    repositories {
        //這些是要添加的,新版本用這種語(yǔ)法
        maven { url = uri("https://www.jitpack.io") }
        maven { url = uri("https://maven.aliyun.com/repository/google") }
        maven { url = uri("https://maven.aliyun.com/repository/jcenter") }
        maven { url = uri("https://maven.aliyun.com/nexus/content/groups/public") }
        
        //老版本的用這種語(yǔ)法
        maven { url 'https://www.jitpack.io' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public'}

        //下面的是默認(rèn)有的,不同的人可能有些不一樣
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

第二個(gè)位置是在:

//第二處添加的位置
dependencyResolutionManagement {
    repositories {
        //添加的內(nèi)容同上面一樣
        ...
    }
}

這樣下載速度應(yīng)該就會(huì)很快了,但是這個(gè)依舊有坑,請(qǐng)注意。
現(xiàn)在說(shuō)第二個(gè)問(wèn)題,就是添加了鏡像源但是還是報(bào)錯(cuò)了,提示什么cannot resolve all configuration等之類(lèi)的一大堆報(bào)錯(cuò)問(wèn)題,其意思大概就是從你所給的地址中我無(wú)法找到對(duì)應(yīng)的依賴(lài)項(xiàng),這個(gè)就是上面配置國(guó)內(nèi)鏡像源的時(shí)候的一個(gè)坑,因?yàn)閲?guó)內(nèi)的鏡像源并不能包含所有的依賴(lài),而Android Studio好像又有點(diǎn)笨,他會(huì)從上到下從你之前配置的鏡像源地址中去找依賴(lài),找不到就報(bào)錯(cuò),我也不知道為什么,所以我們之前配置的時(shí)候都是將國(guó)內(nèi)的鏡像源放到最上面,好讓AS(Android Studio的簡(jiǎn)稱(chēng))能優(yōu)先使用鏡像地址去下載依賴(lài),如果你配置到默認(rèn)地址的下面的話你會(huì)發(fā)現(xiàn)不管用,因?yàn)锳S不會(huì)優(yōu)先使用后面的地址,但是現(xiàn)在我們的國(guó)內(nèi)鏡像源已經(jīng)無(wú)法找到相關(guān)的依賴(lài)了,你不會(huì)自動(dòng)到后面默認(rèn)的地址里面去找嗎?理論上它因該會(huì)但是實(shí)際上沒(méi)有,所以這時(shí)候我們只能幫他一把了,把之前配置的國(guó)內(nèi)鏡像源往后面挪一下吧,讓默認(rèn)地址在最前面,這樣就不會(huì)報(bào)錯(cuò)了,但是下載速度可能不會(huì)很快,當(dāng)你發(fā)現(xiàn)當(dāng)前gradle同步時(shí)下載的依賴(lài)是maven倉(cāng)庫(kù)里面的東西的時(shí)候,恰好又下載得很慢得時(shí)候,你可以先停止,然后把國(guó)內(nèi)鏡像源又移到默認(rèn)地址的前面去,如此反復(fù)橫跳,我相信你一定會(huì)下載成功的。

問(wèn)題2,版本問(wèn)題

gradle經(jīng)常會(huì)報(bào)錯(cuò),誰(shuí)又和誰(shuí)的版本不兼容請(qǐng)更新或者降低,我覺(jué)得我們應(yīng)該有一個(gè)原則,就是盡量少去更改gradle的版本,而是去修改build SDK,kotlin,以及依賴(lài)的版本,使他們能兼容。
build SDK很好改,按照它的錯(cuò)誤提示更改就行了,打開(kāi)Project Structure去選擇更改就行了,如果沒(méi)有這個(gè)SDK版本就在AS里面下載一個(gè)就行了,或者它報(bào)錯(cuò)之后后面一般都會(huì)給你一個(gè)解決方案其中一個(gè)就是升級(jí)或降低你的SDK版本,這個(gè)是一鍵操作的,甚至都不需要你去下載。如果是kotlin的版本問(wèn)題,一般你可以到帶project字樣的build.gradle中去修改,找到plugins下面的'org.jetbrains.kotlin.android'后面的版本就可以了,但是注意這里是有坑的,這個(gè)版本不是越高越好的,因?yàn)楦甙姹镜膋otlin要求要一個(gè)高版本的idea插件來(lái)編譯它,所以如果你的AS的版本比較低,那么你可能無(wú)法安裝高版本的idea插件,那解決方案就是升級(jí)你的AS。那還有的項(xiàng)目可能不是在build.gradle中去修改kotlin版本而是有一個(gè)專(zhuān)門(mén)的版本文件,它將項(xiàng)目中用到的所有的依賴(lài)的版本包括kotlin的版本都匯總到一個(gè)文件中去了一般像libs.versions.toml這種名字的就是了,你要到里面去一個(gè)一個(gè)的看,找到了修改它就行了。依賴(lài)的版本問(wèn)題那最好的方法就是調(diào)整依賴(lài)自身的版本,選擇升級(jí)還是降級(jí),如果不知道是否兼容可以嘗試。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容