gradle笔记241028

206 阅读32分钟

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。以下是对Gradle的详细介绍:

一、定义及特点

Gradle是一个基于JVM的构建工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,并增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。Gradle面向Java应用为主,但也支持C++、Groovy、Kotlin、Scala和Swift等多种语言,并计划未来支持更多的语言。

Gradle的核心特点是其灵活性和可扩展性。它允许开发人员根据项目需求自定义构建逻辑和任务,提供了丰富的API和扩展机制,以及一个活跃的插件生态系统。这些特性使得Gradle能够适应各种类型的项目需求,并提供了一种更高级、灵活的构建自动化方案。

二、主要功能

  1. 构建自动化:Gradle可以自动执行项目构建过程,包括编译源代码、运行单元测试、生成可执行文件、打包应用程序等。它使用任务(Task)的概念来描述构建过程中的不同步骤和操作。
  2. 依赖管理:Gradle提供了强大的依赖管理功能,可以轻松管理项目所需的外部库和框架。通过配置依赖关系,Gradle可以自动下载和引入所需的依赖项,并处理依赖项之间的冲突。
  3. 多项目构建:Gradle支持多项目构建,可以在一个构建脚本中管理和构建多个相关的子项目。这使得在大型项目中管理模块化和分层结构变得更加简单。
  4. 插件生态系统:Gradle具有丰富的插件生态系统,提供了大量的插件来支持各种开发任务和技术栈,如Java、Kotlin、Android、Web开发、持续集成等。插件可以扩展Gradle的功能,使其适应不同类型的项目需求。

三、工作原理

Gradle是以Groovy语言为基础构建的DSL。构建脚本build.gradle通过Groovy DSL声明tasks、projects及其依赖关系,然后Gradle通过这些信息确定任务执行顺序,最后以正确顺序执行tasks来完成构建。

Gradle使用“约定优于配置”的理念,提供了默认的项目布局和构建配置。开发者可以遵循这些约定来减少配置,从而大大简化了构建声明。同时,Gradle也支持自定义配置,以满足特定项目的需求。

四、安装与配置

要开始使用Gradle,首先需要进行正确的安装和配置。Gradle的安装方式有多种,包括使用包管理器(如apt、yum等)、下载二进制包进行安装、以及使用SDKMAN等工具进行安装。安装完成后,需要配置GRADLE_HOME和PATH环境变量,以指向Gradle的安装目录。

此外,Gradle还提供了一个重要的工具——Gradle Wrapper。在项目中添加Gradle Wrapper后,可以直接使用wrapper执行构建,无需在本地预装Gradle。这使得不同开发者可以使用统一的Gradle版本构建项目,从而避免了不同Gradle版本带来的潜在问题。

五、构建脚本详解

Gradle的构建脚本文件为build.gradle,通常置于项目根目录下。该脚本使用Groovy DSL定义构建配置,包括应用插件、配置依赖关系、定制任务等。

  • 插件:通过plugins块应用插件,扩展Gradle的功能。比如应用Java插件后,会自动添加Java项目相关任务。
  • 依赖关系:通过dependencies块配置依赖关系。可以使用compileOnly、runtimeOnly、implementation等方法定义依赖范围。可以声明文件、项目、外部仓库依赖。
  • 任务:使用task定义自定义任务。doFirst和doLast指定执行时机,实现自定义构建逻辑。

综上所述,Gradle是一个功能强大、灵活且可扩展的构建工具。它能够帮助开发人员简化项目构建过程、提高开发效率,并支持各种类型的软件项目。




下载安装gradle

配置Gradle主要包括下载与安装、环境变量配置、本地仓库创建(可选)、阿里云镜像配置(可选)以及IDEA中Gradle项目的配置等步骤。以下是详细的配置指南:

一、下载与安装

  1. 访问Gradle官网

  2. 下载Gradle

    • 在官网页面上,选择最新版本的Gradle,或根据需要选择特定版本。
    • 下载对应的压缩包(如.zip或.tar.gz)。
  3. 解压Gradle

    • 将下载的压缩包解压到指定的目录。例如,解压到D:\gradle-x.y(x.y为版本号)。

二、环境变量配置

  1. 设置GRADLE_HOME

    • 右击“此电脑”,选择“属性”。
    • 选择“系统”、“高级系统设置”。
    • 点击“环境变量”。
    • 在“系统变量”区域,点击“新建”。
    • 变量名输入GRADLE_HOME,变量值输入Gradle解压后的目录路径(如D:\gradle-x.y)。
  2. 更新PATH变量

    • 在“系统变量”区域,找到并选择Path变量,点击“编辑”。
    • 点击“新建”,将%GRADLE_HOME%\bin添加到PATH变量中。
    • 点击“确定”保存更改。

三、验证安装

  1. 打开命令行

    • 按Win+R键,输入cmd,回车打开命令行窗口。
  2. 验证Gradle

    • 在命令行窗口中输入gradle -v,回车。
    • 如果显示Gradle的版本信息,则说明安装成功。

