内容简介:其实学到这里,对于 AndroidStudio 里的 Gradle 还是不懂, 好多东西见过 ,可是 不知道具体是干啥的,所以学好基础,到后面再看 Android Gradle 就很简 单了 。我 们接着学习基础。带着疑问去学习。我们在 Gradle 中会经常看到根目录下有个 settings.gradle
其实学到这里,对于 AndroidStudio 里的 Gradle 还是不懂, 好多东西见过 ,可是 不知道具体是干啥的,所以学好基础,到后面再看 Android Gradle 就很简 单了 。我 们接着学习基础。
带着疑问去学习。
- 什么是 Settings 文件?
- 什么是 Build 文件?
- 什么是 Project?
- 什么是 Task?
我们在 Gradle 中会经常看到根目录下有个 settings.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 等等都是任务。
4、Task。
//文件名为 custom.gradle ask customTask{ doFirst{ println ':customTask:doFrist' } doLast{ println ':customTask:doLast' } } 复制代码
5、任务依赖
task Buying { doLast{ println 'Buying:买菜' } } task Washing(dependsOn: Buying){ doLast{ println 'Washing:洗菜' } } task Cook(dependsOn: Washing){ doLast{ println 'Cook:做饭' } } 复制代码
6、任务间通过 API 控制、交互
名称有点拗口,其实意思就是,比如我们写了一个 Task ,其实这个 Task 就和我们定义的其他变量一下,可以直接使用 Task 以及他的方法。
task exHello { println '<<' } exHello.doFirst{ println project.hasProperty('exHello') println 'doFirst' } exHello.doLast{ println 'doLast' } 复制代码
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'] } } 复制代码
所以我们再开发中的时候,为了避免各个 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 权威指南》而写,作为学习笔记使用。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- golang构建项目的脚本
- Gradle系列之构建脚本基础
- 通过Roslyn构建自己的C#脚本(更新版)
- GCC 7和LLVM+Clang+libc++abi 4.0的构建脚本
- 脚本文件里的 Hybrid Script(混合式脚本)
- 脚本错误量极致优化-定位压缩且无 SourceMap 文件的脚本错误
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Filter Bubble
Eli Pariser / Penguin Press / 2011-5-12 / GBP 16.45
In December 2009, Google began customizing its search results for each user. Instead of giving you the most broadly popular result, Google now tries to predict what you are most likely to click on. Ac......一起来看看 《The Filter Bubble》 这本书的介绍吧!