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


当前回答

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

例如,在其他语言中:

Java的Ant和Maven 红宝石的耙子 A-A-P of C .NET的NAnt 在Linux中制作

其他回答

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

探索Gradle文件

当你在Android Studio中创建一个项目时,build系统 自动生成所有必要的Gradle构建文件。

Gradle构建文件

Gradle构建文件使用领域特定语言或DSL进行定义 自定义构建逻辑和与android特定的交互 Gradle的Android插件元素。 Android Studio项目由一个或多个模块组成,这些模块是可以独立构建、测试和调试的组件。每个模块都有自己的构建文件,因此每个Android Studio项目都包含两种Gradle构建文件。 顶级构建文件:在这里您可以找到组成项目的所有模块的通用配置选项。 模块级构建文件:每个模块都有自己的Gradle构建文件,其中包含模块特定的构建设置。您将花费大部分时间编辑模块级构建文件,而不是项目的顶级构建文件。

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

顶级Gradle构建文件

每个Android Studio项目都包含一个单一的顶级Gradle构建文件。这个构建。gradle文件是出现在gradle Scripts文件夹中的第一个项目,并且清楚地标记为项目。

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

模块级Gradle构建文件

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

其他Gradle文件

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

gradle-wrapper。属性(Gradle版本)

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

settings.gradle

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

gradle。物业(项目物业)

该文件包含整个项目的配置信息。 默认情况下为空,但可以对其应用广泛的属性 通过将它们添加到此文件来创建项目。

当地。属性(SDK Location)

这个文件告诉Android Gradle插件在哪里可以找到你的Android SDK安装。

注意:当地。属性包含特定于Android SDK本地安装的信息。这意味着您不应该将该文件置于源代码控制之下。

建议阅读- Tutsplus教程

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

简短的回答

Gradle是一个构建系统。

长回答

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

您可以在命令行上完成此操作,但必须了解每个工具(dx和AAPT)在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,见这里)编写一个完整的插件,并将其分发到世界各地。

谷歌为什么使用它?

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

你一定见过那建筑。项目中的Gradle或build.gradle.kts文件。在这里您可以编写脚本来自动化您的任务。您在这些文件中看到的代码是Groovy或Kotlin代码。如果你写System.out。println(“你好Gradle !”);然后它会打印在你的控制台上。

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

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

作者@Brian Gardner:

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

Gradle的特点:

依赖关系管理 从Gradle中使用Ant Gradle插件 Java插件 Android插件 多项目构建

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

我认为这背后的问题是为什么Android Studio / Gradle的体验如此糟糕。

典型的Clojure体验:

下载project.clj中列出的依赖项。 Leiningen通过Clojars和Maven获得依赖关系。 项目编译。

典型的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中安装它们,而不是只是检查我的项目,并在幕后为我排序?