简介的概述:
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。
以上来自百度百科知识,对于我们来说只要知道他是一个自动构建工具和依赖管理工具就行了。
她的特点:
◉一个像 Ant 一样的灵活的构建工具
◉一种可切换的, 像 maven 一样的基于合约构建的框架
◉支持强大的多工程构建
◉支持强大的依赖管理(基于 ApacheIvy )
◉支持已有的 maven 和 ivy 仓库
◉支持传递性依赖管理, 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
◉优先支持 Ant 式的任务和构建
◉基于 groovy 的构建脚本
◉有丰富的领域模型来描述你的构建
让我们看看她提供了哪些服务:
1.一种可切换的,像maven一样的基于约定的构建框架,却又从不锁住你(约定优于配置)
2. 强大的支持多工程的构建
3. 强大的依赖管理(基于Apache Ivy),提供最大的便利去构建你的工程
4. 全力支持已有的Maven或者Ivy仓库基础建设
5. 支持传递性依赖管理,在不需要远程仓库和pom.xml和ivy配置文件的前提下
6 基于groovy脚本构建,其build脚本使用groovy语言编写
7 具有广泛的领域模型支持你的构建
使用方法:
1、新建环境变量 GRADLE_HOME,即 D:\usr\local\gradle-2.4;
2、修改环境变量 Path,即追加 %GRADLE_HOME%\BIN;
3、输入快捷键 WIN+ R,输入 cmd,在弹出的窗口输入命令行: gradle -v;
1、创建工程所在目录,本经验创建于 c:\gdemo;
创建空白的 build.gradle 文件,并打开;
2、在第一行输入 apply plugin: ‘java’,并执行命令:gradle build。
就可以执行Task任务了;
在android项目中优化的配置:
1.国内可能有些库下载的慢或者请求超时。
那么我们可以配置国内提供的一些仓库,比如aliyun的。
maven {url 'https://plugins.gradle.org/m2/' }
maven {url 'http://maven.aliyun.com/nexus/content/repositories/google' }
maven {url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven {url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven {url "https://raw.githubusercontent.com/HyphenateInc/Hyphenate-SDK-Android/master/repository" }
如下,我们可以这样配置:
2. 如果项目中有多个model,有引用同一个版本号仓库,和同一个版本号的编译管理器,那么我们可以配置一个全局的版本号。
如下:
3. 如果想知道build后,执行task任务执行到哪里了,可以用打印日志形式:
想监听具体的task让任务,可以看这里 链接
4. 可以控制项目日志输出状态(发布时需要关闭):
// 控制日志Log 输出打印
buildConfigField("boolean", "enableLog", "true")
如下:
项目中就判断BuildConfig.enableLog 这个静态变量是否为true;
5.dependencies依赖管理:
我们可以看到现在有上面的scope几种情况;
api:是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中,是从repository(默认是jCenter())里下载一个依赖包进行编译并打包。相当于以前的Compile
implementation:这个编译结果和上面一样,都是最终编译打包到项目中,唯一一点区别就是这个model的dependencies下应用的是私有的,也就是说,当其他的model引用当前的项目,那么dependencies中共同的还要自己引用一下,但google比较推荐这种引用,优先使用implementation,不行了再使用API的scope状态。
CompileOnly:CompileOnly是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk,是提供给那些只编译不打包场景的命令。就是我在编译的时候对某一个jar文件有依赖,但是最终打包apk文件时,我不想把这个jar文件放进去,可以用这个命令。
RuntimeOnly:只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错。
Test implementation:仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。
Debug implementation:仅仅针对debug模式的编译和最终的debug apk打包。
Release implementation:仅仅针对Release 模式的编译和最终的Release apk打包。
有什么不对的地方,或者的不懂的地方,欢迎评论讨论。