上阶段,咱们了解了Project的概念,API家族,API家族中的Project API,具体戳这里>>java
接下里,咱们将学习API家族中的属性APIandroid
经过上一篇的学习,咱们知道每个modle其实对于gradle来讲都是一个projectapi
怎么在不一样的project中定义属性,属性共用等,是本章的主要内容;markdown
首先看下咱们project(org.gradle.api.Project)的属性都有哪些?下面是源码状况:闭包
接下来咱们一个个来看下其做用app
(1)默认配置文件名字post
String DEFAULT_BUILD_FILE = "build.gradle";
复制代码
默认配置文件名字,这就决定了为何咱们每一个modle中,都须要有一个build.gradle名字的配置文件,而不能是其余的,以下图:学习
(2)路径分隔符gradle
String PATH_SEPARATOR = ":";
复制代码
Project的路径分隔符,无论是什么操做系统,分隔符都为这个ui
(3)输出文件夹
String DEFAULT_BUILD_DIR_NAME = "build";
复制代码
每一个project工程的输出文件夹,以下图:
(4)其余属性(这里先不展开,后面会重点看下)
String GRADLE_PROPERTIES = "gradle.properties";
String SYSTEM_PROP_PREFIX = "systemProp";
String DEFAULT_VERSION = "unspecified";
String DEFAULT_STATUS = "release";
复制代码
上面了解了Project类中定义的属性,能够看出不是不少
可是咱们除了类内部定义的属性外,还有另一种叫拓展属性
这里主要介绍两种模式
假如咱们的project依赖关系以下:
如今咱们要拓展一些属性,让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
复制代码
直接在 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
复制代码
哈哈,该篇就写到这里(一块儿体系化学习,一块儿成长)