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


当前回答

我认为这背后的问题是为什么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中安装它们,而不是只是检查我的项目,并在幕后为我排序?

其他回答

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

你可以在谷歌I/O这里查看Xavier Ducrohet来自Android开发团队的演讲。

在谷歌I/O期间,Xavier和Tor Norbye也有关于Android Studio的另一场演讲。

格拉德尔 = 时髦 + 摇篮

参考:Hans Dockter论坛评论

当它在Android Studio中被称为“Build”时,这种混淆是不必要的。

在开发社区中,我们喜欢给自己制造麻烦。

作者@Brian Gardner:

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

Gradle的特点:

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

你可以在这里找到你需要知道的关于Gradle的一切: Gradle插件用户指南

新构建系统的目标 新的构建系统的目标是: 使代码和资源易于重用 可以轻松地创建应用程序的多个变体,无论是多apk分发还是不同风格的应用程序 使构建过程易于配置、扩展和自定义 良好的IDE集成 为什么它呢? Gradle是一个高级构建系统,也是一个高级构建 允许通过插件创建自定义构建逻辑的工具包。 下面是一些让我们选择Gradle的特性: 领域特定语言(DSL)来描述和操作构建逻辑 构建文件是基于Groovy的,允许在DSL中混合声明性元素,并使用代码来操作DSL元素 提供自定义逻辑。 通过Maven和/或Ivy内置依赖管理。 非常灵活。允许使用最佳实践,但不强制使用自己的做事方式。 插件可以公开它们自己的DSL和API供构建文件使用。 良好的工具API,允许IDE集成

Gradle和Android

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

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

你可以使用更多的低级构建工具,如javac, DX, D8[About], aapt[About], sign tools…

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

依赖管理器(约) 在Groovy或Kotlin上使用领域特定语言(DSL)来公开当前设置或自定义/扩展构建过程。例如,您可以编写一些任务,并通过任何项目共享它们

[格拉德尔 vs 格拉德卢]