【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
複製代碼

結尾

哈哈,該篇就寫到這裏(一塊兒體系化學習,一塊兒成長)

相關文章
相關標籤/搜索