四、创建本地仓库(可选)

  1. 创建文件夹

    • 在Gradle解压目录下(如D:\gradle-x.y),创建一个名为repository的文件夹。
  2. 配置环境变量

    • 同样在环境变量设置中,新建一个系统变量GRADLE_USER_HOME,变量值设置为D:\gradle-x.y\repository

五、配置阿里云镜像(可选)

  1. 找到init.d目录

    • 在Gradle安装目录下的某个位置(具体路径可能因版本而异),找到init.d文件夹。
  2. 创建init.gradle文件

    • init.d文件夹中,新建一个名为init.gradle的文件。
  3. 添加阿里云镜像配置

    • init.gradle文件中,添加以下配置:
      allprojects {
          repositories {
              mavenLocal()
              maven {
                  name "Alibaba"
                  url "https://maven.aliyun.com/repository/public"
              }
              mavenCentral()
          }
          buildscript {
              repositories {
                  maven {
                      name "Alibaba"
                      url 'https://maven.aliyun.com/repository/public'
                  }
                  mavenCentral()
              }
          }
      }
      

六、IDEA中Gradle项目的配置

  1. 新建Gradle项目

    • 打开IntelliJ IDEA,选择File -> New -> Project
    • 在弹出的窗口中,选择Gradle,然后点击Next
    • 按照提示填写项目名称、位置等信息,点击Finish
  2. 配置Gradle设置

    • 在IDEA中,打开File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle
    • 在这里,可以配置Gradle的JVM选项、Gradle用户主目录(通常为之前创建的repository文件夹路径)、Gradle Wrapper等。
  3. 加载Gradle项目

    • IDEA会自动加载Gradle项目,并在右侧显示Gradle工具窗口。
    • 在Gradle工具窗口中,可以展开项目结构,找到并运行构建任务。

通过以上步骤,即可完成Gradle的下载、安装、配置以及IDEA中Gradle项目的配置。




Gradle的配置文件

Gradle的配置文件主要用于定义项目的构建规则、依赖关系、插件等。以下是Gradle配置文件的详细介绍:

一、主要配置文件

  1. settings.gradle

    • 位置:项目根目录下。
    • 作用:用于初始化以及工程树的配置,指定哪些模块(子项目)应该被包含在当前项目的构建中。
    • 示例:
    include ':app', ':lib'
    

    这表示项目包含两个模块:applib

  2. build.gradle(Project级别)

    • 位置:项目根目录下。
    • 作用:定义项目级别的构建脚本,如插件应用、仓库配置、项目依赖等。
    • 主要内容:
      • buildscript块:配置Gradle脚本自身需要的资源,如依赖项、仓库地址等。
      • allprojects块:为所有模块提供共同所需的依赖包和仓库配置。
      • repositories块:配置Gradle用于搜索或下载依赖的仓库。
      • dependencies块:配置Gradle构建项目时所需的插件。
  3. build.gradle(Module级别)

    • 位置:模块(子项目)目录下。
    • 作用:定义模块级别的构建脚本,如模块依赖、任务配置等。
    • 主要内容:与Project级别的build.gradle类似,但更侧重于模块自身的配置。

二、属性文件

  1. gradle.properties

    • 位置: GRADLE_USER_HOME用户目录下 , 项目的根目录下 , GRADLE_HOME安装目录
    • 优先级: GRADLE_USER_HOME用户目录 高于> 项目的根目录 高于> GRADLE_HOME安装目录
    • 作用:设置Gradle构建过程中的全局属性,如JVM内存大小、日志级别等。
    • 示例:
    org.gradle.jvmargs=-Xmx2048m
    org.gradle.parallel=true
    
  2. local.properties

    • 位置:Android项目根目录下(对于Android项目)。
    • 作用:为Gradle配置环境变量,如SDK、NDK路径等(特定于Android项目)。

三、Gradle Wrapper配置

  • gradle-wrapper.properties

    • 位置:gradle/wrapper/目录下。
    • 作用:配置Gradle Wrapper,以便在团队开发过程中统一Gradle构建的版本号。
    • 主要内容:distributionUrl属性,指定Gradle发行版的下载路径。

四、配置文件示例

以下是一个简单的Gradle配置文件示例,包括settings.gradle和Project级别的build.gradle

settings.gradle

include ':app', ':lib'

build.gradle(Project级别)

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

这个示例配置了一个包含applib两个模块的项目,并指定了Google的Maven仓库和JCenter仓库作为依赖项的搜索源。同时,它还应用了Android Gradle插件的指定版本。

请注意,实际的配置文件可能会根据项目的具体需求进行更多的定制和扩展。




settings.gradle和settings.gradle.kts

settings.gradlesettings.gradle.kts 都是 Gradle 构建系统中用于配置项目结构的文件,但它们之间有一些关键的区别。

