上階段,咱們瞭解了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
複製代碼
哈哈,該篇就寫到這裏(一塊兒體系化學習,一塊兒成長)