锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. Gradle入门与基本配置

Gradle入门与基本配置

0
  • 软件开发
  • 发布于 2024-08-05
  • 0 次阅读
黄健
黄健

原文链接:https://blog.csdn.net/qq_36017595/article/details/136045754

一、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 的优点包括:

自动化管理:Gradle Wrapper 自动处理 Gradle 的下载和配置,开发人员无需手动干预。

版本控制:通过使用 Gradle Wrapper,开发人员可以轻松地指定项目所需的 Gradle 版本,并确保团队中所有成员使用相同版本。

简化构建脚本:由于 Gradle Wrapper 自动处理 Gradle 的版本,开发人员无需在构建脚本中指定特定版本的 Gradle。

避免潜在的版本冲突:使用 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。

标签: #JAVA 991
相关文章

万字:支付“核心系统”详解 2024-11-02 15:33

专栏作者:隐墨星辰 \| 主编:陈天宇宙 这篇文章也尝试化繁为简,探寻支付系统的本质,讲清楚在线支付系统最核心的一些概念和设计理念。 虽然支付行业已经过了风头最劲的时光,但跨境支付仍然在蓬勃发展,每年依然有很多新人进入这个行业,这篇文章尝试为这些刚入行的新人提供一点帮助。 文章只介绍一些支付行业十几

资深支付架构师视角:实战从问题定义到代码落地的完整套路 2024-11-02 15:33

前言 今天从一个实际案例入手,介绍站在架构师的角度,如何识别并定义问题,提炼需求,技术方案选型,再到详细设计,最后利用AI的能力协助写出核心的代码,验证与调优。 解决问题存在一定的模式,也可以称之为框架,总结出自己的思考和解题框架,以后再碰到同类型的问题就可以如庖丁解牛一样容易。 很多年前,我写代码

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

设计模式第16讲——迭代器模式(Iterator) 2024-10-08 11:24

一、什么是迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。 二、角色组成 抽象迭代器(Iterator):定义了遍历聚合对象所需的方法

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.