• Gradle基础


    Groovy

    • Apache的Groovy是Java平台上设计的面向对象编程语言。
    • Groovy代码动态地编译成运行于Java虚拟机(JVM)上的Java字节码,可以与其他Java代码和库进行互操作。在可运行Java的地方,就可运行Groovy。
    • 可以作为Java平台的脚本语言使用,并结合了Python、Ruby、Smalltalk等语言的强大功能。脚本语言用于将应用程序连接起来,实现一些繁琐的,变动频繁的细节,如基于groovy的 gradle构建等;只需要非常少的代码,却实现了相当强大的功能。
    • Groovy的语法与Java非常相似,大多数Java代码也符合Groovy的语法规则,大部分有效的Java文件也是有效的Groovy文件。
    • Groovy代码比Java代码更加紧凑,因为它不需要Java需要的所有元素。
    • Groovy特性包括了Java中不支持的静态和动态类型(使用关键字 def),
      运算符重载,提供了lists(列表)和关联数组(maps)提供了原生语法,
      原生支持正则表达式,多态迭代,字符串内嵌表达式,
      添加帮助方法以及Null条件运算符
    • 引入了DSL(领域定义语言)概念,简单易读,方便维护。
      DSL的全称是 Domain Specific Language,即领域特定语言,或者我们可以翻译成“特定领域的语言”。
      它的特性是为解决某一类任务而专门设计的语言。

    Gradle

    • Gradle是一个项目构建工具,可以按照一定的规则把目录和文件关联起来,自动化地构建从而形成一个项目。
    • Gradle是一个开发框架,基于Groovy语言,支持各平台基于它的框架去开发定制自己编译和打包规则。
    构建
    • 构建
      包括编译(Compile)、连接(Link)、将代码打包成可用或可执行形式等。AndroidStudio的build就是通过Gradle来实现的。
      如果没有构建工具,需要在控制台通过javac先将 Java 文件编译为 class 文件,然后再用jar命令将 class 文件打包为 jar 包。
      通过自动化构建工具只需要一个命令或是点一个按钮就可以打出 jar包。
      如果 Android 我们不用 Gradle 命令或是按运行按钮打包。那么我们得执行多少命令才能最终打出一个 apk 包。
      能够编译和打包android项目,是因为Google团队在Gradle的基础上扩展了一个Android的gradle插件。
    • Gradle插件
      是针对Gradle发行版和Android SDK Build Tools封装的一个工具,主要有两大功能:
      1、调用Gradle本身的代码和批处理工具来构建项目
      2、调用Android SDK的编译、打包功能
    对比
    • Ant
      1、为 Java 项目提供平台构建任务,具有良好的跨平台性,用build.xml文件来配置。
      2、ant不支持自动去下载配置依赖jar,不支持动态编译。
      3、在项目规范上规范性不足,灵活性太高,对 build.xml 没有约定规范;
      4、XML 作为构建脚本,如果项目构建较为复杂,build.xml 就会很长,难以维护。
    • Maven
      1、约定优于配置。对目录结构有约束,不需要自定义构建过程,配置较为简单。
      2、Maven还具有生命周期,更重要的是Maven内置了依赖管理
      3、缓存机制。如Android中.gradle文件。
      4、缺乏灵活性: 规范性太强,缺乏灵活性,会写很多冗余配置;
    • Gradle
      1、强大的依赖管理(基于 Apache Ivy),支持自动下载依赖包
      2、具有Ant的task的强大和灵活,又有Maven的生命周期管理、规范化的构建框架和仓库,且易于使用 。
      3、扩展性:脚本基于Groovy的动态DSL,支持像写脚本一样的去写项目的构建规则。
      4、Gradle 是 Android 的官方构建工具,并支持许多流行的语言和技术。
      5、快速构建: 二次构建只构建我们修改代码相关的类,不会耗费时间来构建整个项目;
      6、高性能:Gradle使用了缓存机制来加快构建,如Android中的.gradle文件夹。
      7、强大的多工程构建支持
      8、对已有的 maven 和 ivy 仓库的全面支持
      9、支持依赖传递管理,而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
    使用
    • Projects和Tasks是Gradle中最重要的两个概念。
    • 任何一个Gradle构建都是由一个或多个projects组成的。
    • projects其实就是Idea、AndroidStudio中的Module
    • tasks顾名思义就是任务,它是Gradle中的原子性操作,如编译、打包、生成javadoc等,一个project中会有多个tasks。
    • Gradle的构建模块是基于task的,Gradle要做的就是按照task之间的依赖关系来组织task按照合适的顺序运行。

    • Gradle Wrapper。官方建议任何 Gradle 构建方法在 Gradle Wrapper 帮助下运行。
    • Gradle Wrapper 是一个脚本,调用事先已经声明的 Gradle 版本,编译前先下载它。这样本地不用再去手动安装 Gradle 环境,开发者能够快速的启动并且运行 Gradle 项目,提高开发效率。
    • 可以称 Gradle Wrapper 为 Gradle 包装器,是将 Gradle 再次包装。让所有的 Gradle 构建方法在 Gradle 包装器的帮助下运行。

    • Gradle评估(evaluate)和指定构建脚本时有三个固定步骤:
      1、初始化(Initialization): 初始化构建所需的运行环境,并检查哪些projects参与构建
      2、配置(Configuration): 将tasks组织起来,决定它们按何种顺序执行
      3、执行(Execution): 执行tasks
    Android
    • Android 项目中跟 Gradle 相关的主要有 7 个部分:
    • 根目录下的 build.gradle:顶级构建文件,配置 Gradle 版本和 Maven 依赖;
    • app 目录下的 build.gralde文件:app 打包和签名配置,及模块的依赖;
    • gradle 文件夹: 配置 gradel-wrapper;
    • setting.gradle 文件: 添加编译的所有模块;
    • gradle.projects 文件: 项目范围的梯度设置,编译内存,Gradle 并发性等设置。;
    • gradlew 和 gradlew.bat 文件: Gradle 启动脚本文件;可以通过gradlew命令来打包
    • .gradle 文件夹: 编译时的缓存文件夹。
    命令
    • 查看app模块的依赖
      $ gradle app:dependencies
    • 编译并打Debug包
      $ gradle assembleDebug
    • 编译app module 并打Debug包
      $ gradlew install app:assembleDebug
    • 编译并打Release的包
      $ gradle assembleRelease
    • 编译并打Release包并安装
      $ gradle installRelease
    • 卸载Release包
      $ gradle uninstallRelease
    • 排除某些任务
      $ gradle clean build -x mTest
    参考:

    https://m.imooc.com/wiki/gradlebase-intro
    https://blog.csdn.net/LiMubai_CN/article/details/102746815
    https://www.jianshu.com/p/cc909d2bd13e

  • 相关阅读:
    Jetson Agx_Orin(Ubuntu20.04)设置vnc远程桌面记录
    [信息抽取]基于ERNIE3.0的多对多信息抽取算法:属性关系抽取
    springcloud使用微服务的搭建
    golang cobra命令行工具介绍
    【Linux】基础:进程地址空间
    计算机毕业设计ssm高校车辆租赁管理系统23qhn系统+程序+源码+lw+远程部署
    一文掌握虚拟机
    guava缓存
    gcc 和 g++的区别
    aspose-words去水印自用资源
  • 原文地址:https://blog.csdn.net/RiceVan/article/details/126619304