settings.gradle

  • 文件格式settings.gradle 是使用 Groovy 语言编写的。Groovy 是一种基于 JVM 的动态语言,与 Java 具有很高的互操作性,并且在 Gradle 构建脚本中得到了广泛应用。
  • 功能:该文件主要用于指定哪些子项目(模块)应该被包含在当前项目的构建中。通过 include 语句,可以列出所有要包含在构建中的子项目名称。
  • 示例
include ':app', ':library'

这个示例表示项目包含两个子项目:applibrary

settings.gradle 文件是 Gradle 构建系统中的一个重要配置文件,它位于项目的根目录下,用于初始化 Gradle 构建并配置项目或子项目的结构。以下是对 settings.gradle 文件的详细解释:

作用

  1. 项目初始化:在 Gradle 构建过程中,settings.gradle 文件是最早被读取和执行的配置文件之一。它负责初始化构建环境,为后续的执行步骤奠定基础。
  2. 配置项目结构:通过 settings.gradle 文件,可以指定哪些子项目(或模块)应该被包含在当前的 Gradle 构建中。这对于多模块项目来说尤为重要,因为它允许开发者清晰地定义项目的整体结构。

主要内容

  1. include 语句:使用 include 语句可以列出所有要包含在构建中的子项目名称。Gradle 会根据这些名称在项目目录中查找对应的子项目,并将它们包含在构建过程中。例如:
include ':app', ':library'

这表示项目包含两个子项目:applibrary

  1. 项目目录配置:如果子项目位于非标准位置(即不在根项目的直接子目录中),可以通过 project 方法为它们指定自定义的目录路径。例如:
include ':customModule'
project(':customModule').projectDir = new File('path/to/customModule')

这表示将位于 path/to/customModule 目录下的 customModule 子项目包含在构建中。

  1. 初始化逻辑:由于 settings.gradle 文件在构建初始化阶段被读取和执行,因此也可以在其中放置一些需要在初始化阶段执行的逻辑代码。例如,打印日志信息、设置全局变量等。

注意事项

  1. 文件名settings.gradle 是默认的文件名,如果需要使用其他名称,可以在执行 Gradle 命令时通过 -c--settings-file 参数来指定。
  2. 多模块项目:对于多模块项目来说,settings.gradle 文件是组织和管理项目结构的关键。确保所有需要构建的模块都被正确地包含在内。
  3. 兼容性:不同版本的 Gradle 可能会对 settings.gradle 文件的语法和功能有所支持上的差异。因此,在编写和修改 settings.gradle 文件时,应参考对应版本的 Gradle 文档以确保兼容性。

综上所述,settings.gradle 文件是 Gradle 构建系统中用于初始化和配置项目结构的重要文件。通过合理地编写和配置该文件,可以确保项目的构建过程顺利且高效地进行。



settings.gradle.kts

  • 文件格式settings.gradle.kts 是使用 Kotlin 语言编写的。Kotlin 是一种在 JVM 上运行的静态类型语言,由 JetBrains 开发,旨在成为 Java 的替代语言。Gradle 从 5.0 版本开始引入了 Kotlin DSL(领域特定语言),允许开发者使用 Kotlin 编写构建脚本。
  • 功能:与 settings.gradle 类似,settings.gradle.kts 也用于配置项目结构,指定要包含在构建中的子项目。但由于使用了 Kotlin 语言,它提供了更好的编译时检查、IDE 支持和更高的代码可读性。
  • 语法差异:由于 Groovy 和 Kotlin 在语法上存在差异,因此 settings.gradlesettings.gradle.kts 在编写时也会有所不同。例如,在 Kotlin DSL 中,字符串必须使用双引号,方法调用需要括号,且赋值运算符是显式的。
  • 迁移:对于已经使用 Groovy 编写的 settings.gradle 文件,可以将其重命名为 settings.gradle.kts 并进行相应的语法调整,以迁移到 Kotlin DSL。Gradle 提供了平滑迁移的指南和工具,帮助开发者完成这一过程。
  • 示例
include(":app", ":library")

这个示例与 Groovy 版本的 settings.gradle 文件具有相同的功能,但使用了 Kotlin 的语法。

settings.gradle.kts 是 Gradle 构建系统中用于配置项目结构的 Kotlin 脚本文件。从 Gradle 5.0 版本开始,Gradle 引入了 Kotlin DSL(领域特定语言),允许开发者使用 Kotlin 语言来编写构建脚本,包括项目的根设置文件 settings.gradle.kts

