1410

Gradle 对我来说有点令人困惑,对于任何新的 Android 开发人员也是如此。谁能解释一下 Android Studio 中的 Gradle 是什么以及它的用途是什么?为什么它包含在 Android Studio 中?

4

26 回答 26

1625

简答

Gradle 是一个构建系统。

长答案

在 Android Studio 之前,您使用Eclipse进行开发,而且很可能,您不知道如何在没有 Eclipse的情况下构建您的 Android APK 。

您可以在命令行上执行此操作,但您必须了解每个工具(dxAAPT)在 SDK 中的作用。Eclipse 通过为我们提供自己的构建系统,将我们从这些低级但重要的基本细节中拯救出来。

现在,您有没有想过为什么该res文件夹与您的文件夹位于同一目录中src

这是构建系统进入画面的地方。构建系统自动获取所有源文件(.java.xml),然后应用适当的工具(例如,获取.java类文件并将它们转换为.dex文件),并将所有这些文件组合成一个压缩文件 - 我们钟爱的 APK。

这个构建系统使用了一些约定:一个示例是指定包含源文件(在 Eclipse 中是\src文件夹)或资源文件(在 Eclipse 中是\res文件夹)的目录。

现在,为了自动化所有这些任务,必须有一个脚本;您可以使用 Linux 中的 shell 脚本或 Windows 中的批处理文件语法编写自己的构建系统。知道了?

Gradle 是另一个构建系统,它采用了其他构建系统的最佳功能并将它们组合成一个。它是基于他们的缺点而改进的。它是一个基于 JVM 的构建系统。这意味着您可以使用 Android Studio 使用的 Java 编写自己的脚本。

Gradle 的一个很酷的地方是它是一个基于插件的系统。这意味着,如果您有自己的编程语言,并且希望从源代码自动构建一些包(如 Java 的JAR文件的输出),那么您可以用 Java 或Groovy(或Kotlin,请参见此处)编写一个完整的插件,并将其分发到世界其他地方。

谷歌为什么使用它?

Google 看到了市场上最先进的构建系统之一,并意识到您可以编写自己的脚本,几乎没有学习曲线,无需学习 Groovy 或任何其他新语言。所以他们为 Gradle 编写了 Android 插件。

您一定已经build.gradle在项目中看到过文件。在那里你可以编写脚本来自动化你的任务。您在这些文件中看到的代码是 Groovy 代码。如果你写System.out.println("Hello Gradle!");,那么它将在你的控制台上打印。

你可以在构建脚本中做什么?

一个简单的例子是,在实际构建过程发生之前,您必须将一些文件从一个目录复制到另一个目录。Gradle 构建脚本可以做到这一点。

于 2014-07-18T15:27:41.113 回答
172

它是 Google 想要用于 Android 的新构建工具。之所以使用它是因为它比Ant更具可扩展性和实用性。它旨在增强开发人员的体验。

您可以在此处查看来自 Android 开发团队的 Xavier Ducrohet 在Google I/O上的演讲。

Xavier 和 Tor Norbye 也在此处的 Google I/O 期间发表了另一场关于 Android Studio 的演讲。

于 2013-05-26T03:48:30.390 回答
71

Gradle是一个在Android Studio上运行的构建系统。

例如在其他语言中:

于 2015-08-21T02:25:12.337 回答
51

这里详细解释了Gradle是什么以及如何在 Android Studio 中使用它。

探索 Gradle 文件

  1. 每当您在 Android Studio 中创建项目时,构建系统都会自动生成所有必要的 Gradle 构建文件。

Gradle 构建文件

  1. Gradle 构建文件使用特定领域的语言或 DSL 来定义自定义构建逻辑并与 Android 插件的 Android 特定元素进行交互。

  2. Android Studio 项目由一个或多个模块组成,这些模块是您可以独立构建、测试和调试的组件。每个模块都有自己的构建文件,因此每个 Android Studio 项目都包含两种 Gradle 构建文件。

  3. 顶级构建文件:在这里您可以找到组成项目的所有模块共有的配置选项。

  4. 模块级构建文件:每个模块都有自己的 Gradle 构建文件,其中包含特定于模块的构建设置。您将花费大部分时间编辑模块级构建文件,而不是项目的顶级构建文件。

要查看这些build.gradle文件,请打开 Android Studio 的 Project 面板(通过选择 Project 选项卡)并展开 Gradle Scripts 文件夹。Gradle Scripts 文件夹中的前两项是项目级和模块级 Gradle 构建文件

顶级 Gradle 构建文件

每个 Android Studio 项目都包含一个顶级 Gradle 构建文件。该build.gradle文件是出现在 Gradle Scripts 文件夹中的第一个项目,并且明确标记为 Project。

大多数情况下,您不需要对此文件进行任何更改,但了解它的内容以及它在您的项目中扮演的角色仍然很有用。

模块级 Gradle 构建文件

除了项目级别的 Gradle 构建文件之外,每个模块都有自己的 Gradle 构建文件。下面是一个基本的模块级 Gradle 构建文件的注释版本。

其他 Gradle 文件

除了 build.gradle 文件之外,您的 Gradle Scripts 文件夹还包含一些其他 Gradle 文件。大多数情况下,您不必手动编辑这些文件,因为当您对项目进行任何相关更改时,它们会自动更新。但是,最好了解这些文件在您的项目中所扮演的角色。

gradle-wrapper.properties(Gradle 版本)

该文件允许其他人构建您的代码,即使他们的机器上没有安装 Gradle。该文件检查是否安装了正确版本的 Gradle,并在必要时下载必要的版本。

设置.gradle

该文件引用了构成您的项目的所有模块。

gradle.properties(项目属性)

此文件包含整个项目的配置信息。默认情况下它是空的,但是您可以通过将它们添加到此文件来将各种属性应用到您的项目中。

local.properties(SDK 位置)

该文件告诉 Android Gradle 插件在哪里可以找到您的 Android SDK 安装。

注意: local.properties包含特定于 Android SDK 本地安装的信息。这意味着您不应将此文件置于源代码管理之下。

推荐阅读 - Tutsplus 教程

我由此对Gradle有了一个清晰的认识。

于 2015-12-12T08:04:20.187 回答
30

Gradle 是一种构建程序源代码的构建工具。所以它是 Android Studio 的重要组成部分,需要在开始开发应用程序之前安装。

我们不必单独安装它,因为 Android Studio 会在我们创建第一个项目时为我们完成。

于 2014-01-19T09:14:54.963 回答
30

定义: Gradle 可以被描述为一种结构化的构建机制,它为开发人员提供了管理项目资源的工具和灵活性,以创建尺寸更小的构建,针对特定配置的某些设备的


基本配置

  1. minimumSdk
  2. maximumSdk
  3. targettedSdk
  4. versionCode
  5. versionName

图书馆

我们可以根据需要添加 Android 库或任何其他第三方库。这很容易,之前是一项乏味的任务。如果该库不适合现有项目,则向开发人员显示一个日志,该人可以在其中找到适当的解决方案来更改项目,以便可以添加该库。这只是一条依赖线。


生成各种构建

将构建类型与构建风格相结合以获得各种构建变体

 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

缩小尺寸

Gradle 通过从集成库中删除未使用的资源和未使用的东西来帮助减少生成的构建的大小。


管理权限

我们可以根据需求在特定场景下添加特定权限,为特定构建指定特定权限。


为特定设备构建

我们可以为包含特定密度和特定 API 级别的特定设备管理生成构建。这有助于根据跨多种设备的需求在应用商店中部署产品。


很好的参考

沃杰拉教程

于 2016-11-26T17:21:26.803 回答
27

您可以在此处找到有关 Gradle 的所有信息: Gradle 插件用户指南

新构建系统的目标

新构建系统的目标是:

  • 使重用代码和资源变得容易
  • 轻松创建应用程序的多个变体,用于多 apk 分发或不同风格的应用程序
  • 使配置、扩展和自定义构建过程变得容易
  • 良好的 IDE 集成

为什么选择 Gradle?

Gradle 是一个高级构建系统以及一个高级构建工具包,允许通过插件创建自定义构建逻辑。

以下是让我们选择 Gradle 的一些特性:

  • 用于描述和操作构建逻辑的领域特定语言 (DSL)
  • 构建文件基于 Groovy,允许通过 DSL 混合声明性元素并使用代码来操作 DSL 元素以提供自定义逻辑。
  • 通过 Maven 和/或 Ivy 的内置依赖管理。
  • 非常灵活。允许使用最佳实践,但不强迫自己的做事方式。
  • 插件可以公开自己的 DSL 和自己的 API 以供构建文件使用。
  • 良好的工具 API 允许 IDE 集成
于 2015-01-21T04:50:39.953 回答
24

Gradle 是一个构建系统构建系统是旨在自动化程序编译过程的软件工具。构建系统有多种形式,用于各种软件构建任务。虽然他们的主要目标是有效地创建可执行文件。

另一个相关术语是构建自动化,它是自动创建软件构建的过程以及相关过程,包括:将计算机源代码编译为二进制代码、打包二进制代码和运行自动化测试。

其他语言的类似构建系统很少(请参阅此处的完整列表):

  1. Apache AntApache Maven - Java
  2. sbt - 用于ScalaPlay 框架等)
  3. AAP -基于Python的构建工具
  4. Rake (Apache Builder) -红宝石
  5. 用于Clojure的Leiningen
于 2015-09-18T08:28:58.020 回答
18

冒着言辞的风险,我认为这背后是为什么 Android Studio / Gradle 体验如此糟糕的问题。

典型的Clojure经验:

典型的 Android Studio / Gradle 体验:

  • “导入我的Eclipse项目”。
  • 好的,项目已导入。
  • Gradle 正在做它的事情……等等……等等……等等……Gradle 已经完成了。
  • 编译...无法编译,因为我不知道 X 是什么/找不到 Y 库。

我不确定这完全是 Gradle 的错。但是“从 Eclipse 项目导入”似乎很不稳定。对于 Gradle 所谓的复杂性和构建系统的所有优点,Android Studio 似乎并没有很好地从 Eclipse 导入构建依赖项或构建过程。

它不会告诉您何时无法导入完整的依赖关系图。Android Studio 没有提供有关如何解决问题的有用帮助或提示。它没有告诉您可以在哪里手动查看 Eclipse 文件夹。它不会告诉您似乎缺少哪个库。或者帮你搜索Maven等。

在 2016 年,像 Leiningen / Clojars,或 Node.js 的npm,或 Python 的pip或 Debian apkg (我相信许多其他语言和系统的类似包管理器)都运行良好......缺少依赖项是问题过去的。

安卓除外。Android Studio 现在是唯一一个我似乎仍然会经历缺失依赖地狱的地方。

我倾向于说这是谷歌的错。当他们漫不经心地决定从 Eclipse 转移到 Android Studio / Gradle 时,他们打破了 Android 生态系统(以及数千个现有的 Android 项目 / 在线教程),而没有产生强大的转换过程。项目在 Eclipse 中工作的人并没有使他们适应 Android Studio(大概是因为这对他们来说很痛苦)。尝试在 Android Studio 中使用这些项目的人也遇到了同样的问题。

无论如何,如果 Gradle 是这个超级强大的构建系统,为什么我还要在 SDK 管理器中管理大量其他依赖项?为什么需要NDK的项目不能在其 Gradle 文件中指定这一点,以便在需要时自动安装和构建?为什么 NDK 很特别?同样适用于目标平台?为什么我要在 IDE 中明确地安装它们,而不是仅仅对照它们检查我的项目并在幕后为我整理好这一切?

于 2016-08-21T14:33:56.527 回答
14

Gradle 是一个高级构建系统以及一个高级构建工具包,允许通过插件创建自定义构建逻辑!

优点:

  • DSL -基于Groovy的领域特定语言
  • DAG - 有向无环图
  • 增量构建
  • 可扩展领域模型
  • Gradle 始终是最新的
  • 在执行任务之前,Gradle 会对其任务的输入和输出进行快照。
  • 如果快照已更改或不存在,Gradle 将重新执行此任务。

清单条目

通过 DSL,可以配置以下清单条目:

构建变体

默认情况下,Android 插件会自动设置项目以构建应用程序的调试版本和发布版本。

依赖项

  1. 本地依赖:

如果您的本地文件系统中有模块所依赖的二进制存档,例如 JAR 文件,您可以在该模块的构建文件中声明这些依赖项。

  1. 远程依赖:

首先必须将存储库添加到列表中,然后必须以 Maven 或 Ivy 声明其工件的方式声明依赖项。

于 2016-11-17T10:03:59.637 回答
13

Gradle 之于Groovy JVM 语言就像Ant之于 Java。基本上,它是 Groovy 的构建工具。与 Ant 不同,它基于完整的 Groovy 语言。例如,您可以在 Gradle 脚本中编写 Groovy 脚本代码来做某事,而不是依赖于特定领域的语言

