Gradle常见概念讲解&版本问题报错的处理方案

原文链接:
http://www.jianshu.com/p/0e680428a745
http://www.jianshu.com/p/c7983274c510

1、Gradle

项目的构建工具,管理一个项目的依赖架包,性质和maven相似

一个基于groovy的项目打包工具能复用很多的打包过程(tasks)有一个中央仓库能找到你打包过程中需要依赖的库,并且声明使用很简单

2、Gradle wrapper

用于统一项目所使用的gradle版本,保证了所有开发人员在该项目使用同一个版本的编译工具进行编译(统一项目所使用的gradle版本)

在android studio中,选中你的项目,切换到project files视图,在项目根目录下就能看到gradle/wrapper/gradle-wrapper.properties 文件,配置大体如下:

#Mon Dec 28 10:00:20 PST 2015
#规定了解压后的gradle包放在哪里
distributionBase=GRADLE_USER_HOME 
distributionPath=wrapper/dists
#规定了gradle的zip包放在哪里
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#规定了使用哪个版本的gradle编译项目,这个地址可以配置成服务器地址或者本地地址
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

根据此配置Gradle Wrapper会自动为我们下载合适的Gradle版本。默认情况下,下载位置是在$USER_HOME/.gradle/wrapper/dists,如果设置了GRADLE_USER_HOME环境变量,那么就会下载到GRADLE_USER_HOME/wrapper/dists下.

3、Gradle plugin

Gradle plugin ,俗称gradle插件,是android studio为了方便使用gradle进行配置和编译而开发的插件,它跟随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插件版本的对应关系如下

屏幕快照 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编译启动脚本,里面会进行环境变量检测和设置,最终进行编译的还是gradle.常见命令如:gradlew -v 查看当前项目下gradle版本

在工程目录下执行 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.”

这到底是啥意思呢?

简单解释一下:“根据你的AS的Gradle插件版本,与你匹配的Gradle版本是2.2,但是你当前的Gradle版本是2.10.请尝试将Gradle系统版本改为gradle-2.2-all.zip”

先理清下Gradle版本的概念:

Gradle version: Gradle是一种自动化建构工具(例如Ant 、Maeven也是构建工具),Gradle version就是指这种构建工具的版本号。可以在你项目根目录的gradle/wrapper/gradle-wrapper.properties里指定。指定后AS会自动去下载或者你也可以去Gradle官网下载相应的版本放到/Users/你的用户名/.gradle/wrapper/dists目录下

Android Plugin Version : 是指你Android Studio里的gradle插件版本。在你项目根目录下的build.gradle文件中的dependencies节点下设置。

Paste_Image.png

而我的AS Gradle插件版本我设置的是1.2.3,Gradle构建工具的版本是2.10.Android Plugin Version和Gradle version是有对应关系的,Plugin版本太低了,所以gradle 2.10是不支持 1.2.3版本的plugin。

三种解决方案:

一 根据报错信息里建议的:降低 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 这个网址拖到迅雷把它下载好,然后放到/Users/你的用户名/.gradle/wrapper/dists目录下

  2. 进入AS的设置中,设置使用默认的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

发现会弹框提醒你升级 插件版本Android Gradle Plugin


Paste_Image.png

先忽略。然后就可以运行程序了。
修改后各版本匹配关系:
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分钟左右就好了。

修改后各版本匹配关系:
Android Studio版本是 2.1
plugin version 是 >=1.5.0
gradle version是 2.10

三 灵活配置

比如我们团队用的版本是:plugin1.2.3 , gradle构建工具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的设置中,设置use default gradle wrapper来管理gradle

修改后各版本匹配关系:
Android Studio版本是 2.1
plugin version 是 1.2.3
gradle version是 2.4


重新打开项目,出现

Error:null value in entry: incrementalFolder=null

或者

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

解决方法:

  1. 删除 .gradle 目录
  2. 重启 Android Studio

换了新手机,app安装不上或一运行就crash

关掉Instant Run


gradle vs gradlew

gradlew是gradle的包装器,它的主要用处是保证编译环境一致。
不同人电脑安装了不同Android Studio,gradlew必要时会去网络下载所需要的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升级后,没有找到相应的gradle版本。鉴于国内的网络环境,下载过程会非常长。可以尝试用本地离线模式


i

j

离线模式需要曾经编译成功过的,才能使用

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下载,解压,设置gradle home为解压目录(有bin的那个就是)

local gradle

更改后,如果还是很慢,需要检查一下 gradle plugin 版本是否对应

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,565评论 25 707
  • 报错信息 分析: “Gradle version 2.2 is required. Current version...
    wenzhiming阅读 18,467评论 3 22
  • 每本书都有个序,我这文集也有一些说在前面的话。 每一个灵魂来到这个世界上,都是为了让自己的灵魂得到成长。 这也是我...
    阿荣在思考阅读 285评论 2 0
  • 1.轮回 世界的初始是一束进入黑暗的光芒。 起初光芒很弱,视线对上的话就如同苍穹之上的星光中的一点。 后来光的范围...
    叶翎上阅读 308评论 0 0
  • 参加朋友的婚礼,突发奇想。若男主人公找个假女主人公一步一步走向殿堂,在证婚人说你愿意嫁给XXX的时候,假女主人被台...
    各种不服专治文艺女青年阅读 254评论 0 2