• Android学习笔记 1.2.1 下载和安装Gradle && 1.2.2 Gradle构建文件和创建任务


    Android学习笔记

    疯狂Android讲义

    第1章 Android 应用和开发环境

    1.2 使用Gradle自动化构建项目

    Gradle是新一代的自动化构建工具,升级版的Ant或Maven,Gradle可以完成Ant、Maven的所有工作,甚至整合Ant或Maven的功能。

    1.2.1 下载和安装Gradle

    虽然Android studio所采用的构建工具就是Gradle,简单了解一下。

    Gradle的优势:

    • Ant、Maven支持的构建操作,Gradle都可以支持。
    • Gradle提供了强大的依赖管理,完全支持已有的 Maven或Ivy仓库。
    • Gradle使用 Groovy语言来编写构建文件,构建文件的功能更加灵活。因此,Gradle的构建文件可支持高级 API,允许开发人员对构建过程进行监视或配置管理。
    • 使用领域对象模型来描述构建。
    • Gradle支持多项目构建。
    • 提供简单易用的自定义任务、自定义插件。

    安装Gradle:

    下载地址

    https://services.gradle.org/distributions/

    在这里插入图片描述

    现在已经7.5.1了…

    选择:

    • 源代码包 src
    • 二进制文件包 bin
    • 完整包 all

    下载gradle - 7.5.1 - all .zip

    在这里插入图片描述

    解压到D盘根目录下

    在这里插入图片描述

    • bin:包含Gradle的命令
    • docs:用户手册、DSL参考指南、API文档
    • lib:包含Gradle核心、以及它依赖的JAR包
    • src:Gradle源代码

    Java环境变量

    在这里插入图片描述

    将bin路径添加到操作系统的PATH环境变量

    在这里插入图片描述

    测试是否安装成功

    在这里插入图片描述

    1.2.2 Gradle构建文件和创建任务

    如果运行 gradle命令时没有指定任何参数,Gradle 会在当前目录下搜索build.gradle文件。如果找到了就以该文件作为构建文件,并执行指定任务。

    要想让 Gradle使用其他构建文件,可以用–buildfile<构建文件>选项,

    gradle -b a.xml //显示指定使用a.xml作为构建文件
    gradle --buildfile b.xml //显示指定使用b.xml作为构建文件
    
    • 1
    • 2

    如果希望 Gradle运行时只输出少量的必要信息,则可以使用–quiet或-q选项。如果运行Gradle时要显式指定希望运行的任务,则可以采用如下命令格式。

    gradle [task1 [task2 [task3] ... ]]
    
    • 1

    使用Gradle 的关键就是编写构建文件,构建文件的主要作用就是定义构建项目的各种任务(Task)和属性,每个任务可包含多个动作(Action),Gradle每次运行时可运行一个或多个任务。

    Gradle构建文件的默认名字为 build.gradle,也可以取其他名字。但如果为该构建文件起其他名字,则意味着要将这个文件名作为参数传给Gradle 工具。可以将构建文件放在项目的任何位置,但通常做法是放在项目的根目录中,这样有利于保持项目的简洁和清晰。

    一个典型的Gradle项目层次结构:

    在这里插入图片描述

    我超,这不就是那啥…

    如果使用 gradle命令构建过项目,那么在项目的根目录下会多出一个.gradle 文件夹,在该文件夹中存放的是Gradle的构建信息,一般不要手动去修改、删除它。

    Gradle构建文件本质上是一个Groovy源文件,因此该文件的语法完全符合Groovy语法。

    Gradle采用领域对象模型的概念来组织构建文件,在整个构建文件中涉及如下最核心的API:

    • project:代表项目,通常一份构建文件代表一个项目

    • TaskContainer:任务容器,每个project都会维护一个TaskContainer类型的tasks属性,即TaskContainer和project一一对应。

    • Task:代表 Gradle要执行的一个任务。Task 允许指定它依赖的任务、该任务的类型,也可通过configure()方法配置任务。它还提供了doFirst()、doLast()方法来添加 Action。 Action对象和 Closure对象都可代表 Action。

      【Closure代表一个闭包,所以Action实际上就代表一个代码块】

    Gradle构建文件结构:

    在这里插入图片描述

    为Gradle构建文件创建Task有如下常用方法:

    • 调用Project的task()方法创建Task
    • 调用TaskContainer的create()方法创建Task

    Task属性:

    • 通过dependsOn属性指定该 Task所依赖的其他Task。
    • 通过type属性指定该Task的类型。
    • 通过传入的代码块参数配置Task

    举个栗子

    使用idea创建一个gradle项目

    在这里插入图片描述

    等待项目构建完成

    在这里插入图片描述

    编辑build.gradle文件

    //定义hello1任务
    task hello1{
        println "配置第一个任务"
    }
    
    • 1
    • 2
    • 3
    • 4

    使用gradle hello1命令执行

    在这里插入图片描述

    新知识get

    很明显,输出语句并不是在运行阶段输出的,而是在配置阶段。

    【Gradle的构建过程】

    Gradle是一种声明式的构建工具,使用Gradle构建时,Gradle并不是直接按顺序执行 build.gradle文件中的内容的,Gradle的构建过程可分为两个阶段。

    1. 第一阶段:配置阶段。在此阶段,Gradle会读取build.gradle文件的全部内容来配置Project和Task,比如设置 Project和 Task的 Property、处理Task之间的依赖关系等。
    2. 第二阶段:按依赖关系执行指定Task。

    如果需要为Task添加Action,则可通过Task 的doFirst、doLast方法——正如它们的名字所暗示的,doFirst用于将Action添加在Action序列的前面, doLast用于将Action添加在Action序列的后面。

    // 定义hello2任务,传入的代码块负责配置该任务
    task hello2 {
        println "配置第二个任务"
        // 调用doLast方法为Task添加Action
        doLast {
            // 使用循环
            for(i in 0..<5){
                println i
            }
        }
        // 调用doFrist方法为Task添加Action
        doFirst {
            // 定义变量
            def s = "fkjava.org"
            // 输出字符串模板
            println "开始执行第二个任务:$s"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    运行hello2任务

    在这里插入图片描述

    强强强,Gradle构建文件不是简单的XML配置,而是完全支持Groovy编程语言,一个构建文件就能拥有无限可能。

    从执行过程可以清楚地看出 Gradle构建的配置和运行两个阶段。在配置阶段,Gradle会配置整个Project和所有Task,因此可以看到hello1、hello2两个 Task 的配置代码的执行过程;在运行阶段,则只看到执行hello2任务。从上面的执行结果可以看出,程序先执行doFirst方法添加的Action,再执行doLast方法添加的Action。

    此外, Project对象还带一个TaskContainer类型的tasks属性,因此也可在构建文件中通过 tasks属性的create方法来创建Task。

    // 调用Project的tasks属性(TaskContainer)的create方法来创建task
    tasks.create(name: 'showTasks') {
        doLast{
            // 查看Project的tasks属性的类型
            println "tasks属性的类型:${tasks.class}"
            // 遍历tasks属性
            tasks.each {e ->
                println e
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行任务

    在这里插入图片描述

    在创建Task时可通过dependsOn属性指定该Task所依赖的Task,也可通过type指定该Task的类型——如果不指定type属性,Task 的默认类型是Gradle实现的DefaultTask类。

    指定dependsOn和type属性:

    //调用project的tasks属性的create方法创建Task
    //dependsOn指定该Task依赖hello2,该Task的类型是Copy(文件拷贝)
    tasks.create(name : 'fkTask',dependsOn:'hello2',type:Copy){
        from 'books.xml'
        into 'dist'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行任务

    在这里插入图片描述

    由于fkTask任务依赖hello2,因此在执行 fkTask 任务之前会先执行hello2任务。命令执行完成后,可以看到项目根目录下的 books.xml文件被复制到dist目录下。

    使用 Project的 task方法创建Task时也可指定 type、dependsOn属性,例如如下代码定义了compile和run两个任务。由于这两个任务分别为JavaCompile、JavaExec类型,因此该构建文件需要应用java插件。

    创建主类

    在这里插入图片描述

    构建文件

    // 应用名为'java'的插件,主要为了引入JavaCompile、JavaExec两个任务
    apply plugin: 'java'
    // 指定该任务的类型为JavaCompile
    task compile(type: JavaCompile){
        source = fileTree('src/main/java')
        classpath = sourceSets.main.compileClasspath
        destinationDir = file('build/classes/main')
        options.fork = true
        options.incremental = true
    }
    // 指定该任务的类型为JavaExec
    task run(type: JavaExec, dependsOn: 'compile'){
        classpath = sourceSets.main.runtimeClasspath
        // 指定主类为lee.HelloWorld
        main = 'dingjiaxiong.HelloWorld'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    上面代码定义的compile任务的类型是JavaCompile(编译Java源程序的 Task
    读者可通过Gradle的API文档查看关于该Task 的具体信息),在使用JavaCompile时需要通过 source指定源代码所在路径,通过 destinationDir指定编译后的字节码文件的保存位置,该任务的默认Action将会编译所有Java源文件。
    上面run任务的类型是JavaExec(运行Java程序的Task,可通过 Gradle的API文档查看关于该Task 的具体信息),在使用JavaExec时需要通过main指定运行的主类。
    为了看到Gradle编译、运行Java源代码的效果,应按Gradle的约定,将所有Java源文件放在src\mainljava目录下,并创建build路径作为构建目录。

    使用gradle run命令运行

    在这里插入图片描述

  • 相关阅读:
    思维分析逻辑 1 DAY
    云贝教育 |【DSI】Oracle数据库系列课-葵花宝典技术内幕实战课程
    线段树简单介绍
    mosn基于延迟负载均衡算法 -- 走得更快,期待走得更稳
    数值分析笔记(二)函数插值
    FFMPEG音视频开发指南(一)
    高性能MySQL实战第12讲:海量数据MySQL项目实战
    insightface 换脸
    等保设备是什么,等保设备有哪些
    Autosar基础——DLT(DiagnosticLogAndTrace)
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126435365