我不知道IntelliJ IDEA的具体集成,但想象一下您可以“扩展”Groovy 以便您可以编写特定的“构建”语言原语,它们只是成为 Groovy 语言的一部分。(Groovy 的元编程本身就是一个完整的讨论。)IntelliJ 和 Google 可以使用 Gradle 来构建一种非常高级的构建语言,但是,它是一种基于可扩展的开放标准的语言。

于 2013-05-26T01:34:13.437 回答
10

Gradle 是用于管理依赖项并允许您定义自定义构建逻辑的 Android 高级构建工具包。功能就像

  • 自定义、配置和扩展构建过程。

  • 使用同一个项目为您的应用创建具有不同功能的多个APK文件。

  • 重用代码和资源。

参考

于 2014-05-23T10:50:14.450 回答
10

Gradle 是一个自动构建工具包,可以集成到许多不同的环境中,不仅适用于 Android 项目。

以下是您可以使用 Gradle 做的几件事。

  • 新项目所需的配置最少,因为 Gradle 为您的 Android Studio 项目提供了默认配置。

  • 依赖声明。您可以声明托管在本地或远程服务器上的依赖项 JAR 文件或库文件。

  • Gradle 会自动从您的项目源中生成一个测试目录和一个测试 APK 文件。

  • 如果将所有必要的信息(例如keyPasswordkeyAlias)添加到 Gradle 构建文件中,则可以使用 Gradle 生成签名的 APK 文件。

  • Gradle 可以生成具有不同包的多个 APK 文件,并从单个模块构建配置。

于 2016-04-28T06:11:42.787 回答
9

在 Android Studio 中,Gradle 是一个自定义构建工具,用于通过管理依赖项和提供自定义构建逻辑来构建 Android 包( APK文件)。

APK 文件(Android 应用程序包)是一个特殊格式的 ZIP 文件,其中包含

  • 字节码
  • 资源(图像、UI、XML等)
  • 清单文件

使用ADB(Android 调试桥)对 APK 文件进行签名并推送到设备并在其中执行。

于 2015-04-18T07:13:07.707 回答
7

Gradle 是一个自定义的构建工具,用于构建 APK 文件。它也被称为应用程序包工具包。

于 2016-07-24T05:11:14.210 回答
6

Gradle 使构建复杂的 Android 项目成为可能,这些项目涉及来自多个源、项目、库等的成千上万行代码。它可以根据大量配置规范有条件地生成多个优化的 APK——如果你有兴趣,其他答案提供了 Gradle 这方面的更多细节。

但是,如果您是 Android 开发新手,那么在 99% 的情况下,Gradle 会阻止您的项目构建。这是一个高深莫测的复杂系统,它有效地混淆了 Android 构建过程,并且基本上使没有经验的开发人员无法使用它,也就是说,为了构建一个简单的入门级 Android 应用程序,毫无戒心的新手可能需要学习和理解他们没有的许多东西'讨价还价,例如:

  • Android APK 结构和生态系统
  • 安卓工作室
  • Java 类路径和依赖项
  • 时髦的
  • Gradle 构建脚本
  • 许多其他复杂而有趣的技术

所有这些对于 Android 开发人员来说都很有趣和有用,但它们远非易事,并且存在巨大的进入障碍。我怀疑激发 OP 提出这个问题的原因是,在花了太长时间试图构建一个简单的应用程序并不断被 Gradle 挫败之后,这种挫败感不可避免地打击了新手开发人员。大量可用于所有这些技术的高度技术性文档反常地加剧了这个问题。另外对于大量的开发需求,Gradle 是大材小用。

另一种方法是编写一个 shell 脚本,通过自动化 Android SDK 中可用的工具来构建您的项目。这种方法的优点很多,对于初学者来说,它可能是研究和了解构建过程和 Android 生态系统的最佳方式,它允许您完全控制应用程序的构建方式。然而,这种方法更适合于无法挽回的技术负责人,而不是尝试 android 的没有经验的菜鸟。

它的缺席(如果有这样的事情,请通知我)是一个入门级的轻量级 IDE,它具有减少的功能集,同时简化了构建过程,同时又不会掩盖它(所以不是 Netbeans 或 Eclipse)它可能仍然使用 Gradle(Ant 出了什么问题)。如果您决定采用这种方式,它应该可以轻松生成符合一些常见配置的 APK,并使用可以演变为完整 Android Studio 项目的项目结构。

