Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android資訊 >> Gradle for Android 第七篇( Groovy入門 )

Gradle for Android 第七篇( Groovy入門 )

編輯:Android資訊

迄今為止,我們已經學些了眾多gradle構建的概念以及如何運行tasks。在這一章,我們將對這些概念有一個更深的理解,然後開始構建我們自己的tasks。一旦我們掌握了如何編寫自定義tasks,那麼我們就可以試著編寫自己的插件,以達到在多個項目中復用的目的。

在我們創建傳統tasks之前,我們有必要了解些Groovy的基本語法。因為這理解Groovy如何運行會使得我們能更好的理解tasks和插件。理解Groovy同樣幫助我們理解Gradle如何工作,以及為什麼這些配置文件需要這樣配置。

Gradle for Android 第一篇( 從 Gradle 和 AS 開始 )

Gradle for Android 第二篇( Build.gradle入門 )

Gradle for Android 第三篇( 依賴管理 )

Gradle for Android 第四篇( 構建變體 )

Gradle for Android 第五篇( 多模塊構建 )

Gradle for Android 第六篇( 測試)

在這一章,我們將會遵循以下主題:

  • 理解Groovy
  • 重新認識tasks
  • Hooking Android插件
  • 編寫自定義插件

理解Groovy

大部分Android開發者也是名Java開發者,和Java對比,Groovy也是運行在JVM上。當然,如果你是名Java開發者,那麼Groovy將會變得容易閱讀,但是在編寫你自己的Groovy代碼之前,你必須對Groovy有一個全面的了解。

簡介

Groovy起源於Java,其運行在JVM上。其目標是創造更簡單,更直接的語言,不僅僅在腳本語言上或者編譯語言上運行。通過這一章節,我們將對Groovy和Java進行對比。

在Java中,打印一天String應該是這樣的:

System.out.println("Hello, world!");

在Groovy中,你可以這麼寫:

println 'Hello, world!'

你應該主要到幾點不同之處:

  • 沒有了System.out
  • 沒有了方括號
  • 列結尾沒有了;

這個例子同樣使用了單引號,你可以使用雙引號或者單引號,但是他們有不同的用法。雙引號可以包含插入語句。插入是計算一個字符串包含placeholders的過程,並將placeholders的值替換,這些placeholder可以是變量甚至是方法。Placeholders必須包含一個方法或者變量,並且其被{}包圍,且其前面有$修飾。如果其只有一個單一的變量,可以只需要$。下面是一些基本的用法:

def name = 'Andy'
def greeting = "Hello, $name!"
def name_size "Your name is ${name.size()} characters long."

greeting應該是“ Hello,Andy”,並且 name_size 為 Your name is 4 characters long.string的插入可以讓你更好的動態執行代碼。比如

 def method = 'toString'
 new Date()."$method"()

這在Java中看起來很奇怪,但是這在groovy裡是合法的。

Classes和members

Groovy裡面創建類和Java類似,舉個例子:

class MyGroovyClass {
       String greeting
       String getGreeting() {
           return 'Hello!'
        } 
}

注意到不論是類名還是成員變量都沒有修飾符。其默認的修飾符是類和方法為public,成員變量為private。

當你想使用MyGroovyClass,你可以這樣實例化:

def instance = new MyGroovyClass()
instance.setGreeting 'Hello, Groovy!'
instance.getGreeting()

你可以利用def去創建變量,一旦你為你的類創建了實例,你就可以操作其成員變量了。get/set方法groovy默認為你添加 。你甚至可以覆寫它。

如果你想直接使用一個成員變量,你可以這麼干:

 println instance.getGreeting()
 println instance.greeting

而這二種方式都是可行的。

方法

和變量一樣,你不必定義為你的方法定義返回類型。舉個例子,先看java:

public int square(int num) {
       return num * num;
} 
square(2);

你需要將該方法定義為public,需要定義返回類型,以及入參,最後你需要返回值。

我們再看下Groovy的寫法:

 def square(def num) {
       num * num
 }
 square 4

沒有了返回類型,沒有了入參的定義。def代替了修飾符,方法體內沒有了return關鍵字。然而我還是建議你使用return關鍵字。當你調用該方法時,你不需要括號和分號。

我們設置可以寫的更簡單點:

def square = { num ->
       num * num
}
square 8

###閉包

閉包是一段匿名的方法體,其可以接受參數和返回值。它們可以定義變量或者可以將參數傳給方法。

你可以簡單的使用方括號來定義閉包,如果你想詳細點,你也可以這麼定義:

Closure square = {
       it * it
}
square 16

添加了Closure,讓其更加清晰。注意,當你沒有顯式的為閉包添加一個參數,groovy會默認為你添加一個叫做it。你可以在所有的閉包中使用it,如果調用者沒有定義任何參數,那麼it將會是null,這會使得你的代碼更加簡潔。

在grade中,我們經常使用閉包,例如Android代碼體和dependencies也是。

Collections

在groovy中,有二個重要的容器分別是lists和maps。

創建一個list很容易,我們不必初始化:

List list = [1, 2, 3, 4, 5]

為list迭代也很簡單,你可以使用each方法:

list.each() { element ->
       println element
}

你甚至可以使得你的代碼更加簡潔,使用it:

list.each() {
       println it
}

map和list差不多:

Map pizzaPrices = [margherita:10, pepperoni:12]

如果你想取出map中的元素,可以使用get方法:

pizzaPrices.get('pepperoni')
pizzaPrices['pepperoni']

同樣的groovy有更簡單的方式:

pizzaPrices.pepperoni

是不是簡單到爆,瞬間感覺Java太復雜的有木有。下一章我們將學習Groovy在Gradle中的使用情況,相信你會喜歡!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved