android - work - buildtypes




什么是Android Studio中的Gradle? (18)

Gradle对我来说有点困惑,对于新的Android开发人员也有点困惑。 任何人都可以解释Android Studio中的gradle是什么以及它的目的是什么? 为什么Android Studio中包含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的构建系统 ,这意味着您可以使用Java Studio编写自己的脚本,Android Studio使用该脚本。

Gradle的一个很酷的事情是它是一个基于插件的系统 。 这意味着如果你有自己的编程语言,并且想从源代码中自动完成构建一些包的输出(像Java的JAR那样的输出),那么你可以用Java或者Groovy(或者Kotlin,见here )编写一个完整的插件,分发给世界其他地方。

为什么Google使用它?

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

您必须在项目中看到build.gradle文件。 这就是您可以编写脚本来自动执行任务的地方。 您在这些文件中看到的代码是Groovy代码。 如果你写了System.out.println("Hello Gradle!"); 那么它将在您的控制台上打印。

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

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


1 - Gradle背景信息。

2 - Gradle概念。

3 - 初始化阶段。

4 - 初始化阶段(续)。

5 - 什么是Gradle

6 - 配置阶段。

看到这个LINK


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

我们不必单独安装它,因为当我们开始第一个项目时,Android Studio会为我们做这件事。


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

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

几乎没有类似的其他语言的构建系统(请参阅完整列表):

  1. Apache Ant和Apache Maven - Java
  2. sbt(Simple Build Tool) - 适用于Scala(Play框架等)
  3. AAP - 基于Python的构建工具
  4. Rake(Apache Builder) - Ruby
  5. Leiningen为Clojure

Gradle是一个用于管理依赖关系的高级构建工具包,允许您定义自定义构建逻辑。 功能类似于1.自定义,配置和扩展构建过程。 2.使用同一个项目为您的应用程序创建多个具有不同功能的APK。 3.重用代码和资源。 请参阅此链接http://developer.android.com/sdk/installing/studio-build.html


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

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

  • 新项目需要最少的配置,因为Gradle为您的android studio项目提供了默认配置。

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

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

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

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


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

但是,如果你是Android开发新手,Gradle在99%的情况下阻止了你的项目建设。 这是一个高深莫测的复杂系统,它有效地混淆了Android的构建过程,并且基本上使其无经验的开发人员无法使用,即为了构建简单的入门级Android应用程序,毫无疑问的新手可能需要研究和理解许多他们没有讨价还价的事情如:

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

所有这些对Android开发人员来说都很有意思,并且非常有用,但它们并不容易,并且给进入带来了巨大的障碍。 我怀疑是什么启发了OP来问这个问题,是因为花了太长时间试图获得一个简单的应用程序来构建并不断受到Gradle的阻挠之后,不可避免地碰到了新手开发人员的挫败感。 这个问题由于所有这些技术可用的大量高度技术文档而反过来加剧。 同样对于大量的开发需求,Gradle也是过分的。

另一种方法是编写一个shell脚本,通过自动化android SDK中提供的工具来构建您的项目。 这种方法的优点很多,对于初学者来说,它可能是研究和理解构建过程和Android生态系统的最佳方式,它可以让您完全控制应用程序的构建方式。 然而,这种方法更适合深度不可兑换的技术人员,而不适合尝试使用android的无经验的新手。

什么是显而易见的(请告诉我是否有这样的事情)是一个入门级的轻量级IDE,具有减少的功能集,同时简化了构建过程,但不会遮蔽它(所以不是netbeans或eclipse),它可能仍然可能使用Gradle(Ant有什么问题)。 它应该能够轻松生成符合几个常见配置的APK,并且可以使用可以演变为完整的Android Studio项目的项目结构,只要您决定采取这种方式即可。


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

优点:

  • Dsl - 基于groovy的领域特定语言
  • DAG - 导向无循环图
  • 增量构建
  • 可扩展域模型
  • Gradle总是最新的
  • 在执行任务之前,Gradle会为其任务的输入和输出创建一个快照。
  • 如果快照发生了变化或者不存在,Gralde将重新执行此任务。

