天天看點

使用Groovy開發Android應用

作者:snowdream email:yanghui1986527#gmail.com qq 群: 529327615

本文旨在引導開發者使用groovy來開發android應用。

groovy是一種基于jvm(java虛拟機)的靈活開發語言,它結合了python、ruby和smalltalk的許多強大的特性,groovy 代碼能夠與 java 代碼很好地結合,也能用于擴充現有代碼。由于其運作在 jvm 上的特性,groovy 可以使用其他 java 語言編寫的庫。

gradle是一個開源的自動化建構工具,主要用于持續釋出(continuous delivery)。

gradle主要基于java和groovy開發,用于支援多種開發語言和開發平台的自動化建構,包括java, scala, android, c/c++, 和 groovy, 并且可以無縫內建在eclipse, intellij, and jenkins等開發工具和持續內建服務中。

groovy-android-gradle-plugin是一款由groovy推出的插件,主要用于支援使用groovy來開發android應用。

執行個體展示:

<a href="https://github.com/snowdream/test/tree/master/android/groovy/helloworld">https://github.com/snowdream/test/tree/master/android/groovy/helloworld</a>

本節介紹使用groovy開發android應用,主要分兩種:

一種是隻使用groovy來開發,另外一種是混合使用groovy和java來開發。

至于groovy語言的文法和教程等,不在本文讨論範圍,請參考官網文檔和網上的開發教程。

以下幾點需要謹記:

所有groovy類檔案,以.groovy為字尾。

groovy的源碼目錄規則和預設的是一樣的。分别放在src/main/groovy, src/test/groovy, src/androidtest/groovy 和任意的src/${buildvariant}/groovy。

groovy的源碼目錄可以在build.gradle檔案中自定義,定義規則如下:

為了讓android studio識别這些自定義目錄為源碼目錄,可能還需要在android插件的sourcesets中再添加一遍。

僅僅使用groovy來開發android,步驟比較簡單。

1.在項目根目錄下的build.gradle檔案中添加以下代碼:

2.在子產品目錄下的build.gradle檔案中添加以下代碼:

3.配置完成,你可以在src/main/groovy目錄下愉快地使用groovy來寫android應用了。

僅僅使用groovy來開發android,步驟也比較簡單。

1.這一步,和上面的一樣。

3.配置完成,你既可以在src/main/groovy下寫groovy類,也可以在src/main/java下寫java類。

1.引用使用groovy開發的lib時,需要排除groovy的jar包。

例如:引用groovy-xml庫,操作如下:

2.groovy編譯選項在androidgroovy塊下的options塊進行編寫。

3.如果需要在java檔案中引用groovy檔案内容,需要将所有源碼檔案使用groovyc來編譯,而不要通過javac編譯。

4.如果需要用到注解(annoation),還需要作如下設定:

注: 這一步,首先要確定第三步已經設定skipjavac = true.

根據個人的開發實踐,總結出使用groovy開發android應用的優缺點:

引入groovy的諸多特性,包括閉包,函數式程式設計,靜态編譯,dsl等。

和java無縫內建,可以平滑過渡。

會将支援groovy的相關jar包打散,打包到apk中。這部分内容最終會給apk增加2~3m的大小。這個目前看來是硬傷,希望以後能夠精簡一下。

會将一些license檔案打包到apk中,這個可以通過android開發插件的packagingoptions進行過濾,問題不大。

和java相比,使用groovy的開發者還太少。

中文文檔少,主要是官方英文文檔。

使用groovy是可以開發android應用的。

在應用于生産實踐之前,還需要更多的評估,包括穩定性,運作效率,耗電量,相容性,研發的接受程度等。

<a href="http://www.infoq.com/cn/news/2014/06/groovy-android">groovy現在可運作于android平台</a>

<a href="https://github.com/groovy/groovy-android-gradle-plugin">groovy-android-gradle-plugin</a>

<a href="https://github.com/snowdream/test/tree/master/android/groovy/helloworld">groovy-android-helloworld</a>

<a href="http://www.groovy-lang.org/">groovy官網</a>

<a href="http://baike.baidu.com/view/707298.htm">groovy名詞解釋</a>

<a href="http://www.infoq.com/cn/news/2008/01/scala_or_groovy">java之外,選擇scala還是groovy?</a>

<a href="http://www.groovy-lang.org/">http://www.groovy-lang.org/</a>

<a href="https://gradle.org/">https://gradle.org/</a>