1.Gradle深入淺出——初識Gradle
2.Gradle深入淺出——Gradle基礎概念
3.Gradle深入淺出——Android Gradle Plugin 基礎概念
4.Gradle深入淺出——Gradle配置(壹)
5.Gradle深入淺出——Gralde配置(二)
前面三篇博客講解了Gradle的基礎概念,看完前面三篇博客我們應該對於Gradle都有了壹個基礎的認知,知道了文件的作用,Gradle的基本構成,本篇博客開始就開始進入Gradle的學習,首先講解的是Gradle的配置,Gradle配置應該是我們日常開發中必不可少的技能,平時的打包,編譯等等都需要熟悉Gradle的配置。
我們知道Gradle都關於屬性配置有兩個文件, local.properties 和 gradle.properties ,這兩個文件的實質都是生成Java的 Properties 對象,所以要屬性這兩個文件的作用,首先要屬性下 Properties 類。
我們首先來看下這個類的基本上結構。
看完這個我們應該就有壹個大體的認識了, Properties 本質就是壹個HashTable,支持設置默認屬性,其他的沒啥區別,哪我們看下 Properties 如何讀取文件呢
可以看到 Properites 給我們提供了三個加載文件的方式,所以這裏我們也可以得出壹個結論, 使用 Properties 不是必須使用 .properties 格式的文件。
哪可能有人要問了,為啥這裏的配置都使用properties格式的文件呢?
我猜測可能是復用Spring Boot中的支持的配置文件,Spring Boot中支持三種格式的配置文件 YAML,XML,Properties ,具體的差異這裏就不展開講解了。
我們可以理解為 .properties 就是類似於json的壹套配置文件格式,IDE對於這類文件有特殊的支持,比如註釋等語法,做了統壹的規範
Properties文件的格式規範
有了對於Properties類的理解,我們在來看local.properties文件,理解起來就方便類許多,前面幾篇博客已經提到了 local.properties 是Studio自動生成的壹個本地配置文件,並且不會提交到遠端,是我們自己本地的配置文件,常見的配置如下:
既然是配置文件,那麽如何在 local.properites 中定義全局變量,然後在build.gradle中讀取呢?比如我們的maven上傳需要用戶的姓名密碼,每個人的都不壹樣,所以可以放到local.propertiest文件中
和前面介紹的壹樣,我們只需要在local.properties中定義變量,然後在gradle中讀取變量只需要生成Properties類來進行讀取文件。
同樣的這也是壹個Properties類型的文件,但這個文件主要是配置和Gradle自身相關的配置內容的,接下來聊聊他的幾個作用:
這裏主要是配置本項目在使用Gradle進行編譯時的配置,比如虛擬機堆棧配置(常見的編譯速度優化就在這裏配置)
所以看到上面的定義後,我們就可以理解常見的“編譯速度優化”的配置的大概意思
除了剛才說的這個文件用於配置gradle屬性,這個文件還可以用於配置系統屬性和android屬性
並且可以區分配置不同的項目的配置
1、單項目gradle使用代理:gradle/wrapper/gradle-wrapper.properties
2、全局gradle使用代理:userdir/.gradle/gradle.properties
其他的系統變量這裏就不列舉了,具體看我們遇到具體場景來設置
接著來看下在gradle.properties文件中如何定義變量,gradle.properties就是官方定義的用來定義變量的文件的地方,所以定義和獲取就不需要像local.properties那麽麻煩了。
獲取變量,就不需要通過文件流讀取文件流,gralde內部自身已經做了這個,我們可以直接引用變量即可。
setting.gradle前面的博客介紹了,是用於配置項目的組成和模塊的,所以壹半我們的setting.gradle文件都是這樣的
前面有講過setting.gradle的實質是生成壹個Setting對象,我們按住ctrl點擊include就進入了Setting.gradle類,其實就可以知道我們可以調用的api,這裏還是介紹我們常用的幾個方法吧。首先來看下最常用的 include 方法。
這裏特意把註釋也放了進來,不得不說老外對於註釋真的寫的非常詳細,往往我們忽視了這麽冗長的註釋,但當發現問題,從搜索引擎上搜相關資料都時候就會發現,其實大部分就是對於註釋都翻譯。
所以這裏我下面介紹都內容,就會發現和上面註釋都大同小異。
首次看下這裏的引入方式,壹般都是 include ':app' ,這裏的語法是這樣的
在這裏 : 表示的路徑的分隔符,也就是 \ 的意思,所以這裏都需要使用 : ,其次這裏都路徑是相當於根目錄的路徑。然後我們可以看到其實這個方法是可變參數,所以這裏支持多個項目引入。
所以我們如果有壹個這樣的目錄結構的項目
那麽這時的setting.gradle就是這樣
這時我們可能有個問題:我們如果引入的不是根目錄下的項目怎麽辦?也就是引入其他路徑下的項目作為我們的子module,因為這裏壹直是相對與根目錄的路徑
這樣我們就可以引入不在這個項目中的Lib作為我們這個項目的Lib,組件化的工程經常就會這樣使用。
最後我們看下還有壹個小知識點,我們如果想改變這個Lib在Studio的顯示的名稱,該如何操作?
這個方法的作用就是我們這樣的,可以改變Lib在IDE中的名稱。
接著來看下在setting.gradle怎麽定義全局變量呢?這時候就是利用gradle的拓展屬性的特性了。
然後在build.gradle中使用變量的時候,就還是使用gradle.ext使用即可。
關於ext屬性我們後面專門再講下,我們前面也講到了我們全局就只會有壹個gradle對象,所以這裏可以理解是壹個全局的map對象,這樣就好理解了很多。
至此,本篇博客對於 gradle.properties 、 local.properties 、 setting.gradle 都配置都有了壹個較為詳細都講解,我們後面在使用過程中,對於這三個文件的配置都不會那麽陌生,並且對於三個文件的差異都有了壹個基本都認知,知道我們在定義本地變量,不同人都環境有差異都地方都應該在local.properties配置,大家***同的配置和變量定義可以放到gradle.properties這個專職用於存放配置的文件,最後就是專門用於配置我們項目的目錄結構的setting.gradle,當然這個文件也可以用於配置壹些變量,這時候我們就要把我單壹職責的原則,也就是高內聚,低耦合那壹套,按照文件職責進行劃分,下壹篇博客準備對build.gradle的配置進行講解。