于 2017-11-26T03:03:27.453 回答
5

@布莱恩·加德纳

Gradle 是用于编程项目的广泛的构建工具和依赖管理器。它具有基于 Groovy 的特定领域语言。Gradle 还为包括 Java、Android 和 Scala 在内的许多类型的项目提供按约定构建的支持。

Gradle的特点:

  1. 依赖管理
  2. 在 Gradle 中使用 Ant
  3. Gradle 插件
  4. Java 插件
  5. 安卓插件
  6. 多项目构建
于 2016-04-23T14:37:33.110 回答
2

简单来说,Gradle 是 Android Studio 提供的一个工具,用于实现两个重要的流程:

  1. 建立我们的项目
  2. 将 AndroidManifest.xml、res 文件夹和二进制代码打包到一个名为 APK 的特殊格式的 zip 文件中
于 2017-12-08T22:55:33.377 回答
1

Gradle 就像一个make将功能置于可用性之前的版本,这就是为什么您和 433k 读者甚至无法确定它是一个构建系统的原因。

于 2020-11-13T10:55:48.597 回答
1

简短而简单的答案,

Gradle 是一个构建系统,负责将代码编译、测试、部署和转换为 . dex 文件,从而在设备上运行应用程序。由于 Android Studio 预装了 Gradle 系统,因此无需安装额外的运行时软件来构建我们的项目。

于 2021-02-18T11:35:20.800 回答
1

Gradle 是一个易于定制的构建系统,支持按约定模型构建。Gradle 是用 Java 编写的,但构建语言是 Groovy DSL(领域规范语言)。Gradle 不仅支持多项目构建,还支持 Ivy 和 Maven 等依赖项。Gradle 还可以支持构建非 Java 项目。

https://medium.com/@ravirajdesai501/what-is-gradle-442458dd7ec1

于 2020-08-28T17:31:30.067 回答
1

Gradle 和安卓

Gradle是一个开源的构建自动化工具。Gradle 支持 Android 的 Java 和 Kotlin

source files -> build tools -> output file(.apk, .jar, .aar ...)

您可以使用更底层的构建工具javac,例如DX, D8[About]aapt[About]、sign tools ...

Gradle 是更高级的工具,可以在后台完成所有这些工作。它具有以下优点:

  • 依赖管理器[关于]
  • 在 Groovy 或 Kotlin 上使用Domain Specific Language(DSL)以公开当前设置或自定义/扩展构建过程。例如,您可以编写一些任务并通过任何项目共享它们

[gradle 与 gradlew]

于 2021-04-30T10:03:57.230 回答
1

Android Studio 构建系统基于 Gradle,Android Gradle 插件添加了一些特定于构建 Android 应用程序的功能。尽管 Android 插件通常与 Android Studio 同步更新,但该插件(以及 Gradle 系统的其余部分)可以独立于 Android Studio 运行并单独更新。

更多详情您可以参考:

  1. https://developer.android.com/studio/releases/gradle-plugin?gclid=Cj0KCQiAlZH_BRCgARIsAAZHSBndmJC_myjKnuCBZbe7u9nyzMjbFGES2SVvedq4nxyqdqJnqq0xxlAaAvGMEALw_wcB&gclsrc=aw.ds
  2. https://gradle.org/
于 2020-12-24T12:15:14.403 回答
0

搜索结果

网络精选片段

安卓 | 建造。摇篮。

Gradle 是一个构建系统(开源),用于自动化构建、测试、部署等。例如,将一些文件从一个目录复制到另一个目录的简单任务可以通过 Gradle 构建脚本在实际的构建过程发生。

于 2020-01-06T06:14:46.900 回答
0

Gradle = Groovy + Cradle

参考:Hans Dockerter 论坛评论

当它可以在 Android Studio 中被称为“构建”或其他东西时,这种混淆是有点不必要的。

我们喜欢在开发社区中为自己制造困难。

于 2018-03-08T14:57:58.047 回答
0

https://www.slideshare.net/AshifShaikh3/graddle

Gradle 正在帮助我们管理 Android 的生态系统,例如库、代码版本、版本名称和应用程序 ID。为了找到一个应用程序,Gradle 正在添加依赖项 1. 远程基础,2. 本地基础。

在此处输入图像描述

于 2021-07-19T06:12:36.227 回答