Gradle 編譯的那些坑

說(shuō)到 Gradle 編譯犁苏,相信每個(gè) Android 開(kāi)發(fā)者都或多或少曾經(jīng)被坑過(guò)。因?yàn)間radle依賴的倉(cāng)庫(kù)都在國(guó)外华蜒,而國(guó)內(nèi)訪問(wèn)國(guó)外網(wǎng)絡(luò)都情況大家也都懂得官册。我司的情況就更嚴(yán)重了,20 多個(gè)內(nèi)部依賴瓷马,50 多個(gè)三方依賴拴还。然后光 root gradle 文件里就有這么多倉(cāng)庫(kù)(不要問(wèn)我為什么):

repositories {
       jcenter()
       mavenCentral()
       google()
       maven {
           url "http://127.0.0.1:8081/nexus/content/repositories/releases/"  // 127.0.0.1 代指內(nèi)部 maven 倉(cāng)庫(kù)
       }
       maven {
           url "http://127.0.0.1:8081/nexus/content/repositories/central"
       }
       maven {
           url "http://127.0.0.1:8081/nexus/content/repositories/snapshots"
       }
       maven {
           url "http://127.0.0.1:8081/nexus/content/groups/public"
       }
       maven { url "https://jitpack.io" }
       maven {
           url "https://oss.sonatype.org/content/repositories/snapshots/"
       }
       mavenLocal()
}

每次拉一個(gè)新倉(cāng)庫(kù)下來(lái),光 sync dependencies 就要好久欧聘。萬(wàn)一中間再遇到什么坑片林,那就有得搞了,有時(shí)候一兩天都不一定能解決怀骤。本篇文章就是筆者總結(jié)的遇到的 gradle sync 中遇到的一些坑费封。

先試試重啟大法?

重啟試試? Invalidate Caches and Restart 了解一下蒋伦?

大坑:JCenter 被墻

如果你最近突然發(fā)現(xiàn) jcenter 上的東西一直拉不下來(lái)弓摘,那大概率是 jcenter 被墻了。
解決方案:
全局替換 jcenter 源到 aliyun mirror:

~/.gradle 目錄下新建 init.gardle 文件痕届,輸入以下內(nèi)容:

gradle.projectsLoaded {
    rootProject.allprojects {
        buildscript {
            repositories {
                def REPOSITORY_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://repo1.maven.org/maven2')
                            || url.startsWith('https://jcenter.bintray.com/')) {
                            project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                            println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
                            remove repo
                        }
                    }
                }
                jcenter {
                    url REPOSITORY_URL
                }
            }
        }
        repositories {
            def REPOSITORY_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://repo1.maven.org/maven2')
                        || url.startsWith('https://jcenter.bintray.com/')) {
                        project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                        println("allprojects ${repo.url} replaced by $REPOSITORY_URL.")
                        remove repo
                    }
                }
            }
            jcenter {
                url REPOSITORY_URL
            }
        }
    }
}

Gradle 緩存存放位置

~/.gradle/caches/modules-2/files-2.1 這個(gè)目錄下可以找到你依賴的所有 gradle 庫(kù)的包韧献。

明明有緩存,卻提示一直拉不下來(lái)研叫?

