and*_*ter 1257 build-automation gradle android-studio android-gradle-plugin
Gradle对我和新的Android开发人员都有点困惑.任何人都可以解释Android Studio中的gradle是什么以及它的目的是什么?为什么Gradle包含在Android Studio中?
Gag*_*ngh 1475
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构建脚本可以执行此操作.
dan*_*c05 157
这是谷歌想要用于Android的新构建工具.它被使用是因为它比ant更具可扩展性和实用性.它旨在增强开发人员的体验.
您可以在此处查看来自Google I/O上的Android开发团队的Xavier Ducrohet的演讲.
Xavier和Tor Norbye在Android Studio上还有另一个关于Google I/O的讨论.
iti*_*skj 59
Gradle是在Android Studio上运行的构建系统.
在其他语言中,例如:
Par*_*r C 42
以下是有关Gradle在Android Studio中使用它的内容和方法的详细说明.
探索Gradle文件
Gradle构建文件
Gradle构建文件使用a Domain Specific Language or DSL来定义自定义构建逻辑,并与Gradle的Android插件的Android特定元素进行交互.
Android Studio项目包含一个或多个模块,这些模块是您可以独立构建,测试和调试的组件.每个模块都有自己的构建文件,因此每个Android Studio项目都包含两种Gradle构建文件.
顶级构建文件:您可以在此处找到构成项目的所有模块共有的配置选项.
模块级构建文件:每个模块都有自己的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本地安装的信息.这意味着您不应将此文件保留在源代码管理下.
我从中清楚地了解了gradle.
小智 28
Gradle是一种构建程序源代码的构建工具.因此它是Android Studio的重要组成部分,需要在开始开发应用程序之前进行安装.
我们不必单独安装它,因为当我们制作第一个项目时,Android Studio会为我们执行此操作.
Mah*_*idi 23
您可以在此处找到有关Gradle的所有信息: Gradle Plugin用户指南
新构建系统的目标
新构建系统的目标是:
- 使重用代码和资源变得容易
- 可以轻松创建应用程序的多个变体,用于多个apk分发或用于应用程序的不同风格
- 使配置,扩展和自定义构建过程变得容易
- 良好的IDE集成
为何选择Gradle?
Gradle是一个高级构建系统以及一个高级构建工具包,允许通过插件创建自定义构建逻辑.
以下是我们选择Gradle的一些功能:
- 用于描述和操作构建逻辑的域特定语言(DSL)
- 构建文件基于Groovy,允许通过DSL混合声明性元素,并使用代码来操纵DSL元素以提供自定义逻辑.
- 通过Maven和/或Ivy进行内置依赖管理.
- 非常灵活.允许使用最佳实践,但不强制自己的做事方式.
- 插件可以公开他们自己的DSL和他们自己的API以供构建文件使用.
- Good Tooling API允许IDE集成
Dev*_*ath 23
DEFINITION :: Gradle可以描述为一种结构化的构建机制,它为开发人员提供了管理项目资源的工具和灵活性smaller in size,targeting specific requirements以便为某些配置的某些设备创建构建
基本配置
minimumSdk maximumSdk targettedSdk versionCode versionNameLIBRARIES :: 我们可以根据需要添加android库或任何其他第三方库,这在以前是一项繁琐的工作.如果库不适合现有项目,则会向开发人员显示一个日志,其中该人员可以找到适当的解决方案来对项目进行更改,以便可以添加库.它只有一行依赖
生成建筑物的品种
将构建类型与构建风格相结合,以获得各种构建变量
==================== ====================
| BuildTypes | | ProductFlavours |
-------------------- ====================== --------------------
| Debug,Production | || || | Paid,Free,Demo,Mock|
==================== || || ====================
|| ||
VV VV
=================================================================
| DebugPaid, DebugFree, DebugDemo, DebugMock |
| ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
=================================================================
Run Code Online (Sandbox Code Playgroud)
减少尺寸
Gradle通过从集成库中删除未使用的资源来帮助减少生成的构建的大小
管理许可
我们可以通过在某些场景中根据需求添加某些权限来为某些版本指定某些权限
为某些设备建造
我们可以管理包含某些密度和某些api级别的某些设备的生成构建.这有助于根据多种类型设备的要求在应用商店中进行产品部署
好的参考
小智 22
Gradle是一个构建系统.构建系统是用于自动化程序编译过程的软件工具.构建系统有各种形式,用于各种软件构建任务.虽然他们的主要目标是有效地创建可执行文件.
另一个相关术语是构建自动化,它是自动创建软件构建和相关过程的过程,包括:将计算机源代码编译成二进制代码,打包二进制代码和运行自动化测试.
其他语言的类似构建系统很少(请参阅此处的完整列表):
Far*_*ana 22
Gradle是一个通用的声明性构建工具.它是通用的,因为它可以用于构建您在构建脚本中实现的几乎任何东西.它是声明性的,因为您不希望在构建文件中看到大量代码,这些代码不可读且不易维护.因此,虽然Gradle提供了约定的概念和简单的声明性构建,但它也使该工具具有适应性,并使开发人员能够扩展.它还提供了一种简单的方法来自定义默认行为和不同的挂钩以添加任何第三方功能.
Gradle结合了两种工具的优点,并提供了其他功能,并将Groovy用作域特定语言(DSL).它具有Ant工具的强大功能和灵活性,具有Maven功能,例如构建生命周期和易用性.
为何选择Gradle?为什么现在?
构建工具的响应是通过非标准扩展机制添加脚本功能.您最终将脚本代码与XML混合或从构建逻辑调用外部脚本.很容易想象您需要随着时间的推移添加越来越多的自定义代码.因此,您不可避免地会引入意外的复杂性,并且可维护性会消失.
假设您要在构建项目的发布版本时将文件复制到特定位置.要识别版本,请检查描述项目的元数据中的字符串.如果它匹配特定的编号方案(例如,1.0-RELEASE),则将文件从A点复制到B点.从外部角度来看,这听起来像是一项简单的任务.如果你必须依赖XML,那么表达这种简单逻辑的许多传统工具的构建语言变得相当困难.
Java构建工具的演变
必须用XML描述Java构建逻辑.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相得益彰,如下图所示.
使您的项目从构建自动化到部署
在图像中:部署管道的阶段.
编译代码
运行单元和集成测试
执行静态代码分析并生成测试覆盖率
创建分发
供应目标环境
部署可交付成果
进行烟雾和自动功能测试
int*_*tar 16
冒着被话语的风险我认为这背后的问题是为什么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中显式安装它们而不是仅仅检查我的项目并在幕后为我排序?
小智 13
Gradle 是一个高级构建系统以及一个高级构建工具包,允许通过插件创建自定义构建逻辑!
好处:
清单条目
通过DSL,可以配置以下清单条目:
构建变体
默认情况下,Android插件会自动设置项目以构建应用程序的调试版本和发布版本.
依赖
如果您的本地文件系统中存在模块所依赖的二进制存档(例如JAR文件),则可以在该模块的构建文件中声明这些依赖关系.
首先必须将存储库添加到列表中,然后必须以Maven或Ivy声明其工件的方式声明依赖项.
use*_*123 12
Gradle是Groovy JVM语言的Java是什么.基本上,它是Groovy的构建工具.与Ant不同,它基于完整的Groovy语言.例如,您可以在Gradle脚本中编写Groovy脚本代码来执行某些操作,而不是依赖于特定的域语言.
我不知道IntelliJ的特定集成,但想象你可以"扩展"Groovy,这样你就可以编写特定的"构建"语言原语,它们只是成为Groovy语言的一部分.(Groovy的元编程本身就是一个完整的讨论.)IntelliJ/Google可以使用Gradle构建一个非常高级的构建语言,然而,它是一种基于可扩展的开放标准的语言.
Gradle是一个自动构建工具包,可以集成到许多不同的环境中,不仅适用于Android项目.
这里有一些你可以用gradle做的事情.
新项目需要最小配置,因为Gradle具有android studio项目的默认配置.
依赖声明.您可以声明托管在本地或远程服务器中的依赖项jar文件或库文件.
Gradle自动从项目源生成测试目录和测试APK.
如果您将所有必要信息(例如keyPassword和keyAlias)添加到Gradle构建文件中,则可以使用Gradle生成已签名的APK.
Gradle可以从单个模块生成具有不同包和构建配置的多个APK.
在Android Studio中,Gradle是一个自定义构建工具,用于通过管理依赖项和提供自定义构建逻辑来构建android包(apk文件).
APK文件(Android应用程序包)是一个特殊格式的zip文件,其中包含
一个apk文件被签名并使用ADB(Android Debug Bridge)推送到设备,在那里它被执行.
经过 @布莱恩·加德纳:
Gradle 是一个用于编程项目的广泛构建工具和依赖项管理器。它具有基于 Groovy 的特定领域语言。Gradle 还为多种类型的项目(包括 Java、Android 和 Scala)提供按约定构建支持。
Gradle的特点:
Gradle 使自动化构建复杂的 Android 项目成为可能,这些项目涉及来自多个源、项目、库等的数十万行代码。它可以根据大量配置规范有条件地生成多个优化的 APK - 如果您感兴趣,其他答案提供了 Gradle 这方面的更多细节。
但是,如果您是 Android 开发的新手,Gradle 在 99% 的情况下会阻止您的项目构建。它是一个高深莫测的复杂系统,它有效地混淆了 Android 构建过程,并且基本上使没有经验的开发人员无法使用它,即为了构建一个简单的入门级 Android 应用程序,毫无戒心的新手可能需要研究和理解许多他们没有的东西”讨价还价,例如:
所有这些对于 Android 开发人员来说都很有趣且有用,但它们远非易事,并且存在巨大的进入障碍。我怀疑是什么激发了 OP 提出这个问题,是新手开发人员在花费太长时间试图构建一个简单的应用程序并不断被 Gradle 阻挠之后不可避免地打击了新手开发人员的挫败感。可用于所有这些技术的大量高技术文档反而加剧了这个问题。同样对于大量的开发需求,Gradle 是矫枉过正的。
另一种方法是编写一个 shell 脚本,通过自动化 Android SDK 中可用的工具来构建您的项目。这种方法的优点有很多,对于初学者来说,它可能是研究和理解构建过程和 Android 生态系统的最佳方式,它允许您完全控制您的应用程序的构建方式。然而,这种方法更适合深不可测的技术负责人,而不是尝试 android 的没有经验的新手。
它缺席的显着之处(如果有这样的东西,请通知我)是一个入门级的轻量级 IDE,它具有减少的功能集,同时简化了构建过程,同时又不掩盖它(所以不是 Netbeans 或 Eclipse)它可能仍然使用 Gradle(Ant 有什么问题)。如果您决定采用这种方式,它应该可以轻松生成符合一些常见配置的 APK,并使用可以演变为完整 Android Studio 项目的项目结构。
| 归档时间: |
|
| 查看次数: |
405310 次 |
| 最近记录: |