深入学习Gradle(一) Gradle配置⽂件拆解

gradle 是什么

  • 是构建⼯具,不是语⾔
  • 它⽤了 Groovy 这个语⾔,创造了⼀种 DSL,但它本身不是语⾔

怎么构建?

  • 按照 gradle 的规则(build.gradle、settings.gradle、gradle-wrapper、gradle
    语法)

闭包

  • Java 的 Lambda 表达式:是单抽象⽅法(SAM)的接⼝的匿名类对象的快捷写
    法,只是⼀个语法糖。
  • Kotlin 的 Lambda 表达式:和匿名函数相当,实质上是⼀个函数类型的对象,
    并不只是语法糖。
  • Groovy 的 Lambda 表达式:Groovy ⾥不叫「Lambda」表达式,⽽是叫「闭
    包」;在功能上,和 Kotlin 的 Lambda ⽐较相似,都是⼀个「可以传递的代码
    块」,具体的功能⽐ Kotlin 的 Lambda 更强⼀些,但基本的概念是⼀样的。

为什么 Groovy 可以写出类似 JSON 格式的配置?

因为它们其实都是⽅法调⽤,只是⽤闭包来写成了看起来像是 JSON 型的格式

buildTypes 和 productFlavors

  • buildTypes
    在创建项目的文件中已经创建了buildTypes了,里面包含了一些release的配置,即我们发布apk的配置(主要是混淆文件)。我们也可以创建一个debug的版本的配置,使用默认的签名证书,通过Build Variant就可以看到


    Build Variant

总结来说:主要就是配置发布版本和测试版本的一些配置以及混淆文件

  • productFlavors

productFlavors直译为:产品的偏好.productFlavors是在buildTypes之外的纬度的分配.看起来和buildTypes的作用很像,但是他可以做更多维度
从维度的角度:免费版/付费版 国内版/国外版 渠道包等

flavorDimensions 'paid', 'country'
    productFlavors {
        free {
            dimension "paid"
        }
        paid {
            dimension "paid"
        }
        china {
            applicationId "com.example.china"  //动态配置包名
            dimension "country"
            buildConfigField "String" , "APP_URL" , "http://www.china.com" //给不同版本配置不同域名
           buildConfigField "String" , "APP_NAME" , "小熊维尼" //不同维度不同名称
        }
        usa {
            applicationId "com.example.usa" //动态配置包名
            dimension "country"
           buildConfigField "String" , "APP_URL" , "http://www.usa.com" //给不同版本配置不同域名
            buildConfigField "String" , "APP_NAME" ,  "Winnie the Pooh"'//不同维度不同名称
        }

compile, buildTypesimplementation 和 api

  • implementation:不会传递依赖
  • compile / api:会传递依赖;api 是 compile 的替代品,效果完全等同
  • 当依赖被传递时,⼆级依赖的改动会导致 0 级项⽬重新编译;当依赖不传递
    时,⼆级依赖的改动不会导致 0 级项⽬重新编译

Gradle Wrapper

  • 通过「只同步版本,不同步⽂件」的⽅式来减⼩协作项⽬的⼤⼩
  • 每个⼈电脑上的 Gradle 存放在固定位置,然后使⽤ Gradle Wrapper 的配置来
    取⽤对应的版本就⾏了

task

  • 使⽤⽅法:./gradlew taskName
  • task 的结构:
task taskName {
  初始化代码
  doFirst {
  task 代码
  }
  doLast {
  task 代码
  }
}
  • doFirst() doLast() 和普通代码段的区别:
    (1) 普通代码段:在 task 创建过程中就会被执⾏,发⽣在 codoFirst() 和 doLast():在 task 执⾏过程中被执⾏,发⽣在 段。如果⽤户没有直接或间接执⾏ task,那么它的 doLa不会被执⾏

    (2) doFirst() 和 doLast() 都是 task 代码,其中 doFirst() 是往码,doLast() 是往队列的后⾯插⼊代码

  • task 的依赖:可以使⽤task taskA(dependsOn: b) 的指定依赖后task 会在⾃⼰执⾏前先执⾏⾃⼰依赖的 task。

gradle 执⾏的⽣命周期

三个阶段:

  • 初始化阶段:执⾏ settings.gradle,确定主 project 和⼦ project
  • 定义阶段:执⾏每个 project 的 bulid.gradle,确定出所有 task 所组成的有向⽆
    环图
  • 执⾏阶段:按照上⼀阶段所确定出的有向⽆环图来执⾏指定的 task

在阶段之间插⼊代码:

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

推荐阅读更多精彩内容