Android Studio中的Gradle是什么?


1313

Gradle让我有些困惑,对于任何新的android开发人员也是如此。谁能解释Android Studio中的Gradle是什么,它的目的是什么?为什么它包含在Android Studio中?


4
参见gradle.org
2013年

14
要回答为什么要使用诸如Gradle之类的构建工具,请查看Jeff Atwood的这篇文章
亚当S

828
当有人在这里问一个问题,是的,在Google中确实有很多链接时,他们真正要问的是有人用简单的语言回答问题并将其置于上下文中,例如为什么我们需要它,谁会最常使用它,我们是否需要了解它才能在Android Studio中构建Android应用程序等。因为您最常在Google上找到有关它的链接都是“技术演讲”,对于初学者来说,这很令人困惑。
Azurespot 2014年

3
@NoniA。正是我的想法。我还是有些困惑,gradle只是编译我编写的代码的后台进程吗?同样,在查看了许多其他答案之后,他们提到了依赖性。那些是什么?非常感谢!

可以在这里介绍简洁和尼斯的说明。非常有帮助
eRaisedToX

Answers:


1531

简短答案

Gradle是一个构建系统。

长答案

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

您可以在命令行上执行此操作,但是您必须了解SDK中每个工具(dx,aapt)的作用。Eclipse通过提供给我们自己的构建系统,使我们所有人从这些低级但重要的基本细节中解脱出来。

现在,您是否想知道为什么该res文件夹与您的src文件夹位于同一目录中?

这是构建系统输入图片的地方。构建系统会自动获取所有源文件(.java.xml),然后应用适当的工具(例如,获取java类文件并将其转换为dex文件),并将所有文件分组为一个压缩文件,即我们心爱的APK。

该构建系统使用一些约定:一个示例是指定包含源文件(在Eclipse中为\src文件夹)或资源文件(在Eclipse中为\res文件夹)的目录。

现在,为了使所有这些任务自动化,必须有一个脚本。您可以使用Linux中的Shell脚本或Windows中的批处理文件语法编写自己的构建系统。得到它了?

Gradle是另一个构建系统,它吸收了其他构建系统中的最佳功能,并将它们组合为一个。由于它们的缺点而进行了改进。这是一个基于JVM的构建系统,这意味着您可以用Java编写自己的脚本,而Android Studio会利用该脚本。

关于gradle的一件很酷的事情是它是一个基于插件的系统。这意味着,如果您拥有自己的编程语言,并且想要自动化从源代码构建某些软件包(输出类似JAR for Java)的任务,那么您可以使用Java或Groovy(或Kotlin,请参见此处)编写完整的插件,并且分发到世界其他地方。

Google为什么使用它?

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

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

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

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


11
我不得不说Gradle在将AndroidStudio项目从一个位置转移到另一个位置时给了我一些问题。版本不匹配,缺少模块,没什么...这给了我很多时间。我最终重新创建了项目框架,并剪切/粘贴了从旧项目到新项目的代码部分。这在Windows下都适用于源和目标。我现在将其移至基于Linux的实验室下。
jfmessier 2015年

21
我不明白的是,为什么gradle尝试为我制作的每个项目甚至是我想编译的每个项目都连接到Internet
AaA

4
我以为IntelliJ已经知道如何构建Android项目,而无需另一个构建系统。
Arne Evertsson

17
gradle相对于Android Studio预先构建系统的另一个主要优势是依赖管理。以前要在项目中使用Android库,必须下载源代码,将其添加到项目中并与项目一起编译。相反,使用gradle可以在build.gradle中添加一行,然后gradle将从公共存储库中下载已编译的库并将其添加到您的项目中。一些示例:blog.teamtreehouse.com/android-libraries-use-every-project 这也适用于标准Java jar文件,而不是将它们放在lib目录中。
Stan Kurdziel

