不得不学之「 Gradle」 ③ 构建脚本基础

栏目: 编程工具 · 发布时间: 5年前

内容简介:其实学到这里,对于 AndroidStudio 里的 Gradle 还是不懂, 好多东西见过 ,可是 不知道具体是干啥的,所以学好基础,到后面再看 Android Gradle 就很简 单了 。我 们接着学习基础。带着疑问去学习。我们在 Gradle 中会经常看到根目录下有个 settings.gradle

其实学到这里,对于 AndroidStudio 里的 Gradle 还是不懂, 好多东西见过 ,可是 不知道具体是干啥的,所以学好基础,到后面再看 Android Gradle 就很简 单了 。我 们接着学习基础。

带着疑问去学习。

  • 什么是 Settings 文件?
  • 什么是 Build 文件?
  • 什么是 Project?
  • 什么是 Task?

我们在 Gradle 中会经常看到根目录下有个 settings.gradle

不得不学之「 Gradle」 ③ 构建脚本基础

一、setting.gradle

settings.gradle 的作用是为了设置子工程,因为在 Gradle 的多工程是通过工程树来表示的,其实和 AndroidStudio 中的 project 和 Module 的概念差不多,根工程就是 project,子工程就是 module。

一个子工程只有在 Settins 文件中配置了才会被 Gradle 识别,也就是才会在构建的时候被包含进去。

rootProject.name = 'mopub-android'
include ':mopub-sdk', ':mopub-sample', ':mopub-sdk:mopub-sdk-base', ':mopub-sdk:mopub-sdk-banner',
        ':mopub-sdk:mopub-sdk-interstitial', ':mopub-sdk:mopub-sdk-rewardedvideo',
        ':mopub-sdk:mopub-sdk-native-static', ':mopub-sdk:mopub-sdk-native-video'
复制代码

这里是为子项目指定默认的目录,我们也可以手动指定目录。

include ':mopub-sdk'
project (':mopub-sdk').projectDir = new File(rootDir,'mopub/mopub-sdk')
复制代码

二、build.gradle

每一个 Project 都会有一个 build.gradle ,这是该 Project 构建的入口,在这里对 Project 进行配置,比如依赖哪的库啊,依赖哪个插件啊。

虽然每个 Project 都有一个 build.gradle 但是 Root Project 是老大,可以获取到所有 Child Project ,所以在 Root Project 的 build.gradle 中可以对 Child Project 统一进行配置。比如所有的 Child Project 的仓库为 jcenter,这样我们依赖的 jar 就可以直接从 jcenter 中下载了。

buildscript {
    repositories {
        jcenter()
        google()
    }
    ...
}
复制代码

Child Project

apply plugin: 'java-library'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.google.auto.service:auto-service:1.0-rc4'
    implementation 'com.squareup:javapoet:1.11.1'
    implementation project(path: ':router_annotation')
}

复制代码

3、Projects 和 Tasks

多 Project 其实是为了更好的拆分,低耦合、高聚合,一个项目可以由多个 project 组成,一个 Project 又可以由多个 Task 组成。

比如编译一次 Java 代码,上传到 JCenter,打包成 aar 等等都是任务。

不得不学之「 Gradle」 ③ 构建脚本基础

4、Task。

//文件名为 custom.gradle
ask customTask{
	doFirst{
println ':customTask:doFrist'
	}
	doLast{
println ':customTask:doLast'
	}
}
复制代码
不得不学之「 Gradle」 ③ 构建脚本基础

5、任务依赖

task Buying  {
	doLast{
	println 'Buying:买菜'
}
}
task Washing(dependsOn: Buying){
	doLast{
println 'Washing:洗菜'
	}
}
task Cook(dependsOn: Washing){
	doLast{
println 'Cook:做饭'
	}
}
复制代码
不得不学之「 Gradle」 ③ 构建脚本基础

6、任务间通过 API 控制、交互

名称有点拗口,其实意思就是,比如我们写了一个 Task ,其实这个 Task 就和我们定义的其他变量一下,可以直接使用 Task 以及他的方法。

task exHello  {
	println '<<'
}
exHello.doFirst{
	println project.hasProperty('exHello')
	println 'doFirst'
}
exHello.doLast{
	println 'doLast'
}
复制代码
不得不学之「 Gradle」 ③ 构建脚本基础

7、自定义属性

这个我们就用的比较多了,基本都会使用到。如果需要添加额外的自定义属性,那么可以通过两种方式,一种是 ext.age 这样单独添加,一种是 ext{} 添加多个。

ext.age = 12
ext{
	phone = 123456
	address = 'beijing'
}
task exCustomProperty{	
	println phone
	println address
	println age
}
复制代码

相信大家在 AS 中都用过吧,所以这个自定义属性还是用的很广泛的。跨 Project、跨 Task 等统一配置相信大家基本都搞过,没有搞过的就去搞搞。

还有一个地方挺经常用的,那就是 SourceSet,以及 使用 projectFlavors 中,都会和它打交道。

apply plugin:"java"
task exCustomProperty{
sourceSets.each{
	println " ${it.name}--${it.java.srcDirs}"
}
}

sourceSets.all{
	ext.srcDirs = null
}
 sourceSets {
        main { 
            srcDirs = ['main/src']            
        }
        test{
            srcDirs = ['test/src']
        }
 }
复制代码
不得不学之「 Gradle」 ③ 构建脚本基础

所以我们再开发中的时候,为了避免各个 module 的配置不同和免去手抖带来的 bug,所以需要统一管理一些配置信息,所以就可以 ext{},美滋滋,偷懒的利器。

8、脚本即代码,代码即脚本

这就是在 Gradle 中灵活的地方,在这个脚本文件中可以使用 Groovy、Java 以及 Gradle 的任何语法和 API,来做我们想要做的事情。在脚本里,可以定义类,内部类,导入包,定义方法,常量,接口,灵活的你想象不到,比如 我们根据时间来生成 apk 包名。

def buildTime(){
    def data = new Date()
    def formattedData = date.format('yyyyMMdd')
    return formattedData
}
复制代码

划重点: 本文是完全参考 《Android Gradle 权威指南》而写,作为学习笔记使用。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

世界是数字的

世界是数字的

[美] Brian W. Kernighan / 李松峰、徐建刚 / 人民邮电出版社 / 2013-6 / 49.00

家用电器、汽车、飞机、相机、手机、GPS 导航仪,还有游戏机,虽然你看不见,但这些设备都有计算能力。手机通信网络、有线电视网络、空中交通管制系统、电力系统、银行和金融服务系统等基础设施背后无一不是计算机在支撑。如今的世界是数字的,而计算机和计算无处不在。这本书就是要告诉大家数字世界有关计算机的一切。本书没有高深莫测的专业术语,但它全面解释了当今计算和通信领域的工作方式,包括硬件、软件、互联网、通信......一起来看看 《世界是数字的》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具