前言
众所周知,
gradle
是android项目的构建工具,项目的各种配置,打包都是通过gradle实现的,而且gradle可以简化我们很多重复操作。但是相信对于大多数小伙伴来说,gradle一直是深不可测或者说是对它一知半解,用到的时候都是通过搜索引擎照抄一下模版代码,能跑就行。有时候大家肯定也想深入了解它掌握它做更多的事情,但是苦于没有通俗易懂和实用的教程就草草放弃了,我也是一样,曾经通过官方文档和实物教材想去研究一下gradle,但是都被通篇大论和无实际用途的教程劝退了。直到今天,通过项目中的实际摸索和实践总结了一些实用技巧给大家分享一下,也帮助自己巩固一下知识。下面进入正题。
目录
- 如何定义gradle全局常量并使用
- android中gradle自带的任务有哪些?如何自定义task执行多个任务
- 自定义gradle Plugin能做什么?如何自定义gradle Plugin
基础知识
android项目中的
gradle
结构和各自的作用
- 工程根目录的
build.gradle
它是用来配置整个项目的仓库地址和gradle tools版本,以及声明全局gradle脚本的公共属性,比如一些版本号之类的 - module目录的
build.gradle
用来配置module(app或者lib)的依赖库,编译版本,sdk版本,构建参数等等
使用方法
根据上面的目录顺序进行讲解:
1. 定义全局变量
有两种方法:一是在gradle.properties
中直接定义变量,可以在工程中的任意build.gradle
脚本中使用,如下:
二:在工程目录的build.gradle
文件中使用闭包声明变量,在子项目的build.gradle
中通过rootProject.ext.xxxx
的形式取值。如下:
通过此种用法,在实际项目中如果我们的工程是多module的形式,就可以全局定义项目的编译版本,sdk版本等等,完整配置如下:
2. gradle 自带哪些任务,都是干嘛的
在项目根目录下执行命令gradle :app:tasks
会列出app module下面的所有task,
Android tasks
androidDependencies - Displays the Android dependencies of the project.
signingReport - Displays the signing info for the base and test modules
sourceSets - Prints out all the source sets defined in this project.
Build tasks
assemble - Assemble main outputs for all the variants.
assembleAndroidTest - Assembles all the Test applications.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
bundle - Assemble bundles for all the variants.
clean - Deletes the build directory.
cleanBuildCache - Deletes the build cache directory.
compileDebugAndroidTestSources
compileDebugSources
compileDebugUnitTestSources
compileReleaseSources
compileReleaseUnitTestSources
比如 assemble
是打包的, clean
androidDependencies
等,比如最常用的,我们经常会在打包前clean一下工程,以免studio的缓存影响,这样我们就可以创建一个合并任务,先clean,再build
,或者installDebug
,具体写法如下:
文件:app module下的build.gradle
文件
clean.doLast {
println("-------clean finish-------")
}
// 这里没写assemble是因为assemble是个组合任务,如果写assemble.dependensOn(clean)的话。它的任务执行顺序是无序的,这个很关键!!!!!所以要打包前先执行clean任务的话要先查看assemble执行的第一个任务是什么,可以执行一次在studio的build控制栏里看到是 prebuild
preBuild.dependsOn(clean)
此时运行assemble
命令的结果就是:
如何创建自己的任务:
在build.gradle文件中这样写,然后sync一下,在右边的gradle任务拦:other分组下就会出现你的自定义任务“app”
task('app') {
println('hello gradle ~')
}