1.Gradle入门与基本配置

一、Gradle概述

Gradle简介

在Android开发的世界里,Gradle是构建和自动化项目生命周期的核心工具。它不仅简化了项目的配置、依赖管理及构建过程,而且极大地提高了开发效率与协作体验。Gradle是一个开源的构建自动化系统,基于Groovy或Kotlin DSL(领域特定语言),并采用灵活的插件化架构设计。对于Android开发而言,Google为其定制了一套专门的Android Gradle插件,就是我们常听说的AGP,使得我们可以方便地进行模块化开发、多版本构建、资源混淆等一系列操作。

为什么选择Gradle?

  • 声明式构建模型:Gradle采用声明式的构建脚本,开发者只需描述项目的结构和依赖关系,Gradle会自动处理构建细节。
  • 插件化架构:丰富的官方和第三方插件库支持各种语言和框架(如Java、Kotlin、Android等),极大地简化了复杂项目的构建流程。
  • 智能依赖管理:Gradle内置高级依赖解析机制,可以有效解决版本冲突问题,并利用缓存加速依赖下载。
  • 高性能并发执行:Gradle通过多任务并行执行优化构建速度,尤其适合大型或模块化的项目。

二、Gradle环境搭建

2.1 安装Gradle

访问Gradle官方网站获取最新稳定版的安装包。通常有两种安装方式:

  • 全局安装:直接下载并解压到指定目录,然后配置系统环境变量GRADLE_HOME指向解压后的目录路径,并将bin目录添加至PATH环境变量。

  • 使用Gradle Wrapper:在项目中生成Wrapper文件,这样每个项目都拥有独立且特定版本的Gradle环境。在项目根目录下运行命令 gradle wrapper --gradle-version <版本号> 来生成wrapper相关文件,之后可通过运行 ./gradlew (Unix-like系统) 或 gradlew.bat (Windows系统) 执行构建任务。

    在安卓开发中,通常我们不需要关心下载和配置Gradle。Android Studio新建项目时会自动通过使用Gradle Wrapper处理Gradle的下载和配置。

2.2 验证安装

成功安装后,在终端或命令行窗口中输入 gradle -v./gradlew -v(如果使用Wrapper)来查看Gradle版本及相关信息。

2.3 Gradle Wrapper

Gradle Wrapper 是一个用于自动化管理 Gradle 版本的工具,它可以帮助开发人员避免手动下载和配置 Gradle 的繁琐过程。通过使用 Gradle Wrapper,开发人员可以轻松地在项目中使用特定版本的 Gradle,并确保团队中所有成员使用相同版本的构建工具。

Gradle Wrapper 的工作原理是利用在项目的根目录下的一些文件,包括一个可执行的脚本文件(例如 gradlew)和一个配置文件(例如 gradle-wrapper.properties)。通过运行脚本文件(例如在命令行中输入 ./gradlew),Gradle Wrapper 会自动检查所需的 Gradle 版本,并在必要时从配置的源下载该版本。下载完成后,Gradle Wrapper 会自动配置环境变量,以便在项目中使用该版本的 Gradle。

Gradle Wrapper 的优点包括:

  1. 自动化管理:Gradle Wrapper 自动处理 Gradle 的下载和配置,开发人员无需手动干预。
  2. 版本控制:通过使用 Gradle Wrapper,开发人员可以轻松地指定项目所需的 Gradle 版本,并确保团队中所有成员使用相同版本。
  3. 简化构建脚本:由于 Gradle Wrapper 自动处理 Gradle 的版本,开发人员无需在构建脚本中指定特定版本的 Gradle。
  4. 避免潜在的版本冲突:使用 Gradle Wrapper 可以避免因不同项目使用不同版本的 Gradle 而导致的潜在冲突。

要使用 Gradle Wrapper,开发人员需要在项目的根目录下执行一些命令来生成所需的文件。然后,开发人员可以在项目中使用特定的 Gradle 版本,并利用 Gradle Wrapper 的优点来简化构建过程。

**三、**搭建第一个Gradle Android项目

**3.1 **创建项目

  • 在新建项目时,Android Studio会自动应用Gradle构建系统。填入项目名称、包名等信息后,IDE将生成包含build.gradle(全局脚本)及各模块下的build.gradle文件的基本项目结构。

    weiwei@weiweideMacBook-Pro Test1 % tree -I 'src'
    .
    ├── app
    │   ├── build.gradle
    │   ├── libs
    │   └── proguard-rules.pro
    ├── build.gradle
    ├── gradle
    │   └── wrapper
    │       ├── gradle-wrapper.jar
    │       └── gradle-wrapper.properties
    ├── gradle.properties
    ├── gradlew
    ├── gradlew.bat
    ├── local.properties
    └── settings.gradle
    
    

可以看到项目根目录存在一个build.gradle和一个setting.gradle,app模块下有一个build.gradle。

下面结合注释了解一下这几个文件

**3.2 **解析项目中的.gradle文件

1.setting.gradle

//setting.gradle
include ':app' //app模块将参与构建
rootProject.name = "My Application"//根项目名称,通常跟项目根目录文件夹一样的名字,也可以修改

可以看到仅有两行代码,此时我们新建一个module

include ':app'
rootProject.name = "My Application"
include ':mylibrary'//mylibrary模块将参与构建

可以看到sync之后自动增加了一行

settings.gradle(.kts)`文件作用如下

  • 确定哪些项目将参与构建。

  • 初始化各个项目实例,并为每个项目创建一个对应的 Project 对象。

    根目录下的build.gradle文件定义了项目的全局属性,如构建脚本版本、子模块等。

AS目前新建项目的setting.gradle有些变化,在下边讲解新版本build.gradle的变化时一起讲解

2.项目根目录下的 build.gradle

// 项目根目录下的 build.gradle 文件片段
buildscript { //指定了构建脚本所需的插件和其所在仓库
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.0' // Android Gradle插件版本
    }
}

//应用于项目及其所有子项目所依赖的库
allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

可以看到项目根目录下的 build.gradle指定了gradle插件和其所在仓库以及应用于项目及其所有子项目所依赖的库

2.模块级别的 build.gradle

// 这是用于构建Android应用程序(APK)的插件,提供了编译、打包和发布应用所需的全部功能。
apply plugin: 'com.android.application'
//AGPandroid扩展
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
//Gradle的依赖管理机制允许我们方便地声明项目所需的库,它能够处理传递依赖、冲突解决以及从Maven仓库获取依赖。
//(后面会对这点会再做详细介绍)
dependencies {
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
}

模块级别的build.gradle文件则用于配置具体的模块构建规则,包括编译SDK版本、依赖库、构建类型等等。

目前AS 新建项目根目录build.gradle和setting.gradle跟老项目有一点变化,如下:

build.gradle

//通用配置,指定所有模块使用该插件的版本 ('apply false' 不参与当前脚本构建)
plugins {
    id 'com.android.application' version '7.2.0' apply false
    id 'com.android.library' version '7.2.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Setting.gradle

//gradle插件仓库
pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
//项目及其子项目的依赖仓库
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "Test1"
include ':app'
include ':mylibrary'

可以看到相比旧版把gradle插件仓库和项目依赖仓库放到了setting.gradle,同时在根目录build.gradle指定了使用插件的版本。变化不大,不影响使用。

以上介绍了gradle的相关概念和由gradle构建的的项目的项目结构,并且简单介绍了各脚本文件的作用。可以看到gradle文件采用一种特殊的DSL,是由groovy这种语音来构建的。下一篇我们介绍一下groovy的基础语法和DSL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值