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


当前回答

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

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

其他语言的类似构建系统如下(见完整列表):

Apache Ant和Apache Maven - Java sbt -用于Scala (Play框架等) 基于python的构建工具 Rake (Apache Builder) - Ruby Leiningen for Clojure

其他回答

格拉德尔 = 时髦 + 摇篮

参考:Hans Dockter论坛评论

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

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

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

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

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

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

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

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

所有这些对Android开发者来说都是有趣和有用的,但它们并不简单,而且是一个巨大的入门障碍。我怀疑,促使OP提出这个问题的原因是,在花了太长时间试图构建一个简单的应用程序,却不断受到Gradle的阻挠后,新手开发者不可避免地会感到沮丧。所有这些技术都有大量的高技术性文档,这反而加剧了这个问题。同样,对于大量的开发需求,Gradle是多余的。

另一种选择是编写一个shell脚本,通过自动化Android SDK中可用的工具来构建项目。这种方法的优点有很多,对于初学者来说,这可能是学习和理解构建过程和Android生态系统的最佳方法,它允许你完全控制应用的构建方式。然而,这种方法更适合那些无可救药的技术迷,而不是那些没有经验的新手。

值得注意的是(如果有的话请告诉我),它是一个入门级的轻量级IDE,具有较少的功能集,同时简化了构建过程,而不模糊它(所以不是Netbeans或Eclipse),它可能仍然使用Gradle (Ant的问题是什么)。它可以很容易地生成符合一些常见配置的apk,并使用一个可以演变为完整的Android Studio项目的项目结构,如果你决定这样做的话。

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