当前位置: 首页 > news >正文

Android 理清 Gradle、AGP、Groovy 和构建文件之间的关系

在 Android 开发中,我们常常会接触到一系列看似相近却各有分工的名词,比如:GradleGroovyAGPgradle-wrapper.propertiesbuild.gradlesettings.gradle 等等。
它们彼此之间到底是什么关系?各自又承担了什么角色?本文将用清晰的结构,一次性帮你理清!


一、Gradle 是什么?

Gradle 是一种现代化的构建工具,它负责自动化完成软件项目的编译、打包、依赖管理、测试执行等任务。

和早期的 Maven 相比,Gradle 拥有更高的灵活性和更快的构建速度,而且支持使用不同语言(如 Groovy、Kotlin)来编写构建脚本。

简而言之:

有了 Gradle,我们不需要自己写一堆 shell 脚本或者手动管理复杂的构建逻辑。


二、Groovy 是什么?

Groovy 是一种运行在 JVM 上的动态脚本语言。
它与 Java 兼容性极好,语法更为简洁灵活。

Gradle 的默认配置脚本(如 build.gradlesettings.gradle)早期都是用 Groovy 编写的,因此如果你看到很多 build.gradle 文件里有像 apply plugin:dependencies {} 这样的语法,那其实就是 Groovy 代码。

后来 Gradle 也支持了 Kotlin DSL(.gradle.kts 后缀),但很多项目依然以 Groovy 为主流。


三、AGP(Android Gradle Plugin)是什么?

单靠 Gradle,还无法直接理解如何去构建一个 Android 项目。这时,需要 Google 提供的构建扩展 —— Android Gradle Plugin(AGP)

AGP 让 Gradle 能够理解:

  • 什么是 Android 应用、Library
  • 如何处理 AndroidManifest
  • 如何执行编译、签名、打包 APK 等 Android 特有的任务

比如在 build.gradle 中看到的:

plugins {id 'com.android.application' version '8.2.0' apply false
}

这就是在引入 AGP 插件。

注意

  • AGP 也有自己的版本号,比如 8.2.0
  • AGP 和 Gradle 版本之间存在兼容关系,升级时需要参考官方对应表。

四、gradle-wrapper.properties 是干什么的?

Gradle 官方强烈推荐每个项目使用 Gradle Wrapper(包装器)。

Gradle Wrapper 的作用

  • 保证团队成员或 CI 系统使用 相同版本 的 Gradle,而不是各自本地安装的版本。
  • 通过一个小脚本自动下载、安装指定版本的 Gradle。

配置文件路径通常是:

gradle/wrapper/gradle-wrapper.properties

内容示例:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip

这里指定了下载哪个版本的 Gradle。

这样一来,别人 clone 项目之后,直接运行 ./gradlew build,不需要自己手动安装 Gradle,体验大大提升。


五、build.gradle 和 settings.gradle 的角色

1. build.gradle

Gradle 最核心的构建配置文件。分为两种层次:

  • 项目根目录的 build.gradle(项目级别)
  • 各模块(如 app 模块)的 build.gradle(模块级别)

常见内容包括:

  • 应用插件(如 com.android.application
  • 配置编译参数(如 compileSdkVersion
  • 配置依赖库(如 dependencies {}

简单例子:

plugins {id 'com.android.application'
}android {namespace 'com.example.myapp'compileSdkVersion 34
}dependencies {implementation 'androidx.core:core-ktx:1.10.0'
}

2. settings.gradle

告诉 Gradle 有哪些模块项目名称是什么,还可以定义一些共享仓库地址等。

例子:

rootProject.name = "MyAwesomeProject"
include ':app', ':library'
  • rootProject.name 定义了项目名。
  • include 定义了需要参与构建的模块。

六、它们之间的关系图

可以用一张简洁的结构图来总结它们之间的关系:

                    Android 项目|--------------------------------|                              |gradle-wrapper.properties       settings.gradle|                              |指定Gradle版本                   定义子模块|Gradle (核心构建工具)|+---+---+|       |AGP插件   普通Gradle插件|帮助编译Android|build.gradle (各种模块的配置,如依赖、编译选项)

七、一句话总结

Gradle 是构建工具,Groovy 是脚本语言,AGP 是让 Gradle 支持 Android 项目的插件,gradle-wrapper.properties 指定了 Gradle 版本,而 build.gradle 和 settings.gradle 则定义了构建的具体逻辑。

http://www.xdnf.cn/news/180109.html

相关文章:

  • 打孔包地解决PCB的串扰问题
  • 03_多线程任务失败解决方案
  • C#学习第19天:多线程
  • 关于 Web 服务器的五个案例
  • AI 应用同质化:一场看不见的资源 “吞噬战”
  • 人机鉴权和机机鉴权
  • Day26 -php开发05 -搭建个人博客三种实现:自己写前后端 套用现成模板 调用第三方模板引擎smarty 及三种方法的缺点
  • nextjs整合快速整合市面上各种AI进行prompt连调测试
  • Java学习手册:开发 Web 网站要知道的知识
  • 马哥教育Linux云计算运维课程
  • GIS开发笔记(16)解决基于osg和osgearth三维地图上添加placeNode图标点击不易拾取的问题
  • 火语言RPA--企业微信群通知
  • vue3 内置组件KeepAlive的使用
  • Spark Streaming核心编程总结(四)
  • QtDesigner中的Spacers弹簧/间隔器
  • 一主多从+自组网络,无线模拟量信号传输专治布线PTSD
  • C语言(3)—分支和循环
  • WinForm真入门(18)——DateTimePicker‌控件解析
  • 13.组合模式:思考与解读
  • MCP实战-本地MCP Server + Client实战
  • 创建一个开机自启的服务
  • 题海拾贝:P2858 [USACO06FEB] Treats for the Cows G/S
  • 大模型图像编辑那家强?
  • 多模态常见面试题
  • 新魔百和CM311-5_CH/YST/ZG代工_GK6323V100C_2+8G蓝牙版_强刷卡刷固件包(可救砖)
  • SpringMVC 前后端数据交互 中文乱码
  • 【深度剖析】贵州茅台的数字化转型(2025)(上篇)
  • 第7章 内部类与异常类
  • 【蓝桥杯省赛真题57】Scratch穿越病毒区 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • Vue.js 核心特性解析:响应式原理与组合式API实践