4
Gradle是一个糟糕的构建系统。在使用Android Studio时,我希望它负责构建。我不明白为什么添加一些类会迫使Gradle在有用之前进行同步。相比之下,使用Visual Studio真是棒极了(甚至X代码)-不需要多余的额外功能。IDE可以构建项目和解决方案,而无需随意修改Android构建过程有时需要的设置或通过更新旧项目来进行设置。Gradle是Android体验中最糟糕的部分。
csmith

162

这是Google希望用于Android的新构建工具。之所以使用它,是因为它比ant更可扩展且更有用。它旨在增强开发人员的体验。

您可以在此处查看Google I / O上Android开发人员团队的Xavier Ducrohet的演讲。

Xavier和Tor Norbye还在Google I / O期间在Android Studio上进行了另一场演讲。


4
我以为IntelliJ已经知道如何构建Android项目,而无需另一个构建系统。
Arne Evertsson

1
那么gradle只是编译我编写的代码的后台进程吗?同样,在查看了许多其他答案之后,他们提到了依赖性。那些是什么?非常感谢Daniel!

2
@ user5562706它不编译代码,但是负责调用确实编译代码的可执行文件。编译代码后,它可以运行另一个任务以将其打包,另一个可以将其复制到您选择的目录中,然后另一个可以将其上传到某个位置的服务器中……这是诸如Gradle之类的任务,或者是任何构建系统,会做。
Michael Berry

63

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

以其他语言为例:


23
当您说Gradle类似于时make,我
才有

3
的PHING PHP
有啥Aleayoub

15
我发现学习一个未知工具的功能以及它在管道中的位置的最快方法之一是在Google中键入该工具的名称和“ vs”。结果通常会显示“ X vs Y”,其中Y是您可能更熟悉的其他工具。
James Kuang

javascript的
webpack

47

这是什么Gradle是什么以及如何在Android Studio中使用的详细说明。

探索Gradle文件

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

Gradle构建文件

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

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

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

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

要查看这些build.gradle文件,请打开Android Studio的“项目”面板(通过选择“项目”选项卡)并展开Gradle Scripts文件夹。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。


1
请注意,不鼓励仅链接的答案,因此,SO答案应该是搜索解决方案的终点(与引用的另一种中途停留相比,随着时间的流逝,它们会变得陈旧)。请考虑在此处添加独立的简介,并保留该链接作为参考。
kleopatra 2015年

30

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

我们不必单独安装它,因为当我们制作第一个项目时,Android Studio会为我们完成安装。


4
构建程序源代码是什么意思?这不是开发人员的工作吗?
committedandroider

这个答案的措词完全错误。Gradle是Android Studio随附的打包工具,因此它需要构建apk。源代码始终由编译器构建,而没有别的。
AutomEng 2015年

然而,从另一个问题来看,如果没有可靠的互联网连接,听起来Gradle无法正常工作,这是否意味着我必须放弃Android Studio,直到问题解决为止?
迈克尔

2
@committedandroider:开发人员的工作是编写源代码,而不是构建源代码。在系统开发中,我们使用“构建”一词来表示将已编译的源代码打包为最终产品程序包可执行文件)的过程
MestreLion,

1
@MestreLion笑,我很困惑当时因为人们使用的关于“建设”编写源代码的项目-我建立了这个聊天服务器,这个程序...
committedandroider

26

定义:: 摇篮可以描述的结构化建设机制它提供了一个开发者工具和灵活性来管理项目,以创建资源建立是smaller in sizetargeting specific requirements对于某些配置的某些设备


基本配置

  1. minimumSdk
  2. maximumSdk
  3. targettedSdk
  4. versionCode
  5. versionName

图书馆:: 我们可以根据要求轻松添加android库或任何其他第三方库,这在早期是一项繁琐的任务。如果该库不适合现有项目,则会向开发人员显示一条日志,在此人可以找到适当的解决方案来对项目进行更改,以便可以添加库。它只是一行依赖


生成的建筑物种类

将构建类型与构建风格相结合,以获取各种构建变体

 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

缩小尺寸

Gradle通过从集成库中删除未使用的资源以及未使用的内容,来帮助减少生成的构建的大小