主要功能

  1. 项目初始化settings.gradle.kts 文件是 Gradle 构建过程中最早被读取和执行的配置文件之一。它负责初始化构建环境,为后续的执行步骤奠定基础。

  2. 子项目包含:通过 include 函数,可以指定哪些子项目(模块)应该被包含在当前的 Gradle 构建中。这对于多模块项目来说尤为重要,因为它允许开发者清晰地定义项目的整体结构。

    示例:

    include(":app", ":library")
    

    这表示项目包含两个子项目:applibrary

  3. 项目目录配置:如果子项目位于非标准位置(即不在根项目的直接子目录中),可以通过 project 函数为它们指定自定义的目录路径。

    示例:

    include(":customModule")
    project(":customModule").projectDir = file("path/to/customModule")
    
  4. 插件和依赖管理:虽然 settings.gradle.kts 主要用于配置项目结构,但在某些情况下,它也可以用于应用插件或声明依赖项,特别是那些需要在项目级别而不是模块级别应用的插件或依赖项。然而,通常这些操作会在 Project 级别的 build.gradle.kts 文件中进行。

  5. Gradle 属性settings.gradle.kts 文件还可以用于定义或访问 Gradle 属性,这些属性可以在整个构建过程中使用。

优点

  • 更好的类型安全性:Kotlin 是一种静态类型语言,与 Groovy 相比,它提供了更好的类型安全性和编译时检查。
  • 更好的 IDE 支持:由于 Kotlin 在 IntelliJ IDEA 和其他 JetBrains IDE 中得到了原生支持,因此使用 Kotlin DSL 编写的 settings.gradle.kts 文件在这些 IDE 中通常具有更好的代码导航、重构和自动完成功能。
  • 代码可读性:Kotlin 的语法更加简洁和一致,使得 settings.gradle.kts 文件通常比 settings.gradle 文件更易读和易维护。

迁移

对于已经使用 Groovy 编写的 settings.gradle 文件,Gradle 提供了平滑迁移的指南和工具,帮助开发者将其迁移到 Kotlin DSL,即 settings.gradle.kts 文件。迁移过程通常包括重命名文件、调整语法以及可能的 API 更改。

总之,settings.gradle.kts 是 Gradle 构建系统中用于配置项目结构的 Kotlin 脚本文件,它提供了更好的类型安全性、IDE 支持和代码可读性,是构建多模块项目时的推荐选择。




“build.gradle”和“build.gradle.kts”

“build.gradle”和“build.gradle.kts”都是Gradle构建系统中用于定义和配置项目构建脚本的文件,但它们在使用的编程语言和语法上有所不同。

build.gradle

  • 使用的编程语言build.gradle文件是使用Groovy语言编写的。Groovy是一种基于JVM(Java虚拟机)的动态语言,它提供了灵活的语法和动态类型,非常适合用于编写构建脚本。
  • 功能和作用build.gradle文件用于定义项目的构建逻辑、依赖关系、编译选项以及其他构建相关的设置。它是Gradle构建系统的核心配置文件之一,对于项目的构建过程至关重要。
  • 常见配置:在build.gradle文件中,可以配置项目的名称、版本号、仓库地址、依赖项、构建任务等。这些配置信息将指导Gradle如何构建、打包和发布项目。

build.gradle 是 Gradle 构建系统中用于定义和配置项目构建脚本的核心文件。这个文件通常位于项目的根目录或子模块目录中,并包含有关项目如何构建、打包和发布的信息。build.gradle 文件使用 Groovy 语言编写,Groovy 是一种基于 JVM(Java 虚拟机)的动态语言,它提供了灵活的语法和动态类型,非常适合用于编写构建脚本。

build.gradle 文件中,你可以配置以下内容:

  1. 项目的基本信息:如项目的名称、版本号、组名等。这些信息通常用于生成项目的元数据,并在构建过程中进行引用。

  2. 仓库地址:指定 Gradle 在哪里查找项目所需的依赖项。常见的仓库包括 Maven 中央仓库、JCenter 仓库以及私有仓库等。

  3. 依赖项:声明项目所需的外部库和框架。Gradle 会根据这些声明自动下载并包含这些依赖项。

  4. 构建任务:定义自定义的构建任务,这些任务可以执行特定的构建逻辑,如编译代码、打包应用、运行测试等。

  5. 插件:应用 Gradle 插件以扩展 Gradle 的功能。插件可以提供额外的构建任务、依赖项管理、代码质量检查等功能。

  6. 构建类型和产品风格:配置不同的构建类型(如 debug 和 release)和产品风格(如不同语言或地区的版本),以满足不同的构建需求。

  7. 签名和版本控制:为构建的输出(如 APK 或 JAR 文件)添加签名,并配置版本控制策略。

  8. 其他构建逻辑:根据项目的具体需求,添加其他自定义的构建逻辑和配置。

build.gradle 文件是 Gradle 构建系统的核心组成部分,它允许你以声明性的方式定义项目的构建逻辑和配置。通过编辑这个文件,你可以完全控制项目的构建过程,并确保项目在不同环境中的一致性和可重复性。

