Gradle对我和新的Android开发人员都有点困惑。任何人都可以解释Android Studio中的gradle是什么以及它的目的是什么?为什么Gradle包含在Android Studio中?
Gradle对我和新的Android开发人员都有点困惑。任何人都可以解释Android Studio中的gradle是什么以及它的目的是什么?为什么Gradle包含在Android Studio中?
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看到了市场上最先进的构建系统之一,并意识到您可以编写自己的脚本,几乎没有学习曲线,也无需学习Groovy或任何其他新语言。所以他们为Gradle编写了Android插件。
你一定见过 build.gradle
项目中的文件。在这里,您可以编写脚本来自动执行任务。您在这些文件中看到的代码是Groovy代码。如果你写 System.out.println("Hello Gradle!");
然后它将在您的控制台上打印。
一个简单的例子是,在实际构建过程发生之前,您必须将一些文件从一个目录复制到另一个目录。 Gradle构建脚本可以执行此操作。
这是谷歌想要用于Android的新构建工具。它被使用是因为它比ant更具可扩展性和实用性。它旨在增强开发人员的体验。
您可以在Android开发团队的Xavier Ducrohet上观看演讲 Google I / O. 这里。
还有Xavier和Tor Norbye在Android Studio上的另一场演讲 在Google I / O期间。
这是关于什么的详细解释 Gradle
以及如何在android studio中使用它。
探索Gradle文件
Gradle构建文件
Gradle构建文件使用a Domain Specific Language or DSL
界定
自定义构建逻辑并与Android特定的交互
Gradle的Android插件的元素。
Android Studio项目包含一个或多个模块 您可以独立构建,测试和调试的组件。每 模块有自己的构建文件,所以每个Android Studio项目都有 包含2种Gradle构建文件。
顶级构建文件: 在这里您可以找到所有模块共有的配置选项 你的项目。
模块级构建文件: 每个模块都有自己的Gradle构建文件,其中包含特定于模块的构建设置。你会花最多的钱 你的时间编辑模块级构建文件而不是你的 项目的顶级构建文件。
要查看这些build.gradle文件,请打开Android Studio的“项目”面板(通过选择“项目”选项卡)并展开“Gradle Scripts”文件夹。 Gradle Scripts文件夹中的前两项是项目级和模块级Gradle构建文件
顶级Gradle构建文件
每个Android Studio项目都包含一个顶级Gradle构建文件。这个 build.gradle
file是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本地安装的信息。这意味着您不应将此文件保留在源代码管理下。
我从中清楚地了解了gradle。
Gradle是一种类型 构建工具 构建程序的源代码。因此它是Android Studio的重要组成部分,需要在开始开发应用程序之前进行安装。
我们不必单独安装它,因为当我们制作第一个项目时,Android Studio会为我们执行此操作。
定义:: Gradle可以描述为一种结构化的构建机制,它为开发人员提供了管理项目资源的工具和灵活性,以创建构建 smaller in size
, targeting specific requirements
对于某些配置的某些设备
基本配置
minimumSdk
maximumSdk
targettedSdk
versionCode
versionName
图书馆:: 我们可以根据需要添加android库或任何其他第三方库,这在以前是一项繁琐的工作。如果库不适合现有项目,则会向开发人员显示一个日志,其中该人员可以找到适当的解决方案来更改项目,以便可以添加库。它只有一行依赖
生成建筑物的品种
将构建类型与构建风格相结合,以获得各种构建变量
==================== ====================
| BuildTypes | | ProductFlavours |
-------------------- ====================== --------------------
| Debug,Production | || || | Paid,Free,Demo,Mock|
==================== || || ====================
|| ||
VV VV
=================================================================
| DebugPaid, DebugFree, DebugDemo, DebugMock |
| ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
=================================================================
减少尺寸
Gradle通过从集成库中删除未使用的资源来帮助减少生成的构建的大小
管理许可
我们可以通过在某些方案中根据需求添加某些权限来为某些构建指定某些权限
为某些设备建造
我们可以管理包含某些密度和某些api级别的某些设备的生成构建。这有助于根据多种类型设备的要求在应用商店中进行产品部署
好的参考
您可以在这里找到有关Gradle的所有信息: Gradle插件用户指南
新构建系统的目标
新构建系统的目标是:
- 使重用代码和资源变得容易
- 可以轻松创建应用程序的多个变体,用于多个apk分发或用于应用程序的不同风格
- 使配置,扩展和自定义构建过程变得容易
- 良好的IDE集成
为何选择Gradle?
Gradle是一个高级构建系统以及一个高级构建 工具包允许通过插件创建自定义构建逻辑。
以下是我们选择Gradle的一些功能:
- 用于描述和操作构建逻辑的域特定语言(DSL)
- 构建文件基于Groovy,允许通过DSL混合声明性元素,并使用代码来操作DSL元素 提供自定义逻辑。
- 通过Maven和/或Ivy进行内置依赖管理。
- 非常灵活。允许使用最佳实践,但不强制自己的做事方式。
- 插件可以公开自己的DSL和自己的API,以供构建文件使用。
- Good Tooling API允许IDE集成
Gradle是一个 构建系统。 构建系统 是用于自动化程序编译过程的软件工具。构建系统有各种形式,用于各种软件构建任务。虽然他们的主要目标是有效地创建可执行文件。
另一个相关术语是构建自动化,它是自动创建软件构建和相关过程的过程,包括:将计算机源代码编译成二进制代码,打包二进制代码和运行自动化测试。
其他语言的构建系统很少(参见完整列表 这里):
冒着被话语的风险我认为这背后的问题是为什么Android Studio / Gradle体验如此糟糕。
典型的Clojure体验:
典型的Android Studio / Gradle体验:
我不确定这是Gradle的错。但是“从Eclipse项目导入”似乎非常不稳定。对于Gradle所谓的复杂性和构建系统的优点,Android Studio似乎并没有很好地从Eclipse导入构建依赖项或构建过程。
它没有告诉您何时无法导入完整的依赖关系图。 Android Studio没有提供有关如何解决问题的有用帮助或提示。它不会告诉您可以在Eclipse文件夹中手动查看的位置。它没有告诉你哪个库似乎丢失了。或者帮助您搜索Maven等。
在2016年,像Leiningen / Clojars,或者节点的npm,或者Python的pip,或者Debian apkg(我确信很多类似的其他语言和系统的包管理器)都可以很好地工作......缺少依赖性已成为过去。
除了Android。 Android Studio现在是我似乎仍然遇到缺失依赖地狱的唯一地方。
我倾向于说这是谷歌的错。当他们骑士决定从Eclipse转向Android Studio / Gradle而没有产生强大的转换过程时,他们打破了Android生态系统(以及成千上万的现有Android项目/在线教程)。项目在Eclipse中工作的人不会将他们调整到AS(可能是因为这对他们来说很痛苦)。试图在AS中使用这些项目的人正在遇到同样的问题。
无论如何,如果Gradle是这个超级强大的构建系统,为什么我仍然在sdk管理器中管理很多其他依赖项?为什么不需要ndk的项目在其Gradle文件中指定它,以便在需要时自动安装和构建?为什么NDK特别?同样对于目标平台?为什么我在IDE中显式安装它们而不是仅仅检查我的项目并在幕后为我排序?
Gradle
是一个高级构建系统以及一个高级构建工具包,允许通过插件创建自定义构建逻辑!
优点:
清单条目
通过DSL,可以配置以下内容 清单条目:
构建变体
默认情况下,Android插件会自动将项目设置为 构建应用程序的调试版本和发布版本。
依赖
如果您在本地文件系统中有一个模块的二进制存档 依赖于,例如JAR文件,您可以声明这些依赖项 该模块的构建文件。
首先必须将存储库添加到列表中,然后再添加到列表中 依赖必须以Maven或Ivy声明他们的方式声明 文物。
我发现Gradle的一个优点是:
Gradle专为多项目构建而设计,可以增长到相当大,并通过智能地确定构建树的哪些部分是最新的来支持增量构建,因此任何依赖于这些部分的任务都不需要重新构建-executed。