管理权限

我们可以根据需要在某些方案中添加某些权限,从而为某些构建指定某些权限


某些设备的构建

我们可以管理包含特定密度和特定API水平的特定设备的生成版本。根据多种设备类型的要求,这有助于在应用商店中进行产品部署


良好的参考

Vogella教程


25

您可以在这里找到有关Gradle所需的所有信息: Gradle插件用户指南

新构建系统的目标

新构建系统的目标是:

  • 轻松重用代码和资源
  • 轻松创建应用程序的多个变体,以进行多apk分发或应用程序的不同风格
  • 使配置,扩展和定制构建过程变得容易
  • 良好的IDE集成

为什么要摇篮?

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

以下是让我们选择Gradle的一些功能:

  • 领域特定语言(DSL),用于描述和操纵构建逻辑
  • 构建文件基于Groovy,并允许通过DSL混合声明性元素,并允许使用代码操纵DSL元素以提供自定义逻辑。
  • 通过Maven和/或Ivy内置的依赖项管理。
  • 非常灵活。允许使用最佳做法,但不强迫自己做事。
  • 插件可以公开自己的DSL和自己的API,以供构建文件使用。
  • 良好的工具API,可实现IDE集成

25

我参考两个教程来写答案

Gradle是一种通用的声明式构建工具。这是通用的,因为它可用于构建您希望在构建脚本中实现的几乎所有内容。它是声明性的,因为您不想在构建文件中看到大量的代码,这些代码不可读且难以维护。因此,尽管Gradle提供了约定的概念以及简单的声明式构建,但它也使该工具具有适应性,并且使开发人员可以扩展。它还提供了一种自定义默认行为的简便方法,并提供了不同的挂钩来添加任何第三方功能。

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

为什么要摇篮?为什么现在?

构建工具的响应是通过非标准扩展机制添加脚本功能。您最终将脚本代码与XML混合在一起,或者从构建逻辑中调用外部脚本。不难想象,随着时间的推移,您将需要添加越来越多的自定义代码。结果,您不可避免地会引入意外的复杂性,而可维护性却无法实现。

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

Java构建工具的演变

Java构建逻辑必须用XML描述。XML非常适合描述层次结构数据,但不足以表示程序流和条件逻辑。随着构建脚本变得越来越复杂,维护构建代码成为一场噩梦。

在Ant中,使JAR目标依赖于编译目标。Ant没有提供有关如何构建项目的任何指导。尽管它提供了最大的灵活性,但Ant使得每个构建脚本都是唯一且难以理解的。通常,将项目所需的外部库检入版本控制中,因为没有自动机制可以将它们从中央位置拉出。

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

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配合得很好。

在此处输入图片说明

从构建到部署使项目自动化

在此处输入图片说明

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

  • 编译代码

  • 运行单元和集成测试

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

  • 创建发行版

  • 调配目标环境

  • 部署可交付成果

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

我参考两个教程来写答案


1
除此之外,您还可以在计算机上或未安装Android Studio的计算机(例如持续集成服务器)上通过命令行构建Android应用。
jettimadhuChowdary

23

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

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

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

  1. Apache Ant和Apache Maven-Java
  2. sbt(简单构建工具)-用于Scala(播放框架等)
  3. AAP-基于Python的构建工具
  4. Rake(Apache Builder)-Ruby
  5. 莱宁根为克洛瑞尔

17

冒着话语风险,我认为这是为什么Android Studio / Gradle体验如此糟糕的问题。

典型的Clojure经验:

  • 下载具有project.clj中列出的依赖项的项目。
  • 莱宁根得益于Clojars和Maven的依赖。
  • 项目编译。

典型的Android Studio / Gradle体验:

  • “导入我的Eclipse项目”。
  • 确定项目已导入。
  • Gradle正在执行此操作...等待...等待...等待... Gradle已完成。
  • 编译...无法编译,因为我不知道X是什么/找不到Y库。

