Gradle常見概念講解&版本問題報錯的處理方案

原文鏈接:
http://www.reibang.com/p/0e680428a745
http://www.reibang.com/p/c7983274c510

1帚称、Gradle

項目的構(gòu)建工具,管理一個項目的依賴架包,性質(zhì)和maven相似

一個基于groovy的項目打包工具能復(fù)用很多的打包過程(tasks)有一個中央倉庫能找到你打包過程中需要依賴的庫淮韭,并且聲明使用很簡單

2垄琐、Gradle wrapper

用于統(tǒng)一項目所使用的gradle版本,保證了所有開發(fā)人員在該項目使用同一個版本的編譯工具進行編譯(統(tǒng)一項目所使用的gradle版本)

在android studio中,選中你的項目征讲,切換到project files視圖,在項目根目錄下就能看到gradle/wrapper/gradle-wrapper.properties 文件橡娄,配置大體如下:

#Mon Dec 28 10:00:20 PST 2015
#規(guī)定了解壓后的gradle包放在哪里
distributionBase=GRADLE_USER_HOME 
distributionPath=wrapper/dists
#規(guī)定了gradle的zip包放在哪里
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#規(guī)定了使用哪個版本的gradle編譯項目诗箍,這個地址可以配置成服務(wù)器地址或者本地地址
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

根據(jù)此配置Gradle Wrapper會自動為我們下載合適的Gradle版本。默認情況下挽唉,下載位置是在$USER_HOME/.gradle/wrapper/dists滤祖,如果設(shè)置了GRADLE_USER_HOME環(huán)境變量,那么就會下載到GRADLE_USER_HOME/wrapper/dists下.

3瓶籽、Gradle plugin

Gradle plugin 匠童,俗稱gradle插件,是android studio為了方便使用gradle進行配置和編譯而開發(fā)的插件塑顺,它跟隨gradle版本的變遷而變遷.

在android studio中汤求,項目的根目錄下的build.gradle中會配置如下代碼:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'       
    }
}

這個dependencies中的gradle:2.1.0代表的就是使用gradle 插件版本 2.1.0. 在編譯過程中,如果gradle插件版本與gradle版本不匹配严拒,編譯就會失敗.
目前在使用的gradle與gradle插件版本的對應(yīng)關(guān)系如下

屏幕快照 2019-07-11 下午4.26.40.png

Gradle plugin的版本通常隨Android Studio的安裝包扬绪,目錄位置在

/Applications/Android\ Studio.app/Contents/gradle/m2repository/com/android/tools/build/gradle

4、gradlew

gradlew: W意思是wrapper糙俗,它是一個用bash命令包裝過的gradle編譯啟動腳本勒奇,里面會進行環(huán)境變量檢測和設(shè)置,最終進行編譯的還是gradle.常見命令如:gradlew -v 查看當(dāng)前項目下gradle版本

在工程目錄下執(zhí)行 gradlew build --info巧骚,即可編譯工程赊颠。Android Studio對gradle配置問題錯誤輸出不明顯,用這種方式能看到具體的出錯原因劈彪。


報錯信息

分析:

“Gradle version 2.2 is required. Current version is 2.10.try editing the distributionUrlin/MyApplication/gradle/wrapper/gradle-wrapper.properties to gradle-2.2-all.zip.”

這到底是啥意思呢竣蹦?

簡單解釋一下:“根據(jù)你的AS的Gradle插件版本,與你匹配的Gradle版本是2.2沧奴,但是你當(dāng)前的Gradle版本是2.10.請嘗試將Gradle系統(tǒng)版本改為gradle-2.2-all.zip”

先理清下Gradle版本的概念:

Gradle version: Gradle是一種自動化建構(gòu)工具(例如Ant 痘括、Maeven也是構(gòu)建工具),Gradle version就是指這種構(gòu)建工具的版本號滔吠「倬可以在你項目根目錄的gradle/wrapper/gradle-wrapper.properties里指定。指定后AS會自動去下載或者你也可以去Gradle官網(wǎng)下載相應(yīng)的版本放到/Users/你的用戶名/.gradle/wrapper/dists目錄下

Android Plugin Version : 是指你Android Studio里的gradle插件版本疮绷。在你項目根目錄下的build.gradle文件中的dependencies節(jié)點下設(shè)置翰舌。

Paste_Image.png

而我的AS Gradle插件版本我設(shè)置的是1.2.3,Gradle構(gòu)建工具的版本是2.10.Android Plugin Version和Gradle version是有對應(yīng)關(guān)系的冬骚,Plugin版本太低了椅贱,所以gradle 2.10是不支持 1.2.3版本的plugin懂算。

三種解決方案:

一 根據(jù)報錯信息里建議的:降低 Gradle版本到2.2

  1. 下載gradle-2.2-all.zip如果讓 AS自動去下載 gradle-2.2-all.zip實在是太慢了!所以將https://services.gradle.org/distributions/gradle-2.2-all.zip 這個網(wǎng)址拖到迅雷把它下載好庇麦,然后放到/Users/你的用戶名/.gradle/wrapper/dists目錄下

  2. 進入AS的設(shè)置中计技,設(shè)置使用默認的gradle wrapper來管理gradle


    Paste_Image.png

  3. 進入項目根目錄的gradle/wrapper/gradle-wrapper.properties里


    Paste_Image.png
    修改為

distributionUrl=https://services.gradle.org/distributions/gradle-2.2-all.zip

  1. 選擇 File—>invalidate and restart
  2. 耐心等待一會


    Paste_Image.png

發(fā)現(xiàn)會彈框提醒你升級 插件版本Android Gradle Plugin


