美文网首页延后2
深入学习Gradle(一) Gradle配置⽂件拆解

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

作者: 不思进取的码农 | 来源:发表于2021-06-09 01:10 被阅读0次

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 {
  插⼊代码
}

相关文章

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

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

  • Gradle-配置文件拆解

    扔物线课程学习总结 Gradle配置文件拆解 Gradle项目结构,以及Task Gradle执行的生命周期 1....

  • 01.Gradle的使用

    * 关于Gradle配置的小结关于Gradle配置的小结 - 推酷 - Gradle基础配置Gradle基础 -b...

  • gradle加速

    gradle自身配置 修改gradle配置文件gradle.properties配置如下: IDE配置(IJ为例)

  • Gradle编译1

    1.Gradle与Groovy Gradle是一个构造工具,基于Groovy来配置项目。因此要学习Gradle,G...

  • Gradle系列

    Gradle系列:Gradle系列一之Gradle介绍Gradle系列二之配置Groovy环境Gradle系列三之...

  • Gradle 自定义插件

    Gradle 自定义插件 官方原文 gradle学习官方翻译网站 1.新建项目 配置build.gradle 创建...

  • Spring Boot gradle 配置简介

    目录 Gradle是什么一个最简单的gradle项目结构和gradle配置gradle多模块设置gradle ta...

  • 通过lint检测代码

    Gradle环境变量的配置 配置GRADLE_HOME:找到Android Studio中gradle的位置E:\...

  • Spring源码解读,基础环境搭建以及准备

    知识要点: 安装配置Gradle Spring源码准备 安装配置Gradle 下载Gradle Spring是基于...

网友评论

    本文标题:深入学习Gradle(一) Gradle配置⽂件拆解

    本文链接:https://www.haomeiwen.com/subject/gbmrsltx.html