我不确定这完全是Gradle的错。但是“从Eclipse项目导入”似乎很不稳定。对于Gradle所谓的复杂性和构建系统的优点,Android Studio似乎并没有很好地从Eclipse导入构建依赖项或构建过程。

它不会告诉您何时无法导入完整的依赖关系图。Android Studio没有提供有关如何解决问题的有用帮助或提示。它不会告诉您可以在哪里手动查找Eclipse文件夹。它不会告诉您似乎缺少哪个库。或者帮助您搜索Maven等。

在2016年,诸如Leiningen / Clojars,node的npm,Python的pip或Debian apkg之类的东西(我相信许多其他语言和系统的类似软件包管理器)都可以正常工作...缺少依赖关系已经成为过去。

Android除外。现在,Android Studio是我似乎仍然会经历失踪依赖地狱的唯一地方。

我倾向于说这是Google的错。当他们明智地决定从Eclipse转移到Android Studio / Gradle而不产生可靠的转换过程时,他们打破了Android生态系统(以及成千上万的现有Android项目/在线教程)。在Eclipse中工作的项目的人没有使他们适应AS(大概是因为这对他们来说很痛苦)。试图在AS中使用这些项目的人们遇到了同样的问题。

而且无论如何,如果Gradle是这个超级强大的构建系统,为什么我仍要在sdk管理器中管理很多其他依赖项?为什么需要ndk的项目不能在其Gradle文件中指定此项目,以便在需要时可以自动安装和构建该项目?NDK为什么特别?同样适用于目标平台吗?为什么我要在IDE中显式安装它们,而不是仅仅检查它们的项目并在幕后为我整理所有这些?


4
我完全同意Gradle是一个糟糕的构建系统。它是使Android Studio比X-Code或Visual Studio更差的组件。我意识到这些必须在幕后“构建”系统,但实际上并不需要我了解/护理/修补他们的内部知识。另一方面,Gradle似乎随Android Studio的每次更新而中断,甚至只是添加一个类也会使系统陷入瘫痪。没有其他IDE可以做到这一点。
csmith

14

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

优点:

  • Dsl-特定于域的语言,基于groovy
  • DAG-有向无环图
  • 增量构建
  • 可扩展领域模型
  • Gradle始终是最新的
  • 在执行任务之前,Gradle对其任务的输入和输出进行快照。
  • 如果快照已更改或不存在,Gralde将重新执行此任务。

清单条目

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

构建变体

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

依存关系

  1. 本地依赖性:

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

  1. 远程依赖关系:

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


13

对于Groovy JVM语言,Gradle对Java来说就是蚂蚁。基本上,它是Groovy的构建工具。与Ant不同,它基于完整的Groovy语言。例如,您可以在Gradle脚本中编写Groovy脚本代码,以执行某些操作,而不是依赖特定的领域语言。

我不知道IntelliJ的特定集成,但是想象一下您可以“扩展” Groovy,以便您可以编写特定的“构建”语言原语,而它们只是成为Groovy语言的一部分。(Groovy的元编程本身是一个完整的讨论。)IntelliJ / Google可以使用Gradle构建非常高级的构建语言,但它是基于可扩展的开放标准的语言。


2
它不是“ Groovys构建工具”-它是一种多用途构建工具,其DSL是在groovy之上构建的
martyglaubitz 2013年

10

Gradle是用于android的高级构建工具包,可管理依赖项并允许您定义自定义构建逻辑。功能就像

  • 自定义,配置和扩展构建过程。

  • 使用同一项目为您的应用创建多个具有不同功能的APK。

  • 重用代码和资源。

参考


9

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

您可以使用Gradle做一些事情。

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

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

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

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

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


8

在Android Studio中,Gradle是一个自定义构建工具,用于通过管理依赖项并提供自定义构建逻辑来构建android程序包(apk文件)。

APK文件(Android应用程序包)是一种特殊格式的zip文件,其中包含

  • 字节码
  • 资源(图像,UI,xml等)
  • 清单文件

一个apk文件被签名并使用执行它的ADB(Android调试桥)推送到设备。