Paste_Image.png

先忽略。然后就可以運行程序了山橄。
修改后各版本匹配關(guān)系:
Android Studio版本是 2.1
Plugin version 是 1.2.3
Gradle version是 2.2

二 提高 plugin 版本

  1. 修改根目錄下 build.gradle文件中的plug 版本垮媒,改為>=1.5.0:classpath 'com.android.tools.build:gradle:1.5.0’或者2.0.0或2.1.0
  2. 修改gradle wrapper中的

distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip

3 .這時候不要點擊Sync Now
4 .選擇 File—>invalidate and restart

讓它加載1分鐘左右就好了。

修改后各版本匹配關(guān)系:
Android Studio版本是 2.1
plugin version 是 >=1.5.0
gradle version是 2.10

三 靈活配置

比如我們團隊用的版本是:plugin1.2.3 , gradle構(gòu)建工具2.4為了保持一致驾胆,所以我又不得不

  1. 下載gradle-2.4-all.zip扔到/Users/你的用戶名/.gradle/wrapper/dists/目錄下
  2. 修改gradle wrapper.properties 文件涣澡,將url改為gradle-2.4-all.zip
  3. File—> invalidate and restart
  4. 進入AS的設(shè)置中,設(shè)置use default gradle wrapper來管理gradle

修改后各版本匹配關(guān)系:
Android Studio版本是 2.1
plugin version 是 1.2.3
gradle version是 2.4


重新打開項目丧诺,出現(xiàn)

Error:null value in entry: incrementalFolder=null

或者

Could not create service of type CachingFileHasher using TaskExecutionServices.createFileSnapshotter().

解決方法:

  1. 刪除 .gradle 目錄
  2. 重啟 Android Studio

換了新手機,app安裝不上或一運行就crash

關(guān)掉Instant Run


gradle vs gradlew

gradlew是gradle的包裝器奄薇,它的主要用處是保證編譯環(huán)境一致驳阎。
不同人電腦安裝了不同Android Studio,gradlew必要時會去網(wǎng)絡(luò)下載所需要的gradle版本馁蒂。


Suggestion: use tools:overrideLibrary="android.support.v17.leanback" to force usage

在manifest中添加呵晚,不要忘了也要包含xmlns:tools="http://schemas.android.com/tools"

image

編譯太慢

Gradle編譯特別慢,一直在 resolve dependency

一般是Android Studio升級后沫屡,沒有找到相應(yīng)的gradle版本饵隙。鑒于國內(nèi)的網(wǎng)絡(luò)環(huán)境,下載過程會非常長沮脖〗鹈可以嘗試用本地離線模式


i

j

離線模式需要曾經(jīng)編譯成功過的,才能使用

Gradle sync failed: Could not run build action using Gradle distribution 'https://services.gradle.org/distributions/gradle-3.3-all.zip

gradle下載不下來勺届,建議用本地gradle驶俊。將https://services.gradle.org/distributions/gradle-3.3-all.zip下載,解壓免姿,設(shè)置gradle home為解壓目錄(有bin的那個就是)

local gradle

更改后饼酿,如果還是很慢,需要檢查一下 gradle plugin 版本是否對應(yīng)胚膊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末故俐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子紊婉,更是在濱河造成了極大的恐慌药版,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肩榕,死亡現(xiàn)場離奇詭異刚陡,居然都是意外死亡惩妇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門筐乳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歌殃,“玉大人,你說我怎么就攤上這事蝙云∶ブ澹” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵勃刨,是天一觀的道長波材。 經(jīng)常有香客問我,道長身隐,這世上最難降的妖魔是什么廷区? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮贾铝,結(jié)果婚禮上隙轻,老公的妹妹穿的比我還像新娘。我一直安慰自己垢揩,他們只是感情好玖绿,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叁巨,像睡著了一般斑匪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锋勺,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天蚀瘸,我揣著相機與錄音,去河邊找鬼宙刘。 笑死苍姜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悬包。 我是一名探鬼主播衙猪,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼布近!你這毒婦竟也來了垫释?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撑瞧,失蹤者是張志新(化名)和其女友劉穎棵譬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體预伺,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡订咸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年曼尊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脏嚷。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡骆撇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出父叙,到底是詐尸還是另有隱情神郊,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布趾唱,位于F島的核電站涌乳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏甜癞。R本人自食惡果不足惜夕晓,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望带欢。 院中可真熱鬧运授,春花似錦、人聲如沸乔煞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渡贾。三九已至,卻和暖如春雄右,著一層夾襖步出監(jiān)牢的瞬間空骚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工擂仍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囤屹,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓逢渔,卻偏偏與公主長得像肋坚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肃廓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,161評論 25 707
  • 報錯信息 分析: “Gradle version 2.2 is required. Current version...
    wenzhiming閱讀 18,968評論 3 22
  • 每本書都有個序智厌,我這文集也有一些說在前面的話。 每一個靈魂來到這個世界上盲赊,都是為了讓自己的靈魂得到成長铣鹏。 這也是我...
    阿榮在思考閱讀 296評論 2 0
  • 1.輪回 世界的初始是一束進入黑暗的光芒。 起初光芒很弱哀蘑,視線對上的話就如同蒼穹之上的星光中的一點诚卸。 后來光的范圍...
    葉翎上閱讀 322評論 0 0
  • 參加朋友的婚禮葵第,突發(fā)奇想。若男主人公找個假女主人公一步一步走向殿堂合溺,在證婚人說你愿意嫁給XXX的時候卒密,假女主人被臺...
    各種不服專治文藝女青年閱讀 280評論 0 2