【Gradle系列】Gradle之Project详解(二)

·  阅读 1157
【Gradle系列】Gradle之Project详解(二)

引言

上阶段,我们了解了Project的概念,API家族,API家族中的Project API,具体戳这里>>

接下里,我们将学习API家族中的属性API

简介

通过上一篇的学习,我们知道每一个modle其实对于gradle来说都是一个project

怎么在不同的project中定义属性,属性共用等,是本章的主要内容;

首先看下我们project(org.gradle.api.Project)的属性都有哪些?下面是源码情况:

0.png

接下来我们一个个来看下其作用

(1)默认配置文件名字

String DEFAULT_BUILD_FILE = "build.gradle";
复制代码

默认配置文件名字,这就决定了为什么我们每个modle中,都需要有一个build.gradle名字的配置文件,而不能是其他的,如下图:

1.png

(2)路径分隔符

 String PATH_SEPARATOR = ":";
复制代码

Project的路径分隔符,不管是什么操作系统,分隔符都为这个

(3)输出文件夹

 String DEFAULT_BUILD_DIR_NAME = "build";
复制代码

每个project工程的输出文件夹,如下图:

2.png

(4)其他属性(这里先不展开,后面会重点看下)

String GRADLE_PROPERTIES = "gradle.properties";

String SYSTEM_PROP_PREFIX = "systemProp";

String DEFAULT_VERSION = "unspecified";

String DEFAULT_STATUS = "release";
复制代码

拓展属性

上面了解了Project类中定义的属性,可以看出不是很多

但是我们除了类内部定义的属性外,还有另外一种叫拓展属性

这里主要介绍两种模式

模式1

假如我们的project依赖关系如下:

4.png

现在我们要拓展一些属性,让3个project公用

(1)方式1,为当前project(DaviPlu)的所有子project 定义属性

subprojects {
    ext {
        compileSdkVersion = 30
        applicationId = "com.sq.mobile.daviplu"
    }
}
复制代码

这样的话,所有的子project(如:app/lifecycle-plugin)都有这个属性,使用的时候效果如下:

compileSdkVersion this.compileSdkVersion
applicationId this.applicationId
复制代码

(2)方式2,统一定义在根工程(DaviPlu)里面,然后子工程再去调用

ext {
    buildToolsVersion = "30.0.0"
}
复制代码

默认情况,子project是继承了根project的属性的,所有的子project(如:app/lifecycle-plugin)都有这个属性,使用的时候效果如下:

调用方式1:
buildToolsVersion this.rootProject.buildToolsVersion

调用方式2:
buildToolsVersion this.buildToolsVersion
复制代码

(3)方式3,结合map方式拓展属性

首先如下定义在DaviPlu:

ext {
    android = [
            minSdkVersion: 15
    ]

    dependencies = [
            appcompat: 'androidx.appcompat:appcompat:1.2.0'
    ]
}
复制代码

然后使用方式如下(所有project都可以用):

minSdkVersion this.rootProject.ext.android.minSdkVersion

implementation this.rootProject.ext.dependencies.appcompat
复制代码

模式2

直接在 gradle.properties 属性种定义,相对比较简单

gradle.properties其实就是gradle的属性,只能定义key-value属性,不能向模式1那样支持闭包/map等操作

定义方式:

isLoadApp = true
mTargetSdkVersion = 30
复制代码

使用方式(所有的project都可以用)

(1)在setting.gradle中使用

if (isLoadApp) {
    include ':app'
}
复制代码

(2)在app project中使用

targetSdkVersion mTargetSdkVersion
复制代码

结尾

哈哈,该篇就写到这里(一起体系化学习,一起成长)

Tips

更多精彩内容,请关注 ”Android热修技术“ 微信公众号

分类:
Android
标签:
分类:
Android
标签:
收藏成功!
已添加到「」, 点击更改