问题


Stack Overflow上的提问

看上去这个问题关注的人还挺多的:

作为安卓开发的萌新,对Gradle表示confuse。

在as中,gradle是什么,存在的目的是什么。为什么将它包含在as里面?

回答


简单说Gradle就是一个构建系统。

详细说来:

在没有AS,我们使用Eclipse进行Android开发的时候;我想并且很有可能,如果没有Eclipse,你压根不知道如何去构建你的APK。

我来告诉你,没有Eclipse如何构建APK。

方法之一就是通过命令行。不过,想要使用命令行构建APK,首先你要清楚sdk中各个工具(如dx,aapt)是如何工作的。我想你不愿意这样辛苦吧。感谢Eclipse,它为我们完成了这些,重要又基础的细节。我们只要使用它那简单的构建系统,而不需要自己去敲复杂、繁琐的命令行。

Eclipse的android构建系统,使用一些约定俗成的东西。例如:\src文件夹存放源代码,\res文件夹存放资源文件。

这种构建系统会将src文件夹下的.java或.xml文件编译成.class文件,接着转为dex文件,然后将它们打包成,亲爱的APK。

相比于其他构建系统,Gradle是取其精华去其糟粕的集大成者。

它是基于JVM的构建系统,这意味着,你可以通过java写出来你自己的脚本。

另外,他还是基于插件的构建系统。意味着,你可以通过java,Groovy甚至是kotlin来编写你自己的插件。然后将这个插件贡献给全世界。


谷歌为什么选择Gradle

从市场上选择一个最高级的并且,你可以编写自己的脚本,没有任何的学习曲线。不需要学习Groovy,或其他任何一门新的语言。所以他们为Gradle编写了Android plugin。

就是你们天天写的这个:

apply plugin:'com.android.application'

如果你把这个注释了,下面又写了android {}

那么报错Error:(10, 0) Extension with name 'android' does not exist. Currently registered extension names: [ext, kotlin]Open File

AS 项目自动生成的build.gradle中的配置信息是用Groovy 写的。如果你在里面写System.out.println("Hello Gradle!");他会在控制台输出信息。

总结:Gradle是一个基于jvm,基于插件的构建系统。

build.gradle文件内容写的都是默认groovy编写的构建脚本。

google为它的android编写了com.android.application插件。以至于我们能够android {}

这里还有kotlin的插件

applyplugin:'kotlin-android'
applyplugin:'kotlin-android-extensions'