清单条目

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

构建变体

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

依赖

  1. 本地依赖性:

如果您的本地文件系统中具有模块依赖的二进制归档文件,例如JAR文件,则可以在该模块的构建文件中声明这些依赖项。

  1. 远程相关性:

首先,必须将存储库添加到列表中,然后必须以Maven或Ivy声明其工件的方式声明依赖项。


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

在其他语言中,例如:


我提到两个教程来编写答案 two

Gradel是一个通用的声明性构建工具。 它是通用的,因为它可以用来构建几乎所有你在构建脚本中实现的东西。 这是声明式的,因为你不想在构建文件中看到很多代码,这些代码不可读和维护性较差。 因此,虽然Gradle提供了约定和简单的声明式构建的思想,但它也使得该工具具有适应性,开发人员能够进行扩展。 它还提供了一种简单的方法来定制默认行为和不同的挂钩来添加任何第三方功能。

Gradle结合了这两种工具的优点,并提供了附加功能,并将Groovy用作域特定语言(DSL)。 它具有Maven功能的强大功能和灵活性,例如构建生命周期和易用性。

为什么选择Gradle? 为什么现在?

构建工具的响应是通过非标准扩展机制添加脚本功能。 您最终将脚本代码与XML混合或从构建逻辑调用外部脚本。 很容易想象,您需要随着时间的推移添加越来越多的自定义代码。 因此,您不可避免地会引入意外的复杂性,并且可维护性也会出现在窗口之外。

假设您要在构建项目的发布版本时将文件复制到特定位置。 要识别版本,请在描述项目的元数据中检查字符串。 如果它匹配特定的编号方案(例如1.0-RELEASE),则将文件从A点复制到B点。从外部角度来看,这听起来像是一件小事。 如果你不得不依赖于XML,许多传统工具的构建语言表达这种简单的逻辑变得相当困难。

Java构建工具的演变

Java构建逻辑必须用XML来描述。 XML很适合描述分层数据,但是在表达程序流和条件逻辑方面却不足。 随着构建脚本的复杂性增长,维护构建代码变成了一场噩梦。

在Ant中 ,您使JAR目标取决于编译目标。 Ant没有给出关于如何构建项目的指导。 尽管它允许最大的灵活性,但Ant使每个构建脚本都是独特且难以理解的。 通常您的项目所需的外部库被检入到版本控制中,因为没有自动机制将它们从中央位置拉出。

Maven 1于2004年7月发布,试图缓解这一过程。 它提供了一个标准化的项目和目录结构,以及依赖管理。 不幸的是,定制逻辑很难实现

Gradle正好适合那一代构建工具,满足现代构建工具的许多要求(图1)。 它提供了一个富有表现力的DSL,一个关于配置方法的约定和强大的依赖管理。 它放弃XML并引入动态语言Groovy来定义构建逻辑是正确的举措。 听起来很有吸引力,不是吗?

Gradle结合了其他构建工具的最佳功能。

Gradle的强大功能集

为什么使用Gradle而不是Ant或Maven构建Java项目?

Android的默认构建工具(以及JVM上构建工具的新星)旨在简化复杂的多语言构建的脚本编写。 如果你使用Ant或Maven,你应该改变它吗?

在构建脚本中解锁Gradle的强大功能的关键在于发现和应用其领域模型,如下图所示。

Gradle无法知道特定于您的企业版本的所有需求。 通过将生命周期中的钩子暴露出来,Gradle允许监视和配置构建脚本的执行行为。

Gradle通过暴露在Groovy中实现的DSL来为其模型建立词汇表。 在处理复杂的问题领域时,在这种情况下,构建软件的任务,能够使用通用语言来表达您的逻辑可能是一个强大的工具。

另一个例子是你可以表达依赖到外部库的方式,这是构建工具解决的一个非常常见的问题。 开箱即用的Gradle为您的构建脚本提供了两个配置块,允许您定义要从中检索它们的依赖项和存储库。 如果标准DSL元素不适合您的需求,您甚至可以通过Gradle的扩展机制引入自己的词汇。