随着 Gradle 的不断发展,Kotlin DSL(领域特定语言)逐渐成为了一种更受欢迎的选择,它允许开发者使用 Kotlin 语言编写构建脚本,并提供了更好的类型安全性、编译时检查和 IDE 支持。对于新项目,推荐使用 build.gradle.kts 文件而不是 build.gradle 文件,但现有的 build.gradle 文件仍然可以继续使用,并且 Gradle 提供了平滑迁移的指南和工具。

build.gradle 设置java System.properties 属性的 file.encodingutf-8

tasks.withType(JavaExec) {	systemProperty("file.encoding", "utf-8")  }
tasks.withType(JavaCompile) {  options.encoding = "UTF-8"  }
tasks.withType(JavaExec) {	systemProperty("file.encoding", "utf-8")  }



build.gradle.kts

  • 使用的编程语言build.gradle.kts文件是使用Kotlin语言编写的。Kotlin是一种在JVM上运行的静态类型语言,由JetBrains开发,旨在提供比Java更简洁、更安全的语法。从Gradle 4.6版本开始,Gradle引入了Kotlin DSL(领域特定语言)功能,允许开发者使用Kotlin编写构建脚本。
  • 功能和作用:与build.gradle文件类似,build.gradle.kts文件也用于定义项目的构建逻辑、依赖关系和其他构建相关的设置。但由于使用了Kotlin语言,它提供了更好的类型安全性、编译时检查和IDE支持。
  • 语法差异:由于Groovy和Kotlin在语法上存在差异,因此build.gradlebuild.gradle.kts在编写时也会有所不同。例如,在Kotlin DSL中,字符串必须使用双引号,方法调用需要括号,且赋值运算符是显式的。这些语法差异使得build.gradle.kts文件通常具有更好的可读性和可维护性。
  • 优势:使用Kotlin DSL编写的build.gradle.kts文件具有多个优势,包括更好的类型安全性、编译时检查、IDE支持和更高的代码可读性。这些优势使得build.gradle.kts文件在新项目中更受欢迎,并逐渐成为Gradle构建系统的主流配置文件格式之一。

build.gradle.kts 是 Gradle 构建系统中使用 Kotlin 语言编写的构建脚本文件。从 Gradle 4.6 版本开始,Gradle 引入了 Kotlin DSL(领域特定语言)功能,允许开发者使用 Kotlin 语言来编写构建脚本,从而提供了更好的类型安全性、编译时检查和 IDE 支持。

以下是关于 build.gradle.kts 的详细解释:

一、文件位置与命名

  • build.gradle.kts 文件通常位于项目的根目录或子模块目录中。
  • 文件名固定为 build.gradle.kts,以区别于使用 Groovy 语言编写的 build.gradle 文件。

二、语言与语法

  • build.gradle.kts 使用 Kotlin 语言编写,这是一种静态类型语言,提供了比 Groovy 更严格的语法和类型检查。
  • Kotlin DSL 提供了与 Gradle API 对应的 Kotlin 类型和方法,使得构建脚本更加易于理解和维护。

三、配置内容

build.gradle 文件类似,build.gradle.kts 文件也用于定义项目的构建逻辑和配置。具体配置内容包括:

  1. 项目信息:如项目的名称、版本号、组名等。
  2. 仓库配置:指定 Gradle 查找依赖项的仓库地址。
  3. 依赖项声明:声明项目所需的外部库和框架。
  4. 构建任务:定义自定义的构建任务。
  5. 插件应用:应用 Gradle 插件以扩展 Gradle 的功能。
  6. 构建类型与产品风格:配置不同的构建类型和产品风格。
  7. 签名与版本控制:为构建的输出添加签名,并配置版本控制策略。

四、优势与特点

  1. 类型安全性:Kotlin 是一种静态类型语言,提供了类型推断和类型检查功能,减少了构建脚本中的类型错误。
  2. 编译时检查:Kotlin 编译器在编译时会对脚本进行语法和类型检查,提高了构建脚本的可靠性和稳定性。
  3. IDE 支持:Kotlin DSL 在 IntelliJ IDEA 和其他 JetBrains IDE 中得到了原生支持,提供了更好的代码导航、重构和自动完成功能。
  4. 简洁性:Kotlin 语法更加简洁和易于理解,使得构建脚本更加清晰和易读。

五、迁移与兼容性

  • 对于已经使用 Groovy 编写的 build.gradle 文件,可以逐步迁移到 Kotlin DSL,以享受 Kotlin DSL 提供的优势。
  • Gradle 提供了平滑迁移的指南和工具,帮助开发者将现有的 build.gradle 文件转换为 build.gradle.kts 文件。
  • 迁移过程中可能需要进行语法调整、API 更改等,但 Gradle 提供了详细的迁移文档和示例,以帮助开发者顺利完成迁移。

综上所述,build.gradle.kts 是 Gradle 构建系统中使用 Kotlin 语言编写的构建脚本文件,它提供了更好的类型安全性、编译时检查和 IDE 支持,是现代 Gradle 项目中推荐使用的构建脚本文件格式。