之前我曾遇到過(guò)某兩個(gè)庫(kù)依賴一直無(wú)法拉下來(lái)的問(wèn)題锤窑,遂從別人電腦的 cache 路徑下 copy 過(guò)來(lái)對(duì)應(yīng)目錄,以為這樣就能解決了嚷炉。卻發(fā)現(xiàn) gradle sync 無(wú)論如何也無(wú)法重試渊啰,掛了代理,切換 offline mode... 都嘗試未果渤昌。 后來(lái)經(jīng)分析 Gradle 在每個(gè)項(xiàng)目的 .gradle 目錄下生成了一份 hash 映射虽抄,對(duì)應(yīng)每個(gè)版本一份。在第一次獲取這個(gè)依賴庫(kù)的時(shí)候生成独柑,此后就一直根據(jù)這個(gè) hash 查找迈窟。然而有個(gè)很坑爹的問(wèn)題是,這個(gè) hash 值在沒(méi)臺(tái)電腦下都不一致忌栅。而 gradle 在下載依賴時(shí)车酣,只會(huì)根據(jù)依賴包命和版本號(hào)判斷對(duì)應(yīng)依賴是否已經(jīng)存在在緩存中曲稼。所以就出了這個(gè)現(xiàn)象:明明緩存里有,但 gradle 編譯就是找不到湖员,然后又一直不會(huì)去下載贫悄。
解決方案:
刪除工程目錄下的 .gradle 目錄和本地 ~/.gradle/caches/modules-2/files-2.1 下的所有文件,然后重啟 AS 進(jìn)行 sync娘摔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窄坦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凳寺,更是在濱河造成了極大的恐慌鸭津,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肠缨,死亡現(xiàn)場(chǎng)離奇詭異逆趋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)晒奕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門闻书,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人脑慧,你說(shuō)我怎么就攤上這事魄眉。” “怎么了漾橙?”我有些...
    開(kāi)封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵杆融,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我霜运,道長(zhǎng),這世上最難降的妖魔是什么蒋腮? 我笑而不...
    開(kāi)封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任淘捡,我火速辦了婚禮,結(jié)果婚禮上池摧,老公的妹妹穿的比我還像新娘焦除。我一直安慰自己,他們只是感情好作彤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布膘魄。 她就那樣靜靜地躺著,像睡著了一般竭讳。 火紅的嫁衣襯著肌膚如雪创葡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天绢慢,我揣著相機(jī)與錄音灿渴,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛骚露,可吹牛的內(nèi)容都是我干的蹬挤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棘幸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼焰扳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起误续,我...
    開(kāi)封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吨悍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后女嘲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畜份,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年欣尼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爆雹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愕鼓,死狀恐怖钙态,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情菇晃,我是刑警寧澤册倒,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站磺送,受9級(jí)特大地震影響驻子,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜估灿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一崇呵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馅袁,春花似錦域慷、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至弛针,卻和暖如春叠骑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钦奋。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工座云, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疙赠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓朦拖,卻偏偏與公主長(zhǎng)得像圃阳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子璧帝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 說(shuō)明 本文主要介紹和Gradle關(guān)系密切捍岳、相對(duì)不容易理解的配置,偏重概念介紹睬隶。部分內(nèi)容是Android特有的(例如...
    jzj1993閱讀 15,576評(píng)論 1 62
  • Gradle配置最佳實(shí)踐 本文會(huì)不定期更新锣夹,推薦watch下項(xiàng)目。如果喜歡請(qǐng)star苏潜,如果覺(jué)得有紕漏請(qǐng)?zhí)峤籭ssu...
    Solang閱讀 1,625評(píng)論 0 4
  • 大家平時(shí)都用什么app呀银萍! 推薦幾個(gè)好玩的好用的嘛
    痣哥說(shuō)行閱讀 277評(píng)論 0 0
  • 1.讀納蘭性德寫的詞,你會(huì)感受其中有那么個(gè)飽含摯意深情恤左,且十分凄惋動(dòng)人的主旋律贴唇,久久地在你心上縈回,且聽(tīng)這首《蝶戀...
    有說(shuō)有笑有情調(diào)閱讀 780評(píng)論 0 0
  • 時(shí)間不會(huì)在一個(gè)點(diǎn)停留飞袋,也不會(huì)有盡頭戳气!可是我們卻會(huì)消失在某個(gè)時(shí)間點(diǎn)。所說(shuō)時(shí)間短暫巧鸭,可我依然覺(jué)得滿足瓶您。我并不富裕,可我...
    別不開(kāi)心閱讀 398評(píng)論 0 2