与其他构建工具集成

如下图所示,Gradle与其前任的Ant,Maven和Ivy很好地搭配。

从构建到部署实现项目自动化

在图像中:部署管道的阶段。

  • 编译代码

  • 运行单元和集成测试

  • 执行静态代码分析并生成测试覆盖率

  • 创建分配

  • 配置目标环境

  • 部署可交付物

  • 执行烟雾和自动功能测试

我提到两个教程来编写答案 two


Gradle is an automated build toolkit that allows the way in which projects are built to be configured and managed through a set of build configuration files. This includes defining how a project is to be built, what dependencies need to be fulfilled for the project to build successfully and what the end result (or results) of the build process should be. The strength of Gradle lies in the flexibility that it provides to the developer. The Gradle system is a self-contained, command-line based environment that can be integrated into other environments through the use of plug-ins. In the case of Android Studio, Gradle integration is provided through the appropriately named Android Studio Plug-in.


Gradle is an automated build toolkit that allows the way in which projects are built to be configured and managed through a set of build configuration files. This includes defining how a project is to be built, what dependencies need to be fulfilled for the project to build successfully and what the end result (or results) of the build process should be. The strength of Gradle lies in the flexibility that it provides to the developer. The Gradle system is a self-contained, command-line based environment that can be integrated into other environments through the use of plug-ins. In the case of Android Studio, Gradle integration is provided through the appropriately named Android Studio Plug-in.

虽然Android Studio插件允许在Android Studio中启动和管理Gradle任务,但Gradle命令行包装仍可用于构建基于Android Studio的项目,包括未安装Android Studio的系统。

构建项目的配置规则在基于Groovy编程语言的Gradle构建文件和脚本中声明。


作者@Brian Gardner:

Gradle是编程项目的扩展构建工具和依赖管理器。 它具有基于Groovy的特定于域的语言。 Gradle还为包括Java,Android和Scala在内的许多类型的项目提供了构建约会支持。

Gradle特性:

  1. 依赖管理
  2. 使用Gradle中的Ant
  3. Gradle插件
  4. Java插件
  5. Android插件
  6. 多项目构建

你可以在这里找到你需要了解的关于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文件

  • 字节码
  • 资源(图像,用户界面,XML等)
  • 清单文件

使用ADB(Android调试桥)将apk文件签名并推送到设备,然后执行该文件。


我发现的Gradle的一个优点是:

Gradle专为多项目构建而设计,它可以变得非常大,并且通过智能地确定构建树的哪些部分是最新的来支持增量构建,以便依赖于这些部分的任何任务不需要重新构建-executed。


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

您可以在这里查看来自Android开发团队的Xavier Ducrohet在Google I / O上的演讲。

Xavier和Tor Norbye也在Android Studio上进行了另一场演讲,同样在Google I / O期间


这里是关于什么是Gradle以及如何在android studio中使用它的详细解释。

探索Gradle文件

  1. 无论何时在Android Studio中创建项目,构建系统都会自动生成所有必需的Gradle构建文件。

Gradle构建文件

  1. Gradle构建文件使用Domain Specific Language or DSLDomain Specific Language or DSL来定义自定义构建逻辑,并与Gradle的Android插件的Android特定元素进行交互。

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

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

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

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

顶级的Gradle构建文件

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

大多数情况下,您不需要对此文件进行任何更改,但了解其内容及其在项目中扮演的角色仍然很有用。

模块级的Gradle构建文件

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

其他Gradle文件

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

gradle-wrapper.properties(Gradle版本)

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

settings.gradle

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

gradle.properties(项目属性)

该文件包含整个项目的配置信息。 默认情况下它是空的,但是您可以通过将它们添加到此文件中来将各种各样的属性应用于您的项目。

local.properties(SDK位置)

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

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

建议阅读 - Tutsplus教程

我从此清楚了解了gradle。





build-automation