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

引言

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

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

简介

经过上一篇的学习,咱们知道每个modle其实对于gradle来讲都是一个projectapi

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

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

0.png

接下来咱们一个个来看下其做用app

(1)默认配置文件名字post

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

默认配置文件名字,这就决定了为何咱们每一个modle中,都须要有一个build.gradle名字的配置文件,而不能是其余的,以下图:学习

1.png

(2)路径分隔符gradle

String PATH_SEPARATOR = ":";
复制代码

Project的路径分隔符,无论是什么操做系统,分隔符都为这个ui

(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
复制代码

结尾

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

相关文章
相关标签/搜索