build.gradle.kts 设置java System.properties 属性的 file.encodingutf-8

tasks.withType<JavaExec> {	systemProperty("file.encoding", "utf-8")  }
tasks.withType<JavaCompile> {	options.encoding = "UTF-8"  }
tasks.withType<JavaExec> {	systemProperty("file.encoding", "utf-8")  }




gradle.properties

gradle.properties 是Gradle构建系统中的一个配置文件,它允许开发者将构建配置与代码分离,从而使得构建过程更加灵活和可配置。以下是对gradle.properties文件的详细解析:

一、文件位置

gradle.properties文件可放在: GRADLE_USER_HOME用户目录下 , 项目的根目录下 , GRADLE_HOME安装目录

  • 在Gradle的用户目录 GRADLE_USER_HOME(Windows和Linux通常是: 用户目录/.gradle)文件初始可能不存在, 可以自己创建一个名为gradle.properties的文件。
  • 项目的根目录下, 文件初始可能不存在, 可以自己创建一个名为gradle.properties的文件。
  • GRADLE_HOME安装目录下, 文件初始可能不存在, 可以自己创建一个名为gradle.properties的文件。

优先级: GRADLE_USER_HOME用户目录 高于> 项目的根目录 高于> GRADLE_HOME安装目录

二、作用与功能

  1. 定义项目版本号:可以在gradle.properties文件中定义项目的版本号,如version=1.0.0,然后在构建脚本中引用该版本号。
  2. 配置JVM参数:通过gradle.properties文件,可以调整Gradle守护进程的JVM参数,比如堆内存大小(org.gradle.jvmargs)。这对于优化构建性能和内存使用非常有用。例如,可以配置为-Xmx2048m -XX:MaxPermSize=512m来限制最大堆内存和永久代大小。
  3. 定义全局属性:在gradle.properties文件中定义的全局属性可以在整个项目中的所有Gradle脚本中使用。这有助于保持配置的一致性和可维护性。例如,可以定义一些常量或路径,以便在多个模块中共享。
  4. 配置构建缓存:可以启用或禁用构建缓存,以及配置缓存的位置和其他相关设置。构建缓存可以显著提高构建效率,因为它允许Gradle重用之前构建的结果。
  5. 设置代理:如果开发环境需要通过代理服务器访问互联网,可以在gradle.properties文件中设置代理信息,以便Gradle能够正确地进行网络通信。
  6. 环境变量:虽然gradle.properties文件主要用于Gradle配置,但也可以在其中设置一些环境变量,以便在构建过程中使用。
  7. 控制构建行为:通过配置相关属性,可以控制Gradle的构建行为,例如是否启用并行执行、是否打印调试信息等。例如,可以配置org.gradle.parallel=true来启用并行构建,或者配置org.gradle.logging.level=info来设置日志级别为info。

三、基本配置示例

以下是一个gradle.properties文件的基本配置示例:

# 定义项目版本号
version=1.0.0

# 定义JVM参数
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# 定义项目特定的配置
projectName=MyAwesomeProject

# 启用构建缓存
org.gradle.caching=true

# 启用并行执行任务
org.gradle.parallel=true

# 设置日志级别为info
org.gradle.logging.level=info

四、属性值的优先级

  1. 如果全局和局部(如模块级别的gradle.properties文件)属性文件中存在相同属性名,局部属性将覆盖全局属性。
  2. 除了项目根目录下的gradle.properties文件外,还可以在Gradle命令行中直接指定属性值,这些命令行指定的属性将覆盖所有项目和全局配置文件中的属性。

五、使用环境特定的配置文件

Gradle允许根据不同的环境(如开发、测试和生产)定义不同的配置文件。例如,可以创建gradle-dev.properties、gradle-test.properties和gradle-prod.properties等文件,并在gradle.properties中指定环境特定的配置文件:

# gradle.properties
systemProp.file=gradle-${env}.properties

然后在gradle-dev.properties中定义开发环境的配置:

# gradle-dev.properties
version=1.0.0-SNAPSHOT

在构建时,可以通过-Denv=dev参数来指定使用开发环境的配置。

综上所述,gradle.properties文件是Gradle构建系统中非常重要的一个配置文件,它提供了灵活的配置方式,使得开发者可以根据不同的环境和需求来调整构建过程。




local.properties

local.properties文件在Android开发中扮演着重要的角色,以下是关于local.properties文件的详细解释:

一、文件位置与用途

  • 位置:在Android Studio中创建一个Android工程后,工程的根目录中会自动生成一个名为local.properties的文件。
  • 用途:该文件通常用于存放Android工程私有的属性配置,如Android SDK的路径、NDK的路径等,这些配置信息通常不会在版本控制中共享,因为它们是针对特定开发环境的。此外,也可以将一些项目的私有配置属性,如应用的包名、应用名称等,存储到该文件中。

二、文件内容格式