4

通过@Brian Gardner:

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

Gradle的特点:

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

3

Gradle使自动构建复杂的Android项目成为可能,该项目涉及来自多个源,项目,库等的成千上万行代码。它可以根据大量的配置规范有条件地生成多个优化的APK-如果您感兴趣的其他答案将提供有关Gradle这方面的更多详细信息。

但是,如果您不熟悉Android开发,那么在99%的情况下,Gradle就是阻止您的项目进行构建的原因。它是一个难以理解的复杂系统,有效地混淆了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项目的项目结构。


1

简而言之,Gradle是Android Studio提供的工具,用于实现两个重要过程:

  1. 建立我们的项目
  2. 将AndroidManifest.xml,res文件夹和二进制代码打包到称为APK的特殊格式的zip文件中

1

搜索结果网络上的精选摘录Android | 建立。摇篮。Gradle是一个构建系统(开源),用于自动构建,测试,部署等。...例如,在实际构建之前,Gradle构建脚本可以执行将某些文件从一个目录复制到另一个目录的简单任务。过程发生。


1

在Android Studio中,Gradle用于构建我们的android应用程序项目,因此扮演了构建系统的角色。在Android Studio之前,我们在Eclipse中使用命令行工具来编译和构建应用程序,该工具很快就被基于GUI的步骤所接管,以使用ANT在Eclipse中构建和运行Android应用程序。每个android应用程序开发工具都必须编译资源,java源代码,外部库,并将它们组合成最终的APK。

Gradle是一个构建系统,负责代码编译,测试,部署以及将代码转换为.dex文件,从而在设备上运行该应用程序。

由于Android Studio预先安装了Gradle系统,因此无需安装其他运行时软件即可构建我们的项目。每当您单击跑android studio中的按钮时,gradle任务都会自动触发并开始构建项目,并且在gradle完成其任务后,应用程序将开始在AVD或连接的设备中运行。

诸如Gradle之类的构建系统不是编译器,链接器等,但它控制并监督编译,文件链接,运行测试用例的运行,并最终将代码捆绑到适用于Android应用程序的apk文件中。

每个android studio项目都有两个build.gradle文件,一个用于应用程序,另一个用于项目级别(模块级别)的生成文件。

在构建过程中,编译器将获取源代码,资源,外部库JAR文件和AndroidManifest.xml(其中包含有关应用程序的元数据),并将它们转换为.dex(Dalvik可执行文件)文件,其中包括bytecode。该字节码受所有Android设备支持以运行您的应用。然后,APK Manager将.dex文件和所有其他资源组合到单个apk文件中。APK Packager使用相应的调试或发布密钥库签署调试或发布apk

调试 apk通常用于测试目的,或者可以说它仅在开发阶段使用。当您的应用程序具有所需功能并准备好将其发布以供外部使用时,则需要使用发布密钥库签名的Release apk

现在让我们了解一下gradle文件。

setting.gradle setting.gradle(Gradle setting)文件用于指定应用程序中使用的所有模块。

build.gradle(项目级别) 顶级(模块)build.gradle文件是项目级别的构建文件,它定义了项目级别的构建配置。此文件将配置应用于android应用程序项目中的所有模块。

build.gradle(应用程序级别) Application级别的build.gradle文件位于android项目的每个模块中。该文件包括您的软件包名称,如applicationID,版本名称(apk版本),版本代码,特定应用程序模块的最低和目标sdk。当包含外部库(不是jar文件)时,需要在应用程序级别gradle文件中提及它,以将它们作为应用程序的依赖项包含在项目中。

注意:如果某个应用程序是针对各个模块(例如智能手机,平板电脑或电视)开发的,则必须为所有模块创建单独的gradle文件。您甚至可以通过命令行工具启动gradle系统。使用以下命令:

./gradlew构建-(构建项目)
./gradlew clean构建-(构建项目完整的草稿)
./gradlew clean构建-(运行测试)
./gradlew包装器-(查看所有可用任务)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.