Android Studio中的Gradle是什么?

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

463527 次浏览

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

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

这是Google希望用于Android的新构建工具。它被使用是因为它比蚂蚁更具可扩展性和实用性。它旨在增强开发人员体验。

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

还有另一个关于Android Studio的演讲,由Xavier和Tor Nor拜,也是在这里的Google I/O期间

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

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

Gradle是一个适用于Android的高级构建工具包,用于管理依赖项并允许您定义自定义构建逻辑。功能类似

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

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

  • 重用代码和资源。

参考

简短回答

Gradle是一个构建系统。

长答案

在Android Studio之前,您将Eclipse用于开发目的,并且很可能您不知道如何在没有Eclipse的情况下构建AndroidAPK

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

现在,你有没有想过为什么res文件夹与src文件夹在同一个目录中?

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

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

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

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

Gradle的一个很酷的地方是它是一个插件系统。这意味着如果你有自己的编程语言,并且你想从源代码自动构建一些包(输出像JAR文件Java)的任务,那么你可以在Java或Groovy(或静态编程语言,见这里)中编写一个完整的插件,并将其分发给世界其他地方。

Google为什么要使用它?

谷歌看到了市场上最先进的构建系统之一,并意识到你可以用很少的学习曲线编写自己的脚本,而无需学习Groovy或任何其他新语言。所以他们为Gradle编写了Android插件。

您一定在您的项目中看到过build.gradle文件。您可以在那里编写脚本来自动化您的任务。您在这些文件中看到的代码是Groovy代码。如果您编写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文件使用亚行(Android调试桥)进行签名并推送到设备,在那里执行。

Gradle是在androidStudio上运行的构建系统。

在其他语言中,例如:

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

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

其他语言的类似构建系统很少(参见完整列表这里):

  1. apacheantapachemaven-Java
  2. sbt-用于scalaPlay框架等)
  3. A-A-P-python基于构建工具
  4. Rake(Apache Builder)-ruby
  5. 莱宁根Clojure

以下是Gradle是什么以及如何在Android Studio中使用它的详细说明。

探索Gradle文件

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

Gradle构建文件

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

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

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

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

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

顶级Gradle构建文件

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

大多数时候,您不需要对此文件进行任何更改,但是了解它的内容和它所扮演的角色仍然是有用的在您的项目中。

模块级Gradle构建文件

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

其他Gradle文件

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

gradle-wrapper.properties(Gradle版本)

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

settings.gradle

此文件引用组成项目的所有模块。

gradle.properties(项目物业)

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

local.properties(SDK位置)

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

备注:local.properties包含特定于本地安装Android SDK的信息。这意味着您不应该将此文件保存在源代码控制下。

建议阅读-Tutsplus教程

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

by@布莱恩·加德纳:

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

Gradle的特点:

  1. 依赖管理
  2. 使用Gradle的蚂蚁
  3. Gradle插件
  4. Java插件
  5. 安卓插件
  6. 多项目构建

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

这里有一些你可以用Gradle做的事情。

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

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

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

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

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

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

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

典型Clojure体验:

  • 下载具有project.clj中列出的依赖项的项目。
  • 由于ClojarsMaven莱宁根获得了依赖关系。
  • 项目编译。

典型的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 Manager中管理很多其他依赖项?为什么一个需要NDK的项目不能在它的Gradle文件中指定这一点,这样它就可以在需要时自动安装和构建?为什么NDK很特别?对目标平台来说也是如此?为什么我要明确地在IDE中安装它们,而不是只是对照它们检查我的项目,并在幕后为我排序?

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

优点:

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

清单条目

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

构建变体

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

依赖关系

  1. 本地依赖关系:

如果您的本地文件系统中有一个模块的二进制存档依赖,例如JAR文件,您可以在该模块的构建文件。

  1. 远程依赖关系:

首先必须将存储库添加到列表中,然后是依赖关系必须以Maven或Ivy声明其依赖关系的方式声明文物。

定义: 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级别的某些设备生成构建。这有助于根据跨多种类型设备的需求在应用商店中进行产品部署。


参考资料不错

Vogella教程

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

然而,如果你是Android开发的新手,Gradle在99%的情况下是你构建项目的停止。这是一个难以理解的复杂系统,有效地混淆了Android构建过程,并基本上使它对没有经验的开发人员不可用,即为了构建一个简单的入门级Android应用程序,毫无戒心的新手可能需要学习和理解许多他们没有想到的事情,例如:

  • Android APK结构和生态系统
  • androidStudio
  • Java类路径和依赖关系
  • Groovy
  • gradle构建脚本
  • 许多复杂而有趣的技术

所有这些对于Android开发者来说都是有趣和有用的,但它们远非容易,并且存在巨大的进入障碍。我怀疑激发OP问这个问题的是,新手在花了太长时间试图构建一个简单的应用程序并且不断被Gradle挫败后,不可避免地会感到沮丧。所有这些技术都可用的大量高技术留档,反常地加剧了这个问题。同样对于大量的开发需求,Gradle是过度的。

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

它的缺席(如果有的话,请告诉我)是一个入门级、轻量级的IDE,它的功能集减少了,同时简化了构建过程,同时不会模糊它(所以不是Netbean或Eclipse)它可能仍然可以使用Gradle(蚂蚁的问题是什么)。它应该可以轻松生成符合一些常见配置的APK,并使用一个项目结构,如果你决定这样做,该结构可以演变成一个完整的Android Studio项目。

简而言之,Gradle是Android Studio提供的一个工具,用于实现两个重要流程:

  1. 构建我们的项目
  2. 将AndroidManifest.xml、res文件夹和二进制代码打包到一个名为APK的特殊格式的zip文件中

Gradle=Groovy+Cradle

参考:Hans Dockter论坛评论

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

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

搜索结果

来自网络的精选片段

Android|构建。Gradle。

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

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

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

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

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/

简单明了的答案,

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

gradle和android

Gradle是一个开源的构建自动化工具。Gradle支持Android的Java和静态编程语言

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

您可以使用更多低级构建工具,例如javacDX, D8关于我们aapt关于我们、签名工具…

Gradle是更高级的工具,可以在引擎盖下完成所有这些工作。它有下一个优点:

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

[gradle vs gradlew]

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

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

在此输入图片描述

我将以简单的方式用java来解释它。

假设我们有一个简单的hello world项目(HelloWorld.java)。为了运行这个项目,我们需要编译它(HelloWorld.class)。然后我们将在JVM(java虚拟机)中运行它。

编译Java代码

编译代码的过程可以使用JDK(Java开发工具包)完成,它附带javac.exe(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个多个库,这使得手动编译成为一项真正的艰巨工作。为了解决这个问题,我们使用了Built工具,例如GradleMaven(这使得编译过程没有错误,并且可以轻松完成多次)

像Gradle这样的构建工具的其他用途是

  • 测试您的源代码很容易
  • 将您的应用程序打包成格式,以便它可以发布和部署很容易