local.properties文件是一个简单的键值对文件,其格式类似于Windows的INI文件或Java的properties文件。每一行都是一个键值对,键和值之间用等号(=)分隔。例如:

sdk.dir=/Users/your_username/Library/Android/sdk
ndk.dir=/Users/your_username/Library/Android/ndk
packagename=com.example.yourapp

三、文件读取与使用

在Android Studio的Gradle构建脚本中,可以通过读取local.properties文件来获取其中的配置信息。以下是一个读取local.properties文件的示例代码:

def readLocalProperties() {
    File file = rootProject.file('local.properties')
    if (file.exists()) {
        InputStream inputStream = file.newDataInputStream()
        Properties properties = new Properties()
        properties.load(inputStream)
        // 可以根据需要获取具体的属性值
        if (properties.containsKey("sdk.dir")) {
            println properties.getProperty("sdk.dir")
        }
        // ... 其他属性的获取
    }
}

在项目的build.gradle文件中,可以调用上述函数来解析local.properties文件,并根据解析出的配置信息来配置项目的构建过程。例如,可以根据packagename属性来设置应用的包名:

def parseLocalProperties() {
    File file = rootProject.file('local.properties')
    if (file.exists()) {
        InputStream inputStream = file.newDataInputStream()
        Properties properties = new Properties()
        properties.load(inputStream)
        if (properties.containsKey("packagename")) {
            ext.packagename = properties.getProperty("packagename")
        }
    }
}

allprojects {
    repositories {
        jcenter()
    }
    parseLocalProperties()
}

android {
    // ... 其他配置
    defaultConfig {
        // ... 其他配置
        if (project.hasProperty('packagename')) {
            applicationId project['packagename']
        } else {
            applicationId "com.default.package"
        }
    }
    // ... 其他配置
}

四、注意事项

  • 不要将local.properties文件提交到版本控制系统中:由于local.properties文件包含本地环境的特定配置信息,因此不应该将其提交到版本控制系统中。这通常通过在版本控制系统中添加忽略文件(如.gitignore.hgignore)来实现。
  • 避免手动修改local.properties文件:在Android Studio中,通常不建议手动修改local.properties文件,因为该文件可能会被Android Studio自动更新。如果需要修改其中的配置信息,最好通过Android Studio的图形界面或Gradle构建脚本来实现。

综上所述,local.properties文件在Android开发中是一个非常重要的配置文件,它用于存储本地环境的特定配置信息,并可以在Gradle构建脚本中被读取和使用。通过合理使用local.properties文件,可以方便地管理和配置Android项目的构建过程。




gradle-wrapper.properties

gradle-wrapper.properties文件是Gradle Wrapper的配置文件,它在Android开发以及使用Gradle作为构建工具的项目中扮演着重要角色。以下是对gradle-wrapper.properties文件的详细解释:

一、文件位置与用途

  • 位置gradle-wrapper.properties文件通常位于项目根目录下的/gradle/wrapper/目录中,并且是一个隐藏文件。
  • 用途:该文件用于为Gradle Wrapper提供必要的配置信息,以便Gradle Wrapper能够自动下载、安装和配置Gradle运行环境。通过修改此文件,可以控制Gradle的版本、下载源、存储路径等参数,从而定制化Gradle构建过程和环境。

二、文件内容详解

gradle-wrapper.properties文件包含多个配置项,每个配置项都对应一个特定的功能。以下是一些常见的配置项及其解释:

  1. distributionUrl:指定了Gradle发布版本的下载地址。Gradle Wrapper将从该地址自动下载指定版本的Gradle。例如:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
  1. distributionSha256Sum:指定了distributionUrl对应Gradle版本的SHA-256校验和。这是用于校验下载的Gradle是否完整且未被篡改的安全措施。
  2. zipStoreBasezipStorePath:这两个配置项共同指定了Gradle Zip包的存储路径。在第一次运行Gradle Wrapper时,Gradle将会从distributionUrl下载Gradle Zip包,并解压到这个路径下。
  3. distributionType:指定了Gradle的分发类型。可选值有binall(默认值)。bin类型只包含Gradle的可执行文件和必要的库,而all类型则包含完整的Gradle发行版,包括源代码和文档等。

三、使用Gradle Wrapper的好处

  1. 确保构建环境的一致性:使用Gradle Wrapper可以确保项目在任何环境下都能够使用相同版本的Gradle进行构建,从而避免由于Gradle版本不一致而导致的构建问题。
  2. 简化Gradle的安装和配置:Gradle Wrapper允许开发者在不安装Gradle的情况下运行和构建项目。这对于那些没有安装Gradle或希望使用特定版本Gradle的开发者来说非常方便。
  3. 提高构建效率和可靠性:通过Gradle Wrapper,可以自动下载和配置Gradle,从而节省了手动安装和配置Gradle的时间。同时,由于Gradle Wrapper能够确保使用正确版本的Gradle,因此也可以提高构建的可靠性。

