瞅瞅Gradle系列(一)-基礎掃盲

文中就不介紹Gradle是幹啥用的了,直接從你須要瞭解的內容開始.java

項目、任務、動做

在Gradle中,最重要的兩個概念是項目和任務以及動做.
每一次構建都包括至少一個項目,每個項目中又包含一個或多個任務.每個build.gradle文件都表明着一個項目,任務定義在構建腳本里.當初始化構建腳本時,Gradle會基於build文件組裝項目和任務對象,一個任務對象包含一系列的動做對象,這些動做對象以後會按順序執行.一個動做對象就是一段代碼塊,相似於Java中的方法.android

構建的生命週期

Gradle的構建一般會有三個階段:bash

  • Initialization 初始化階段:
    • 該階段解析settings.gradle,根據其中的配置區分單項目構建仍是多項目構建,用不一樣的方式去查找build.gradle文件並解析建立Project對象.
  • Configuration 配置階段:
    • 該階段建立Task,明確任務input和output以及任務間的依賴關係,造成有向無環圖.能夠稱爲執行圖,能夠用TaskExecutionGraph表示,經過gradle.taskGraph來獲取.
  • Execution 執行階段:
    • 在該階段,根據配置階造成的有向無環圖,執行可用的Task.

執行一個Gradle的構建最簡單的形式是隻執行任務中的動做,而這些任務又依賴於其餘的任務.爲了簡化構建過程,構建工具就會新建一個DAG(Directed Acyclic Graph 有向無環圖),這意味着全部的任務都會一個接一個的被執行,而且一旦一個任務被執行,就不會再次被執行了,那些沒有依賴的任務一般會被優先執行.app

構建配置文件

每個基於Gradle構建的項目都包含至少一個build.gradle文件.在Android中,有一些元素是必須的.工具

//實際構建配置的地方
buildscript {
   repositories {
       jcenter()
   }
   dependencies {
       classpath 'com.android.tools.build:gradle:3.5.1'
   }
}
複製代碼

repositories代碼塊中,jcenter庫被配置爲整個構建過程的依賴倉庫.注:咱們能夠在其中添加咱們須要的其餘倉庫
dependencies代碼塊中依賴Android插件,其中提供了構建和測試應用所需的一切.插件用於拓展Gradle構建腳本的能力,在一個項目中應用一個插件,該項目就可使用該插件預約義的一些屬性和任務.
好比咱們建立的Android項目中就須要申請插件:apply plugin: 'com.android.application',而在庫項目中則須要申請apply plugin: 'com.android.library'.不一樣的項目類型可使用不一樣的插件,不能在一個項目中同時使用這兩個插件,會致使構建錯誤.
配置以後咱們就可使用android{}代碼塊來對咱們的項目作一些配置了.測試

項目結構

sqms-study
├── app
│   ├── app.iml
│   ├── build
│   ├── build.gradle
│   ├── libs
│   ├── proguard-rules.pro
│   └── src
│       ├── androidTest
│       ├── main
│       │   ├── AndroidManifest.xml
│       │   ├── java
│       │   └── res
│       │       ├── drawable
│       │       ├── layout
│       │       └── values
│       │           ├── colors.xml
│       │           ├── strings.xml
│       │           └── styles.xml
│       └── test
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── settings.gradle
└── sqms-study.iml
複製代碼

Gradle項目有一個source set(源集)的概念,官方的解釋是一個源集就是一組源文件,它們被一塊兒執行和編譯,在Android中,main就是一個源集,包含了全部源代碼和資源文件,test也是一個源集,用來存放全部測試相關的源代碼.gradle

Gradle Wrapper

Wrapper其實就是對Gradle的一層包裝,便於在團隊開發中統一Gradle構建的版本. 當使用Wrapper啓動Gradle的時候,Wrapper會檢查Gradle有沒有被下載關聯,若是沒有將會從配置的地址進行下載並構建.ui

生成Wrapper

Gradle提供了內置的Wrapper task 幫助咱們自動生成Wrapper所需的目錄文件,在一個項目的根目錄輸入gradle wrapper.url

Wrapper配置

在使用gradle wrapper指令生成相關文件的時候,能夠爲其制定一些參數,來控制Wrapper的生成,如不添加任何參數,則使用當前Gradle版本做爲生成Wrapper的gradleVersion.spa

Wrapper配置參數
  • --gradle-version : 用於指定使用的gradle版本
  • --gradle-distribution-url : 用於指定下載gradle發行版的url地址

如: 使用gradle wrapper --gradle-2.4 表示配置wrapper使用2.4版本的Gradle.它會影響gradle-wrapper.properties中的distributionUrl的值,規則是https\://services.gradle.org/distributions/gradle-${gradleVersion}-bin.zip

gradle-wrapper.properties

我當前使用的Gradle版本爲5.5.1,生成的gradle-wrapper.properties文件以下.

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
複製代碼
gradle-wrapper.properties配置字段
  • distributionBase : 下載的Gradle壓縮包解壓後存儲的目錄
  • distributionPath : 相對於distributionBase的解壓後的Gradle壓縮包的路徑
  • zipStoreBase : 同distributionBase,用於存放zip壓縮包
  • zipStorePath : 同distributionPath,用於存放zip壓縮包
  • distributionUrl : Gradle發行版壓縮包下載地址
相關文章
相關標籤/搜索