引言
上阶段,我们了解了Project的概念,API家族,API家族中的Project API,具体戳这里>>
接下里,我们将学习API家族中的属性API
简介
通过上一篇的学习,我们知道每一个modle其实对于gradle来说都是一个project
怎么在不同的project中定义属性,属性共用等,是本章的主要内容;
首先看下我们project(org.gradle.api.Project)的属性都有哪些?下面是源码情况:
接下来我们一个个来看下其作用
(1)默认配置文件名字
String DEFAULT_BUILD_FILE = "build.gradle";
复制代码
默认配置文件名字,这就决定了为什么我们每个modle中,都需要有一个build.gradle名字的配置文件,而不能是其他的,如下图:
(2)路径分隔符
String PATH_SEPARATOR = ":";
复制代码
Project的路径分隔符,不管是什么操作系统,分隔符都为这个
(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类中定义的属性,可以看出不是很多
但是我们除了类内部定义的属性外,还有另外一种叫拓展属性
这里主要介绍两种模式
模式1
假如我们的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
复制代码
模式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热修技术“ 微信公众号