Android Studio中的Gradle是什么?
Gradle对我来说也有点困惑,对于新的Android开发人员也是如此。 任何人都可以解释Android Studio中的gradle是什么,它的目的是什么? 为什么Android Studio中包含Gradle?
简答
Gradle是一个构build系统。
长答案
在Android Studio之前,您正在使用Eclipse进行开发,而且有机会,您不知道如何在没有Eclipse的情况下构buildAndroid APK。
您可以在命令行上执行此操作,但您必须了解每个工具(dx,aapt)在SDK中的function。 Eclipse通过给我们自己的构build系统从这些低级但重要的基本细节中拯救了我们。
现在,你有没有想过为什么res
文件夹和你的src
文件夹在同一个目录下?
这是构build系统进入图片的地方。 构build系统会自动获取所有源文件( .java
或.xml
),然后应用相应的工具(例如,将java
类文件转换为dex
文件),并将它们分组到一个压缩文件中,即我们敬爱的APK。
这个构build系统使用了一些约定:一个例子是指定包含源文件(在Eclipse中是\src
文件夹)或资源文件(在Eclipse中是\res
文件夹)的目录。
现在,为了使所有这些任务自动化,必须有一个脚本; 你可以在linux中使用shell脚本编写自己的编译系统,或者在windows中编写batch file语法。 得到它了?
Gradle是另一个构build系统 ,它从其他构build系统中获取最佳function并将它们合并为一个。 它是根据缺点而改进的。 这是一个基于JVM的构build系统 ,这意味着你可以用Java编写你自己的脚本,Android Studio使用它。
Gradle的一个很酷的事情是它是一个基于插件的系统 。 这意味着,如果你有自己的编程语言,并且想从源代码中自动完成构build某个包的输出(如JAR for Java),那么你可以用Java或Groovy(或Kotlin,请参阅这里 )编写一个完整的插件,分发给世界其他地方。
为什么Google使用它?
Google看到了市场上最先进的构build系统之一,意识到你可以编写自己的脚本,而不需要学习曲线,也不用学习Groovy或任何其他新语言。 所以他们写了Gradle的Android插件。
您必须在项目中看到build.gradle
文件。 这就是您可以编写脚本来自动执行任务的地方。 您在这些文件中看到的代码是Groovy代码。 如果你写了System.out.println("Hello Gradle!");
那么它将打印在您的控制台上。
你可以在构build脚本中做什么?
一个简单的例子是,在实际的构build过程发生之前,你必须从一个目录复制一些文件到另一个目录。 一个Gradle构build脚本可以做到这一点。
这是Google希望用于Android的新构build工具。 由于它比ant更具有可扩展性和实用性,因此被使用。 这是为了增强开发人员的经验。
您可以在这里查看来自Android开发团队的Xavier Ducrohet在Google I / O上的演讲。
Xavier和Tor Norbye也在Android Studio上进行了另外一次演讲,也是在Google I / O期间 。
1 – Gradle
背景信息。
2 – Gradle
概念。
3 – 初始化阶段。
4 – 初始化阶段(续)
5 – 什么是Gradle
?
6 – configuration阶段。
看到这个链接
Gradle是在Android Studio上运行的构build系统。
在其他语言中,例如:
- Java的 Ant和Maven
- Ruby的 耙子
- C的 AAP
- .NET的 NAnt
- 在Linux中制作
这里是关于什么是Gradle以及如何在android studio中使用它的详细说明。
探索Gradle文件
- 无论何时在Android Studio中创build项目,构build系统都会自动生成所有必需的Gradle构build文件。
Gradle构build文件
-
Gradle构build文件使用特定于域的语言或DSL来定义自定义构build逻辑,并与Android插件Gradle的Android特定元素进行交互。
-
Android Studio项目由一个或多个模块组成,这些模块是可以独立构build,testing和debugging的组件。 每个模块都有自己的构build文件,所以每个Android Studio项目都包含两种Gradle构build文件:
-
顶层构build文件:这是您可以在其中find构成项目的所有模块共有的configuration选项的位置。
-
模块级构build文件:每个模块都有自己的Gradle构build文件,其中包含模块特定的构build设置。 您将花大部分时间来编辑模块级构build文件,而不是您项目的顶级构build文件。
要查看这些build.gradle文件,请打开Android Studio的“项目”面板(通过select“项目”选项卡)并展开“Gradle脚本”文件夹。 Gradle脚本文件夹中的前两项是项目级和模块级Gradle构build文件
顶级的Gradle构build文件
每个Android Studio项目都包含一个顶级的Gradle构build文件。 这个build.gradle文件是出现在Gradle Scripts文件夹中的第一个项目,并且清楚地标记为Project。
大多数情况下,您不需要对此文件进行任何更改,但了解其内容及其在项目中扮演的angular色仍然很有用。
模块级的Gradle构build文件
除了项目级别的Gradle构build文件外,每个模块都有一个自己的Gradle构build文件。 以下是基本的模块级Gradle构build文件的注释版本。
其他Gradle文件
除build.gradle文件外,您的Gradle Scripts文件夹还包含其他一些Gradle文件。 大多数情况下,您不必手动编辑这些文件,因为在对项目进行任何相关更改时,这些文件会自动更新。 但是,了解这些文件在您的项目中扮演的angular色是个好主意。
gradle-wrapper.properties(Gradle版本)
这个文件允许其他人构build你的代码,即使他们的机器上没有安装Gradle。 该文件检查是否安装了正确版本的Gradle,并在必要时下载必要的版本。
settings.gradle
该文件引用组成项目的所有模块。
gradle.properties(项目属性)
该文件包含整个项目的configuration信息。 默认情况下它是空的,但是可以通过将这些属性添加到该文件中来将各种属性应用于您的项目。
local.properties(SDK位置)
这个文件告诉Android Gradle插件它可以在哪里find你的Android SDK安装。
请注意,local.properties包含特定于Android SDK本地安装的信息。 这意味着你不应该在源代码控制下保存这个文件。
欲了解更多详情,请通过 –
阅读: http : //code.tutsplus.com/tutorials/the-ins-and-outs-of-gradle–cms-22978
我从这里得到了对Gradle的清晰的认识。
Gradle是构build程序源代码的一种构build工具 。 所以这是Android Studio的重要组成部分,在开始开发应用程序之前需要安装。
我们不必单独安装它,因为当我们开始第一个项目时,Android Studio会为我们做这件事。
你可以在这里find你需要了解的Gradle的所有信息: Gradle Plugin User Guide
新build筑系统的目标
新build系统的目标是:
- 使代码和资源重用变得容易
- 可以轻松创build多个应用程序的变体,无论是多apk分布还是不同风格的应用程序
- 可以轻松configuration,扩展和自定义构build过程
- 良好的IDE集成
为什么Gradle?
Gradle是一个高级构build系统,也是一个高级构build工具包,允许通过插件创build自定义构build逻辑。
以下是一些使我们selectGradle的function:
- 域特定语言(DSL)来描述和操作构build逻辑
- 构build文件基于Groovy,允许通过DSL混合声明性元素,并使用代码来操作DSL元素来提供自定义逻辑。
- 通过Maven和/或Ivy内置依赖pipe理。
- 非常灵活。 允许使用最佳实践,但不强制自己的做事方式。
- 插件可以公开他们自己的DSL和他们自己的API以供构build文件使用。
- 良好的工具API允许IDE集成
Gradle是一个构build系统 。 构build系统是用来自动化程序编译过程的软件工具。 构build系统有各种forms,用于各种软件构build任务。 而他们的主要目标是高效地创build可执行文件。
另一个相关的术语是构build自动化,它是自动创build软件构build和相关过程的过程,包括:将计算机源代码编译成二进制代码,打包二进制代码以及运行自动化testing。
其他语言几乎没有类似的构build系统(请参阅完整列表):
- Apache Ant和Apache Maven – Java
- sbt(简单构build工具) – Scala(播放框架等)
- AAP – 基于Python的构build工具
- Rake(Apache Builder) – Ruby
- Leiningen为Clojure
定义:: Gradle可以被描述为一个结构化的构build机制,它为开发人员提供了工具和灵活性来pipe理项目的资源,以创buildsmaller in size
构build, targeting specific requirements
configuration的某些设备
基本configuration
-
minimumSdk
-
maximumSdk
-
targettedSdk
-
versionCode
-
versionName
图书馆:: 我们可以添加android库或任何其他第三方库,根据需求容易这是一个单调乏味的任务早些时候。 如果该库不适合现有项目,则会向开发人员显示一个日志,其中人员可以find适当的解决scheme来更改项目,以便可以添加库。 它只是一条依赖关系
生成build筑物品种
将构buildtypes与构build风格相结合以获取构buildvariables的变体
==================== ==================== | BuildTypes | | ProductFlavours | -------------------- ====================== -------------------- | Debug,Production | || || | Paid,Free,Demo,Mock| ==================== || || ==================== || || VV VV ================================================================= | DebugPaid, DebugFree, DebugDemo, DebugMock | | ProductionPaid, ProductionFree, ProductionDemo, ProductionMock | =================================================================
缩小尺寸
Gradle通过从集成库中除去未使用的资源还可以减less生成的构build的大小
pipe理权限
我们可以通过在特定场景中根据需求添加特定权限来为特定版本指定某些权限
为某些设备构build
我们可以pipe理包含特定密度和特定API级别的某些设备的生成构build。 这有助于根据多种设备types的需求在app store中进行产品部署
良好的参考
Vogella教程
冒着被推论的风险,我认为背后是Android Studio / Gradle体验为何如此糟糕的问题。
典型的Clojure经验:
- 下载project.clj中列出的依赖关系的项目。
- Leiningen得到Clojars和Maven的依赖。
- 项目编译。
典型的Android Studio / Gradle体验:
- “导入我的Eclipse项目”。
- 确定项目导入。
- Gradle正在做这件事…等等…等等…等等… Gradle已经结束了。
- 编译…不能编译,因为我不知道什么X是/无法findY库。
我不确定这是否是Gradle的错。 但是“从Eclipse项目导入”看起来很片面。 对于所有Gradle所谓的复杂性和构build系统的优点,Android Studio似乎并没有很好地从Eclipse中导入构build依赖或构build过程。
它不会告诉你何时无法导入完整的依赖关系图。 Android Studio对于如何解决问题没有提供有用的帮助或提示。 它不会告诉你在Eclipse文件夹中可以手动查找的地方。 它不会告诉你哪个库似乎丢失。 或者帮助你searchMaven等等。
在2016年,像Leiningen / Clojars,node的npm,Python的pip,或者Debian apkg(我相信很多其他语言和系统的类似的包pipe理器)都能很好地工作……缺less依赖关系是过去的事情。
除了Android。 Android Studio现在是唯一一个我似乎仍然经历失踪依赖地狱的地方。
我倾向于说这是Google的错。 当他们决定从Eclipse转移到Android Studio / Gradle时,他们打破了Android生态系统(和成千上万的现有Android项目/在线教程),却没有产生强大的转换过程。 在Eclipse中使用它们的项目并不适用于AS(可能是因为这对他们来说是一个痛苦)。 而试图在AS中使用这些项目的人也遇到了同样的问题。
无论如何,如果Gradle是这个超级强大的构build系统,为什么我仍然在sdkpipe理器中pipe理大量的其他依赖项? 为什么不能需要ndk这样的项目在Gradle文件中指定它,以便在需要时自动安装和构build它? 为什么NDK特别? 类似的目标平台? 为什么我在IDE中明确地安装它们,而不仅仅是检查我的项目,并在幕后为我sorting呢?
Gradle是一个先进的构build系统,以及一个先进的构build工具包,允许通过插件创build定制的构build逻辑!
Dsl – 基于groovy的领域特定语言
DAG指导的非循环图
增量构build
可扩展的领域模型Gradle始终是最新的!
在执行任务之前,Gradle会为其任务的input和输出创build一个快照。
如果快照发生了变化或者不存在,Gralde会重新执行这个任务。
清单条目通过DSL可以configuration以下清单条目:
构build变体 – 默认情况下,Android插件会自动设置项目以构build应用程序的debugging版本和发行版本。
Dependencies-
本地依赖:
如果在本地文件系统中有一个模块所依赖的二进制归档文件(如JAR文件),则可以在该模块的构build文件中声明这些依赖项。
远程相关性:
首先必须将存储库添加到列表中,然后必须以Maven或Ivy声明其工件的方式声明依赖项。
我发现的Gradle的一个好处是:
Gradle被devise用于多项目构build,这个构build可以变得非常大,并且通过智能地确定构build树的哪些部分是最新的,从而支持增量构build,从而使得依赖于这些部分的任何任务不需要被重新构build-executed。
Gradle对于Groovy JVM语言来说就是Java的ant。 基本上,这是Groovy的构build工具。 与Ant不同,它基于完整的Groovy语言。 例如,您可以在Gradle脚本中编写Groovy脚本代码来执行某些操作,而不是依赖特定的域语言。
我不知道IntelliJ的具体集成,但是想象一下,你可以“扩展”Groovy,这样你就可以编写特定的“构build”语言原语,而且他们只是成为Groovy语言的一部分。 (Groovy的元编程本身就是一个完整的讨论。)IntelliJ / Google可以使用Gradle来构build一个非常高级的构build语言,但它是一种基于可扩展的开放标准的语言。
Gradle是一个针对Android的高级构build工具包,用于pipe理依赖关系,并允许您定义自定义构build逻辑。 function类似于1.自定义,configuration和扩展构build过程。 2.使用同一个项目为您的应用程序创build多个具有不同function的APK。 3.重用代码和资源。 请参阅此链接http://developer.android.com/sdk/installing/studio-build.html
在Android Studio中,Gradle是一个自定义构build工具,用于通过pipe理依赖关系和提供自定义构build逻辑来构buildandroid包(apk文件)。
APK文件(Android应用程序包)是一个包含特殊格式的zip文件
- 字节码
- 资源(图像,用户界面,XML等)
- 清单文件
一个apk文件被签名并推送到使用ADB(Androiddebugging桥)执行的设备。
Gradle是一个自动化的构build工具包,可以集成到许多不同的环境中,不仅适用于Android项目。
这里有一些你可以用gradle做的事情。
-
新项目需要最less的configuration,因为Gradle为您的android studio项目设置了默认configuration。
-
依赖声明。 您可以声明托pipe在本地或远程服务器中的依赖关系jar文件或库文件。
-
Gradle会自动从您的项目源中生成一个testing目录和一个testingAPK。
-
如果将所有必要的信息(如
keyPassword
和keyAlias
)添加到Gradle构build文件中,则可以使用Gradle生成签名的APK。 -
Gradle可以生成具有不同包的多个APK,并从一个模块构buildconfiguration。
Gradle构build系统旨在支持创buildAndroid应用程序的复杂场景:
多分发 :同一个应用程序必须为多个客户或公司定制
Multi-apk:支持为不同的设备types创build多个apk,同时重用部分代码
Gradle是一个定制的构build工具,用于构buildAPK或称为应用程序包套件。
作者@Brian Gardner:
Gradle是一个用于编程项目的广泛构build工具和依赖pipe理器。 它具有基于Groovy的特定于域的语言。 Gradle还为包括Java,Android和Scala在内的许多types的项目提供了构build约会支持。
Gradle的特点:
- 依赖pipe理
- 使用Gradle中的Ant
- Gradle插件
- Java插件
- Android插件
- 多项目构build