Gradle for Android 第七篇( Groovy入門 )
迄今為止,我們已經學些了眾多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 第五篇( 多模組構建 )
在這一章,我們將會遵循以下主題:
- 理解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中的使用情況,相信你會喜歡!
相關文章
- Gradle核心思想(三)Groovy快速入門指南Gradle
- Gradle入門系列(二)——groovy高階語法Gradle
- Gradle入門系列(一)——groovy基礎語法Gradle
- Android入門第七篇之ListViewAndroidView
- 《Android Gradle權威指南》之Gradle入門AndroidGradle
- Groovy 簡單入門
- Android Studio Grade Groovy語言入門篇Android
- Groovy 語言快速入門
- Groovy入門視訊教程
- Gradle for Android 第二篇( Build.gradle入門 )GradleAndroidUI
- groovy-gradle-task(二)Gradle
- groovy-gradle-setting.gradle和sourceGradle
- Android Gradle Groovy自動化構建進階篇AndroidGradle
- Gradle系列(一) Groovy 基礎Gradle
- 不得不學之「 Gradle」 ② GroovyGradle
- Gradle 之語言基礎 GroovyGradle
- Gradle核心思想(二)Gradle入門前奏Gradle
- Gradle入門系列(四)——初識Gradle TaskGradle
- 第七篇.HFM規則入門(一)
- 【安卓筆記】gradle入門安卓筆記Gradle
- Gradle入門系列(三)——初識Gradle與ProjectGradleProject
- Gradle指南之從Groovy遷移到KotlinGradleKotlin
- Gradle入門系列(1):簡介Gradle
- Gradle學習之三Groovy高階語法Gradle
- Gradle入門系列(五)——Gradle其它模組與Plugin外掛GradlePlugin
- 不得不學之「 Gradle」 ①入門Gradle
- Gradle入門系列(3):依賴管理Gradle
- Gradle外掛從入門到進階Gradle
- Android Studio NDK :一、基礎入門(基於gradle-experimental外掛)AndroidGradle
- Gradle自動化專案構建之快速掌握GroovyGradle
- 於Groovy、開源的構建工具:Gradle 2.1釋出Gradle
- Android入門教程 | RecyclerView使用入門AndroidView
- Groovy 是一門 DSL 語言
- Gradle入門(翻譯自Graddle官網)Gradle
- Gradle入門(6):建立Web應用專案GradleWeb
- android 入門- 詞彙Android
- Android Bluetooth 入門Android
- Gradle入門及SpringBoot專案構建GradleSpring Boot