天天看點

Gradle 入門到精通(一)

前言

Gradle詳解内容将分篇介紹,這裡首先介紹Gradle的基礎知識和項目結構。

1 Gradle 安裝

gradle的網站是 http://gradle.org/。我們可以通過相關的網站擷取到相應的gradle的版本。也可以在這個網站上面擷取相應的資料。

1.1 下載下傳相應的版本

https://gradle.org/releases

在上面的網站下載下傳最新gradle的版本

1.2 配置

将下載下傳的文檔解壓,解壓完成後,将路徑添加到系統變量Path内部。

1.3 校驗安裝

在指令行下輸入

gradle -v
           

如果有相對應的輸出代表安裝成功

Gradle 入門到精通(一)

2 Groovy文法入門

2.1 why Groovy?

為什麼我們學習gradle需要學習groovy? groovy是google推出的一款基于java的腳本語言。隻要簡單幾句代碼就可以完成java程式。雖然groovy看起來是腳本程式設計語言,但是究其更本也是運作在jvm上面的java語言,知識groovy對java進行了二層的封裝。因為這個語言的靈活性,gradle選擇了groovy。

2.2 helloWorld

讓我們使用最簡單的helloWorld代碼來入門。首先要確定gradle安裝正确,安裝正确後,我們建立一個檔案夾,在這個檔案夾内部建立一個build.gradle檔案。

println("Hello World!");
           

接着我們在指令行執行 gradle 後就可以看到相應的結果了。

Gradle 入門到精通(一)

2.3 基礎文法

def a = 1
def b = "abc"
def int a
           

上面是gradle如何定義一個變量的寫法。注意gradle沒有要求每行必須以;結尾,一行就是一句代碼

def oneMeathod(arg1){

}

int twoMeathod(arg1,arg2){
     arg1+arg2
}
           

上面是定義方法的寫法,如果是無傳回的方法。需使用def定義。如果指定了相應的傳回類型的話,可不使用def關鍵字。

注意如果有傳回值的話,需在最後一行将需要傳回的值傳回。

2.4 字元串

def a ='huangkai'
def b = "i am $a"
def lines = ''' abc


       abc

       end '''
           

字元串有三種格式

  • ” 代表完全按照符号内部的内容
  • “” 如果内部有$變量值的話,先取變量值
  • ”’ ”’代表文本支援換行

2.5 容器類型

在Java裡提供了多種的容器類型,常見的有List Map Set。他們分别适合不同場景。為不同需求提供解決能力。在grrovy内部也提供了對應的容器類型。

以下内容不用死記硬背,學會查詢即可

http://docs.groovy-lang.org/latest/html/groovy-jdk/

2.5.1 List

與Java數組類型相似,與java不一樣的,Java需要類型相同的對象。可以了解為定義了一個ArrayList

def a = ["a",5,6]
           

上面是定義的方法。

可以在上面的網站查詢到list提供的方法

def a = [5,'string',true]

println(a.getAt(2));
           

2.5.2 Map

與java中的map類似,map提供的鍵值對的能力。

def map = ["a":100,"b":200]
           

定義map的方法,key:vaule key必須為字元串 value可以為任何值。 多個值之間使用,分開

簡單的使用map

def map = ["a":100,"b":200]

 println(map.getAt("b"));
           

2.6 閉包(Closure)

2.6.1 閉包的定義

我們在Java開發中經常使用下面的代碼

image = (ImageView) findViewById(R.id.imageView);
    image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
           

這個代碼是android裡面最常見的代碼。為一個ImageView設定了一個點選的回調,回調的意思就是設定一個對象給另外一個對象,當被設定的對象發生某種變化後會觸發設定對象的方法。

閉包是groovy裡面的特殊文法,我們在很多檔案都可以看到閉包的身影。閉包是類似回調的一個代碼塊。因為groovy是腳本語言,是以有很多約定的寫法,下面我們來看看閉包是如何定義與書寫的。

def aClosure ={
           println("helloWorld");
      }
           

這個就是最簡單的一個閉包,看樣子是不是比較像一個方法。

帶參數的閉包,

def xxx = {a , b ->

   println(a);
   println(b);

 }
           