四、注意事项

  1. 避免直接修改gradle-wrapper.properties文件:为了避免误操作,建议不要直接修改该文件。相反,应该通过Android Studio提供的Gradle配置界面来修改Gradle Wrapper的设置。
  2. 定期更新Gradle版本:随着Gradle的不断更新和完善,建议定期检查并更新gradle-wrapper.properties中的distributionUrl,选择最新的Gradle版本以获得更好的性能和功能。
  3. 配置国内下载源:由于国内网络环境的原因,有时直接从Gradle官方下载源下载Gradle可能会遇到网络问题。此时,可以考虑配置国内下载源或使用离线安装包来加快下载速度。

综上所述,gradle-wrapper.properties文件是Gradle Wrapper的重要配置文件,它对于确保项目构建环境的一致性、简化Gradle的安装和配置以及提高构建效率和可靠性都起着重要作用。因此,在使用Gradle作为构建工具的项目中,应该充分利用Gradle Wrapper及其配置文件来优化构建过程。




Win11GBK, idea2024.2.4, 使用Gradle8.8本地安装构建,不使用包装器, 解决utf-8乱码问题, 笔记241028

在这里插入图片描述

解决办法: 在 gradle.properties 配置文件中, 设置jvm启动项参数, 字符编码设为gbk, -Dfile.encoding=gbk 与操作系统保持一致;

 -Dfile.encoding=gbk

如:

org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=gbk

没错, 虽然java文件是utf-8编码, 必须设置为 -Dfile.encoding=操作系统的编码

如果操作系统编码是utf-8就设为utf-8,或者不用设置, Windows11设置系统编码为 utf-8 的方法是: 控制面板👉区域👉管理 👉 更改系统区域设置 👉 勾选"使用Unicode UTF-8...." 在这里插入图片描述




idea设置gradle, 包装器, 包装器任务, 本地安装 的区别

在IntelliJ IDEA(简称IDEA)中设置Gradle时,会涉及到Gradle包装器(Wrapper)、包装器任务(Wrapper Task)、以及本地安装Gradle等多个概念。以下是这些概念的区别和详细解释:

一、Gradle包装器(Wrapper)

  1. 定义:Gradle包装器是Gradle的一个核心特性,它允许机器在没有安装Gradle的情况下进行Gradle构建。通过自动从中心仓库下载Gradle运行时并解压使用,它能够实现独立于系统、系统配置和Gradle版本的可靠和可重复的构建。

  2. 优势

    • 版本一致性:确保所有开发者使用相同的Gradle版本。
    • 便捷性:无需在每个开发环境中手动安装Gradle。
    • 可移植性:项目可以轻松地在不同环境之间迁移。
  3. 配置:在项目的根目录下,通过执行gradle wrapper任务,可以生成Gradle包装器所需的文件(如gradlewgradlew.bat脚本,以及gradle/wrapper/gradle-wrapper.properties配置文件)。

二、包装器任务(Wrapper Task)

  1. 定义:包装器任务是指用于生成或配置Gradle包装器的Gradle任务。
  2. 功能:通过执行包装器任务(如gradle wrapper),可以自动生成Gradle包装器所需的文件,并指定要使用的Gradle版本。
  3. 使用场景:当需要在项目中引入Gradle包装器时,或者需要更改当前使用的Gradle版本时,可以使用包装器任务。

三、本地安装Gradle

  1. 定义:本地安装Gradle是指将Gradle安装包下载到本地计算机上,并通过配置环境变量等方式,使系统能够识别并使用Gradle。

  2. 优势

    • 灵活性:可以自由选择安装的Gradle版本。
    • 性能:对于频繁使用Gradle的开发者来说,本地安装可以减少网络延迟,提高构建速度。
  3. 配置

    • 下载Gradle安装包(如zip格式),并解压到本地目录。
    • 配置环境变量(如GRADLE_HOMEPATH),使系统能够识别Gradle的可执行文件。
    • 在IDEA中,可以通过“File”->“Settings”->“Build, Execution, Deployment”->“Build Tools”->“Gradle”来配置本地Gradle的安装路径。

四、区别总结

  1. Gradle包装器:是一种自动下载和使用指定版本Gradle的机制,适用于需要确保版本一致性和可移植性的场景。
  2. 包装器任务:是用于生成或配置Gradle包装器的Gradle任务,是设置Gradle包装器的重要手段。
  3. 本地安装Gradle:是在本地计算机上手动安装Gradle的方式,适用于需要灵活选择Gradle版本和提高构建速度的场景。

在IDEA中,可以根据项目的需求选择合适的Gradle配置方式。对于需要确保版本一致性和可移植性的项目,建议使用Gradle包装器;对于需要灵活选择Gradle版本或提高构建速度的项目,可以选择本地安装Gradle。同时,IDEA也提供了丰富的Gradle配置选项,方便开发者根据需要进行设置和调整。