不得不学之「 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 权威指南》而写,作为学习笔记使用。


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

查看所有标签

猜你喜欢:

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

Web Services原理与研发实践

Web Services原理与研发实践

顾宁刘家茂柴晓路 / 机械工业出版社 / 2006-1 / 33.00元

本书以web services技术原理为主线,详细解释、分析包括XML、XML Schema、SOAP、WSDL、UDDI等在内在的web Services核心技术。在分析、阐述技术原理的同时,结合作者在Web Services领域的最新研究成果,使用大量的实例帮助读者深刻理解技术的设计思路与原则。全书共有9章,第1章主要介绍web Services的背景知识;第2-7章着重讲解webServic......一起来看看 《Web Services原理与研发实践》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具