-> 符号前代表輸入的參數,可以不使用類型

帶預設參數的閉包

def xxx ={
    println(it);
}
           

每個閉包在定義的時候都帶了一個預設的參數,這個參數的名稱叫it。我們可以直接擷取他不需要定義。以上閉包的幾種定義的方式。

2.6.2 閉包的使用

在上面的章節我們學習了怎麼定義閉包,下面我們來學習一下怎麼使用閉包。

閉包的使用通常有兩種:

  • 1 直接用,我們把閉包當做一個函數使用。
  • 2 作為一個參數使用,我們把閉包作為一個回調使用。

1 作為一個函數使用

def abc = {time,name ->

   println(time);

   println(name);

 }

abc.call(100,"huangkai");


 def xxx ={
    println(it);
 }

xxx.call(10086)
           

上面定義了兩個閉包,每個閉包的調用方法都是使用call()方法,注意call方法的參數

2 作為參數

List    each(Closure closure)
           

list定義了一個方法,這個方法是周遊list的方法,方法接收一個參數,參數的類型就是一個閉包。

def a = [5,'string',true]

def b ={
 println(it);
 }

a.each(b);
           

上面的例子就是怎麼把一個閉包作為參數傳遞給一個方法

4 建立一個簡單的Gradle項目

為了讓大家能夠了解gradle的項目的結構,我們來建立一個最簡單的gradle項目來了解Gradle的項目結構。

1 建立一個檔案夾作為工程目錄

2 在這個目錄内建立一個build.gradle檔案

3 編寫build.gradle檔案,在檔案内加入這個一句話。

task wrapper(type: Wrapper) {
   gradleVersion = '2.0'
}
           

這句話的意思就是,為目前項目建立一個wrapper包,使用的gradle版本是2.0

4 在指令行下進入目前的工程目錄,執行以下指令

gradle wrapper
           

5 執行成功後,工程目錄下生成

Gradle 入門到精通(一)

wrapper檔案是讓項目在沒有安裝gradle的情況下能夠使用gradle

gradlew 與 gradlew.bat 是在不同平台下面使用的文檔。

Gradle 入門到精通(一)

6 gradle-wrapper.properties

Gradle 入門到精通(一)

7 在gradle-wrapper.properties檔案中修改成

distributionUrl=https://services.gradle.org/distributions/gradle-2.14.1-all.zip

8 使用android studio加載這個項目

Gradle 入門到精通(一)

9 在build.gradle 檔案中添加一句腳本,接着打開終端标簽頁面

10 在終端中輸入./gradlew指令,最後gradle的檔案就會編譯完成

Gradle 入門到精通(一)

5 預設的項目結構

上面的例子我們學習了gradle的基本結構,我們知道了wrapper等檔案的作用,下面我們來看看android studio建立的項目結構。

Gradle 入門到精通(一)

這個目錄結構是比較常見的android項目結構,這個多項目結構(Multi project),什麼叫多項目結構,意味着項目是由多個子項目組成的,每個子項目都有自己的建構檔案(build.gradle)最後由Gradle将多個子項目整合。進而完成項目的建構。

我們看看上圖,上圖就是最經典的項目結構。

  • app 、app2 : 業務代碼
  • library : 代碼庫
  • build.gradle :項目的總的build檔案
  • setting.gradle: 項目會建構的子產品
  • gradle : gradle的jar包與配置檔案
  • gradlew : gradle的跨平台執行檔案
Gradle 入門到精通(一)

上圖是我們項目的預設的目錄結構。

有的時候我們需要自定義一些項目結構,如下圖

Gradle 入門到精通(一)

上圖的項目結構就是典型的eclipse項目的結構,我要做就是以下幾步:

  • 1 建立一個目錄
  • 2 修改項目根目錄下settings.gradle,在後面将目錄的名稱添加到檔案中 如下圖
  • 3 在目錄下建立一個build.gradle檔案
  • 4 修改build.gradle檔案,添加sourceSets支援 如下圖
Gradle 入門到精通(一)
Gradle 入門到精通(一)
sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        jniLibs.srcDirs = ['libs']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }
    androidTest.setRoot('tests')
   }
           

未完待續…..