提问人:androidcodehunter 提问时间:5/26/2013 最后编辑:MMGandroidcodehunter 更新时间:1/27/2023 访问量:471885
Android Studio 中的 Gradle 是什么?
What is Gradle in Android Studio?
问:
Gradle 对我来说有点困惑,对于任何新的 Android 开发人员来说也是如此。谁能解释一下 Android Studio 中的 Gradle 是什么以及它的用途是什么?为什么它包含在 Android Studio 中?
答:
Gradle 之于 Groovy JVM 语言,就像 Ant 之于 Java 一样。基本上,它是 Groovy 的构建工具。与 Ant 不同,它基于完整的 Groovy 语言。例如,您可以在 Gradle 脚本中编写 Groovy 脚本代码来执行某些操作,而不是依赖特定于领域的语言。
我不知道IntelliJ IDEA的具体集成,但想象一下你可以“扩展”Groovy,这样你就可以编写特定的“构建”语言原语,它们就成为了Groovy语言的一部分。(Groovy 的元编程本身就是一个完整的讨论。IntelliJ 和 Google 可以使用 Gradle 来构建一种非常高级的构建语言,但它是一种基于可扩展的开放标准构建的语言。
评论
这是 Google 希望在 Android 上使用的新构建工具。它被使用是因为它比 Ant 更具可扩展性和实用性。它旨在增强开发人员体验。
您可以在此处观看 Android 开发团队在 Google I/O 大会上的演讲。
Xavier 和 Tor Norbye 在 Android Studio 上还有另一场演讲,也是在 Google I/O 期间。
评论
Gradle 是一种构建程序源代码的构建工具。因此,它是 Android Studio 的重要组成部分,需要在开始开发应用之前进行安装。
我们不必单独安装它,因为当我们制作第一个项目时,Android Studio 会为我们完成。
评论
Gradle 是一款适用于 Android 的高级构建工具包,用于管理依赖项并允许您定义自定义构建逻辑。功能如下
自定义、配置和扩展生成过程。
使用同一项目为您的应用创建多个具有不同功能的 APK 文件。
重用代码和资源。
简答题
Gradle 是一个构建系统。
长答案
在使用 Android Studio 之前,您使用 Eclipse 进行开发,而且很可能您不知道如何在没有 Eclipse 的情况下构建 Android APK。
您可以在命令行上执行此操作,但您必须了解每个工具(dx 和 AAPT)在 SDK 中的作用。 Eclipse 为我们提供了他们自己的构建系统,将我们从这些低级但重要的基本细节中拯救出来。
现在,你有没有想过为什么该文件夹与您的文件夹位于同一目录中?res
src
这就是构建系统发挥作用的地方。构建系统会自动获取所有源文件(或),然后应用适当的工具(例如,获取类文件并将它们转换为文件),并将它们全部分组到一个压缩文件中 - 我们心爱的 APK。.java
.xml
.java
.dex
这个构建系统使用一些约定:一个例子是指定包含源文件(在 Eclipse 中是文件夹)或资源文件(在 Eclipse 中是文件夹)的目录。\src
\res
现在,为了自动执行所有这些任务,必须有一个脚本;您可以在 Linux 中使用 shell 脚本或在 Windows 中使用批处理文件语法编写自己的构建系统。明白了?
Gradle 是另一个构建系统,它从其他构建系统中汲取最佳功能并将它们组合成一个。它是根据它们的缺点改进的。它是一个基于 JVM 的构建系统。这意味着您可以用 Java 编写自己的脚本,Android Studio 会使用这些脚本。
Gradle 的一个很酷的事情是它是一个基于插件的系统。这意味着,如果你有自己的编程语言,并且想从源代码中自动执行构建一些包的任务(输出类似于 Java 的 JAR 文件),那么你可以用 Java 或 Groovy(或 Kotlin,请参阅此处)编写一个完整的插件,并将其分发到世界其他地方。
谷歌为什么要使用它?
Google 看到了市场上最先进的构建系统之一,并意识到您可以编写自己的脚本,几乎没有学习曲线,而无需学习 Groovy 或任何其他新语言。因此,他们为 Gradle 编写了 Android 插件。
您必须在项目中看到过 or 文件。您可以在此处编写脚本来自动执行任务。您在这些文件中看到的代码是 Groovy 或 Kotlin 代码。如果您写入,它将在您的控制台上打印。build.gradle
build.gradle.kts
System.out.println("Hello Gradle!");
您可以在构建脚本中执行哪些操作?
一个简单的例子是,在实际的构建过程发生之前,您必须将一些文件从一个目录复制到另一个目录。Gradle 构建脚本可以做到这一点。
评论
您可以在此处找到您需要了解的有关 Gradle 的所有信息: Gradle 插件用户指南
新构建系统的目标
新构建系统的目标是:
- 轻松重用代码和资源
- 轻松创建应用程序的多个变体,无论是用于多 apk 分发还是针对应用程序的不同风格
- 轻松配置、扩展和自定义构建过程
- 良好的IDE集成
为什么选择 Gradle?
Gradle 是一个高级构建系统,也是一个高级构建 工具包允许通过插件创建自定义构建逻辑。
以下是它的一些功能,让我们选择了 Gradle:
- 用于描述和操作生成逻辑的领域特定语言 (DSL)
- 构建文件是基于 Groovy 的,允许通过 DSL 混合声明性元素,并使用代码来操作 DSL 元素 以提供自定义逻辑。
- 通过 Maven 和/或 Ivy 进行内置依赖项管理。
- 非常灵活。允许使用最佳实践,但不强制使用自己的做事方式。
- 插件可以公开自己的 DSL 和自己的 API,供构建文件使用。
- 良好的工具 API 允许 IDE 集成
评论
在 Android Studio 中,Gradle 是一个自定义构建工具,用于通过管理依赖项和提供自定义构建逻辑来构建 Android 软件包(APK 文件)。
APK文件(Android应用程序包)是一个特殊格式的ZIP文件,其中包含
- 字节码
- 资源(图像、UI、XML 等)
- 清单文件
APK文件使用ADB(Android Debug Bridge)进行签名并推送到设备,并在其中执行。
Gradle 是一个运行在 Android Studio 上的构建系统。
例如,在其他语言中:
评论
Gradle
make
Gradle 是一个构建系统。构建系统是旨在自动化程序编译过程的软件工具。构建系统有多种形式,用于各种软件构建任务。虽然他们的主要目标是有效地创建可执行文件。
另一个相关术语是构建自动化,它是自动创建软件构建和相关过程的过程,包括:将计算机源代码编译为二进制代码、打包二进制代码和运行自动化测试。
其他语言的类似构建系统很少(请参阅此处的完整列表):
- Apache Ant 和 Apache Maven - Java
- sbt - 用于 Scala(Play 框架等)
- A-A-P - 基于 Python 的构建工具
- Rake (Apache Builder) - Ruby
- Leiningen for Clojure
以下是 Gradle 是什么以及如何在 Android Studio 中使用它的详细说明。
浏览 Gradle 文件
- 每当您在 Android Studio 中创建项目时,构建系统 自动生成所有必要的 Gradle 构建文件。
Gradle 构建文件
Gradle 构建文件使用特定于域的语言或 DSL 来定义 自定义构建逻辑并与特定于 Android 的交互 适用于 Gradle 的 Android 插件的元素。
Android Studio 项目由一个或多个模块组成,这些模块是您可以独立构建、测试和调试的组件。每个模块都有自己的构建文件,因此每个 Android Studio 项目都包含两种类型的 Gradle 构建文件。
顶级构建文件:在这里,您可以找到构成项目的所有模块通用的配置选项。
模块级构建文件:每个模块都有自己的 Gradle 构建文件,其中包含特定于模块的构建设置。您将花费大部分时间编辑模块级构建文件,而不是项目的顶级构建文件。
如需查看这些文件,请打开 Android Studio 的 Project 面板(通过选择 Project 标签页),然后展开 Gradle Scripts 文件夹。
Gradle Scripts 文件夹中的前两项是项目级和模块级 Gradle 构建文件build.gradle
顶级 Gradle 构建文件
每个 Android Studio 项目都包含一个顶级 Gradle 构建文件。此文件是 Gradle Scripts 文件夹中显示的第一个项目,并明确标记为 Project。build.gradle
大多数情况下,您不需要对此文件进行任何更改,但是 了解其内容及其所扮演的角色仍然很有用 在您的项目中。
模块级 Gradle 构建文件
除了项目级 Gradle 构建文件外,每个模块都有自己的 Gradle 构建文件。下面是一个基本的模块级 Gradle 构建文件的注释版本。
其他 Gradle 文件
除了 build.gradle 文件之外,Gradle Scripts 文件夹还包含一些其他 Gradle 文件。大多数情况下,您不必手动编辑这些文件,因为当您对项目进行任何相关更改时,它们会自动更新。但是,最好了解这些文件在项目中扮演的角色。
gradle-wrapper.properties (Gradle 版本)
此文件允许其他人构建您的代码,即使他们的计算机上没有安装 Gradle。此文件会检查是否安装了正确版本的 Gradle,并在必要时下载必要的版本。
settings.gradle
此文件引用构成项目的所有模块。
gradle.properties(项目属性)
此文件包含整个项目的配置信息。 默认情况下它是空的,但您可以将各种属性应用于 您的项目,将它们添加到此文件中。
local.properties(SDK 位置)
此文件告诉 Android Gradle 插件在哪里可以找到您的 Android SDK 安装。
注意:包含特定于 Android SDK 本地安装的信息。这意味着不应将此文件置于源代码管理之下。local.properties
我从中对 Gradle 有了清晰的了解。
评论
作者:@Brian Gardner:
Gradle 是一个广泛的构建工具和依赖项管理器,用于编程项目。它有一种基于Groovy的特定领域语言。Gradle 还为许多类型的项目(包括 Java、Android 和 Scala)提供按约定构建的支持。
Gradle的特点:
- 依赖关系管理
- 在 Gradle 中使用 Ant
- Gradle 插件
- Java 插件
- Android插件
- 多项目构建
评论
Gradle 是一个自动化构建工具包,可以集成到许多不同的环境中,而不仅仅是 Android 项目。
以下是您可以使用 Gradle 执行的几项操作。
新项目所需的配置最少,因为 Gradle 为您的 Android Studio 项目提供了默认配置。
依赖项声明。您可以声明本地或远程服务器上托管的依赖 JAR 文件或库文件。
Gradle 会根据项目的源代码自动生成测试目录和测试 APK 文件。
如果您将所有必要的信息(例如
keyPassword
和keyAlias
)添加到 Gradle 构建文件中,则可以使用 Gradle 生成已签名的 APK 文件。Gradle 可以使用不同的软件包生成多个 APK 文件,并从单个模块构建配置。
Gradle 是一个自定义的构建工具,用于构建 APK 文件。它也被称为应用程序包工具包。
评论
冒着话语的风险,我认为这背后是为什么 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。Android Studio 现在是唯一一个我似乎仍然经历缺失依赖地狱的地方。
我倾向于说这是谷歌的错。当他们轻率地决定从 Eclipse 转向 Android Studio / Gradle 而没有产生强大的转换过程时,他们破坏了 Android 生态系统(以及数千个现有的 Android 项目/在线教程)。那些在 Eclipse 中工作的人并没有将它们调整到 Android Studio(大概是因为这对他们来说很痛苦)。尝试在 Android Studio 中使用这些项目的人也遇到了同样的问题。
无论如何,如果 Gradle 是一个超级强大的构建系统,为什么我仍然在 SDK 管理器中管理许多其他依赖项?为什么需要 NDK 的项目不能在其 Gradle 文件中指定这一点,以便在需要时自动安装和构建?为什么NDK很特别?目标平台也是如此?为什么我要在 IDE 中显式安装它们,而不是仅仅根据它们检查我的项目并在幕后为我整理这一切?
评论
Gradle 是一个高级构建系统,也是一个高级构建工具包,允许通过插件创建自定义构建逻辑!
优势:
- DSL - 基于 Groovy 的特定领域语言
- DAG - 有向无环图
- 增量生成
- 可扩展域模型
- Gradle 始终保持最新状态
- 在执行任务之前,Gradle 会拍摄任务输入和输出的快照。
- 如果快照已更改或不存在,Gradle 将 重新执行此任务。
清单条目
通过 DSL,可以配置以下内容 清单条目:
构建变体
默认情况下,Android 插件会自动将项目设置为 生成应用程序的调试版本和发布版本。
依赖
- 本地依赖项:
如果您的本地文件系统中有二进制存档,则该模块 依赖于,例如 JAR 文件,您可以在 该模块的构建文件。
- 远程依赖关系:
首先,必须将存储库添加到列表中,然后 依赖项必须以 Maven 或 Ivy 声明其 工件。
定义:Gradle 可以被描述为一种结构化的构建机制,它为开发人员提供了管理项目资源的工具和灵活性,以创建更小的构建,以满足某些配置的某些设备的特定要求
基本配置
minimumSdk
maximumSdk
targettedSdk
versionCode
versionName
图书馆
此外,我们可以根据需要添加 Android 库或任何其他第三方库。这很容易,而且以前是一项繁琐的任务。如果库不适合现有项目,则会向开发人员显示一个日志,该用户可以在其中找到适当的解决方案来对项目进行更改,以便可以添加库。这只是一条依赖线。
生成各种构建
将构建类型与构建风格相结合,以获得各种构建变体
==================== ====================
| BuildTypes | | ProductFlavours |
-------------------- ====================== --------------------
| Debug,Production | || || | Paid,Free,Demo,Mock|
==================== || || ====================
|| ||
VV VV
=================================================================
| DebugPaid, DebugFree, DebugDemo, DebugMock |
| ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
=================================================================
减小尺寸
Gradle 通过从集成库中删除未使用的资源和未使用的内容来帮助减小生成的构建的大小。
管理权限
我们可以根据需求,通过在某些场景中添加某些权限来为某些构建指定某些权限。
针对某些设备构建
我们可以管理某些设备的生成构建,这些设备包括特定的密度和特定的 API 级别。这有助于根据多种类型设备的要求在应用商店中部署产品。
良好的参考
Gradle 可以自动构建复杂的 Android 项目,这些项目涉及来自多个源、项目、库等的数千行代码。它可以根据大量的配置规范有条件地生成多个优化的 APK——如果您有兴趣,其他答案提供了 Gradle 这方面的更多详细信息。
但是,如果您不熟悉 Android 开发,那么 Gradle 在 99% 的情况下会阻止您的项目构建。这是一个高深莫测的复杂系统,有效地混淆了 Android 构建过程,基本上使没有经验的开发人员无法使用它,即为了构建一个简单的入门级 Android 应用程序,毫无戒心的新手可能需要学习和理解许多他们没有讨价还价的东西,例如:
- Android APK 结构和生态系统
- Android 工作室
- Java 类路径和依赖关系
- 槽的
- Gradle 构建脚本
- 许多其他复杂而有趣的技术
对于Android开发人员来说,所有这些事情都很有趣且有用,但它们远非易事,并且存在巨大的进入壁垒。我怀疑 OP 提出这个问题的灵感来源于新手开发人员在花了太长时间试图构建一个简单的应用程序并不断被 Gradle 挫败后不可避免地会感到沮丧。所有这些技术都有大量的高技术性文档,这反常地加剧了这个问题。同样对于大量的开发需求,Gradle 也算是矫枉过正了。
另一种方法是编写一个 shell 脚本,通过自动执行 Android SDK 中提供的工具来构建项目。这种方法的优点很多,对于初学者来说,它可能是研究和理解构建过程和 Android 生态系统的最佳方式,它允许您完全控制应用程序的构建方式。然而,这种方法更适合那些无可救药的技术头脑,而不是没有经验的菜鸟尝试android。
它的缺席(如果有这样的事情,请告诉我)是一个入门级的轻量级 IDE,它的功能集有所减少,同时简化了构建过程,同时又不掩盖它(所以不是 Netbeans 或 Eclipse),它可能仍然可以使用 Gradle(Ant 出了什么问题)。它应该可以轻松生成符合一些常见配置的 APK,并使用可以演变为完整 Android Studio 项目的项目结构(如果您决定采用这种方式)。
简单来说,Gradle 是 Android Studio 提供的工具,用于实现两个重要流程:
- 构建我们的项目
- 将 AndroidManifest.xml、res 文件夹和二进制代码打包到一个名为 APK 的特殊格式的 zip 文件中
Gradle = Groovy + 摇篮
参考资料:Hans Dockter 论坛评论
当它本来可以被称为“Build”或Android Studio中的其他东西时,这种混淆是不必要的。
我们喜欢在开发社区中给自己制造困难。
搜索结果
来自网络的精选片段
安卓 |建。格拉德尔。
Gradle 是一个构建系统(开源),用于自动化构建、测试、部署等。例如,在实际构建过程发生之前,Gradle 构建脚本可以执行将某些文件从一个目录复制到另一个目录的简单任务。
Gradle 是一个易于自定义的构建系统,支持按约定模型构建。Gradle 是用 Java 编写的,但构建语言是 Groovy DSL(领域规范语言)。Gradle 不仅支持多项目构建,还支持 Ivy 和 Maven 等依赖项。Gradle 还可以支持构建非 Java 项目。
https://medium.com/@ravirajdesai501/what-is-gradle-442458dd7ec1
Gradle 就像一个将功能置于可用性之前的版本,这就是为什么您和 433k 读者甚至无法确定它是一个构建系统的原因。make
Android Studio 构建系统基于 Gradle,Android Gradle 插件添加了一些专门用于构建 Android 应用的功能。虽然 Android 插件通常与 Android Studio 同步更新,但该插件(以及 Gradle 系统的其余部分)可以独立于 Android Studio 运行并单独更新。
有关更多详细信息,您可以参考:
简短而简单的答案,
Gradle 是一个构建系统,负责代码编译、测试、部署和将代码转换为 .dex 文件,因此在设备上运行应用程序。由于 Android Studio 预装了 Gradle 系统,因此无需安装额外的运行时软件来构建我们的项目。
Gradle 和 Android
Gradle 是一个开源构建自动化工具。Gradle 支持适用于 Android 的 Java 和 Kotlin
source files -> build tools -> output file(.apk, .jar, .aar ...)
您可以使用更多低级构建工具,例如 , [About], [About], sign tools ...javac
DX, D8
aapt
Gradle 是更高级的工具,可以在引擎盖下完成所有这些事情。它具有以下优点:
- dependency manager[关于]
- 在 Groovy 或 Kotlin 上用于公开当前设置或自定义/扩展构建过程。例如,您可以编写一些任务并通过任何项目共享它们
Domain Specific Language(DSL)
https://www.slideshare.net/AshifShaikh3/graddle
Gradle 正在帮助我们管理 Android 的生态系统,例如库、代码版本、版本名称和应用程序 ID。为了查找应用程序,Gradle 正在添加依赖项 1。远程基地,2。本地基地。
评论
我将以简单的方式用 Java 来解释它。
假设我们有一个简单的 Hello World 项目 (HelloWorld,.java)。为了运行项目,我们需要编译它(HelloWorld.class)。然后我们将在 JVM(java 虚拟机)中运行它。
编译代码的过程可以使用 javac.exe(java 编译器命令)附带的 JDK(Java 开发工具包)来完成。它将 Java 源文件 (.java) 编译为字节码类文件 (.class)。
使用所有 .java 源文件的列表调用 javac.exe。例如,对于单个源文件
javac HelloWorld.java
编译多个 Java 源文件
javac Program1.java Program2.java Program3.java
这并不是太有趣,因为一旦你开始制作大项目,你可能会开始使用第三方提供的功能(JAR文件)。例如 编译依赖于外部库的源文件:
javac -classpath mail.jar EmailSender.java
编译依赖于外部多个库的源文件:(其中 Myprogram.java 是依赖于多个库的源文件)
javac -cp lib1.jar;lib2.jar;lib3.jar MyProgram.java
请记住,有时源文件依赖于多个库的 100 和 1000,这使得手动编译成为一项非常艰巨的工作。为了解决这个问题,我们构建了工具,例如 Gradle、Maven(它使编译过程无错误,并且可以轻松完成多次)
Built 工具(如 Gradle)的其他用途包括
- 测试源代码很容易
- 将应用程序打包为格式,以便它可以 发布和部署很容易
评论