使用Groovy开发Android应用

简介:

作者:snowdream
Email:yanghui1986527#gmail.com
QQ 群: 529327615
原文地址:https://snowdream.github.io/blog/2016/08/12/android-develop-with-groovy/

目标

本文旨在引导开发者使用Groovy来开发Android应用。

简介

名词解释

Groovy

Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。

官方网站:http://www.groovy-lang.org/

Github仓库:https://github.com/apache/groovy

Gradle

Gradle是一个开源的自动化构建工具,主要用于持续发布(Continuous Delivery)。
Gradle主要基于Java和Groovy开发,用于支持多种开发语言和开发平台的自动化构建,包括Java, Scala, Android, C/C++, 和 Groovy, 并且可以无缝集成在Eclipse, IntelliJ, and Jenkins等开发工具和持续集成服务中。

官方网站:https://gradle.org/

Github仓库:https://github.com/gradle/gradle

Groovy with Android

groovy-android-gradle-plugin是一款由groovy推出的插件,主要用于支持使用groovy来开发android应用。

Github仓库: groovy-android-gradle-plugin

实例展示:
https://github.com/snowdream/test/tree/master/android/groovy/HelloWorld

教程

本节介绍使用Groovy开发android应用,主要分两种:
一种是只使用Groovy来开发,另外一种是混合使用Groovy和Java来开发。

至于Groovy语言的语法和教程等,不在本文讨论范围,请参考官网文档和网上的开发教程。

以下几点需要谨记:

  1. 所有Groovy类文件,以.groovy为后缀。
  2. 任何新建的Groovy类,请在类的头部加上注解:@CompileStatic .具体原因请移步:Melix's blog 和 [here for more technical details
    ](http://melix.github.io/blog/2014/06/grooid2.html)
  3. Groovy的源码目录规则和默认的是一样的。分别放在src/main/groovy, src/test/groovy, src/androidTest/groovy 和任意的src/${buildVariant}/groovy。
  4. Groovy的源码目录可以在build.gradle文件中自定义,定义规则如下:
androidGroovy {
  sourceSets {
    main {
      groovy {
        srcDirs += 'src/main/java'
      }
    }
  }
}

为了让Android Studio识别这些自定义目录为源码目录,可能还需要在android插件的sourceSets中再添加一遍。

Groovy

仅仅使用Groovy来开发android,步骤比较简单。
1.在项目根目录下的build.gradle文件中添加以下代码:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        classpath 'org.codehaus.groovy:groovy-android-gradle-plugin:1.0.0'
    }
}

2.在模块目录下的build.gradle文件中添加以下代码:

apply plugin: 'groovyx.android'
dependencies {
    compile 'org.codehaus.groovy:groovy:2.4.6:grooid'
}

3.配置完成,你可以在src/main/groovy目录下愉快地使用Groovy来写Android应用了。

实例展示:https://github.com/groovy/groovy-android-gradle-plugin/tree/master/groovy-android-sample-app

Groovy and Java

仅仅使用Groovy来开发android,步骤也比较简单。

1.这一步,和上面的一样。
2.在模块目录下的build.gradle文件中添加以下代码:

apply plugin: 'groovyx.android'


androidGroovy {
    skipJavaC = true

    sourceSets {
        main {
            groovy {
                srcDirs += 'src/main/java'
            }
        }
    }

    options {
        configure(groovyOptions) {
            encoding = 'UTF-8'
            forkOptions.jvmArgs = ['-noverify'] // maybe necessary if you use Google Play Services
            javaAnnotationProcessing = true
        }
        sourceCompatibility = '1.7' // as of 0.3.9 these are automatically set based off the android plugin's
        targetCompatibility = '1.7'
    }
}

dependencies {
    compile 'org.codehaus.groovy:groovy:2.4.6:grooid'
}

3.配置完成,你既可以在src/main/groovy下写Groovy类,也可以在src/main/java下写Java类。

实例展示:https://github.com/snowdream/test/tree/master/android/groovy/HelloWorld

注意事项

1.引用使用groovy开发的lib时,需要排除groovy的jar包。

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

compile ('org.codehaus.groovy:groovy-xml:2.4.3') {
    exclude group: 'org.codehaus.groovy'
}

2.Groovy编译选项在androidGroovy块下的options块进行编写。

androidGroovy {
  options {
    configure(groovyOptions) {
      encoding = 'UTF-8'
      forkOptions.jvmArgs = ['-noverify'] // maybe necessary if you use Google Play Services
    }
    sourceCompatibility = '1.7' // as of 0.3.9 these are automatically set based off the android plugin's
    targetCompatibility = '1.7'
  }
}

3.如果需要在java文件中引用Groovy文件内容,需要将所有源码文件使用groovyc来编译,而不要通过javac编译。

androidGroovy {
  skipJavaC = true
}

4.如果需要用到注解(annoation),还需要作如下设置:

androidGroovy {
  options {
    configure(groovyOptions) {
      javaAnnotationProcessing = true
    }
  }
}

注: 这一步,首先要确保第三步已经设置skipJavaC = true.

5.如果需要用到Data Binding,需要用到一个插件https://bitbucket.org/hvisser/android-apt

更多配置,请参考: groovy-android-gradle-plugin

总结

根据个人的开发实践,总结出使用Groovy开发Android应用的优缺点:

优点

  1. 引入Groovy的诸多特性,包括闭包,函数式编程,静态编译,DSL等。
  2. 和Java无缝集成,可以平滑过渡。

缺点

  1. 会将支持Groovy的相关jar包打散,打包到apk中。这部分内容最终会给apk增加2~3M的大小。这个目前看来是硬伤,希望以后能够精简一下。
  2. 会将一些License文件打包到apk中,这个可以通过android开发插件的packagingOptions进行过滤,问题不大。
  3. 和java相比,使用Groovy的开发者还太少。
  4. 中文文档少,主要是官方英文文档。

结论

  1. 使用Groovy是可以开发Android应用的。
  2. 在应用于生产实践之前,还需要更多的评估,包括稳定性,运行效率,耗电量,兼容性,研发的接受程度等。

参考

  1. Groovy现在可运行于Android平台
  2. groovy-android-gradle-plugin
  3. groovy-android-helloworld
  4. Groovy官网
  5. Groovy名词解释
  6. Java之外,选择Scala还是Groovy?
  7. http://www.groovy-lang.org/
  8. https://gradle.org/
相关文章
|
18小时前
|
Dart IDE Linux
开发Android应用程序
开发Android应用程序
4 1
|
18小时前
|
XML 存储 数据库
如何使用Android Studio创建一个基本的音乐播放器应用
如何使用Android Studio创建一个基本的音乐播放器应用
9 0
|
1天前
|
安全 IDE Android开发
探索Android与iOS开发的差异:平台特性与编程实践
【6月更文挑战第17天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据半壁江山。它们在用户群体、系统架构以及开发环境上的差异,为开发者带来了不同的挑战和机遇。本文深入探讨了这两个平台在技术实现、界面设计、性能优化等方面的主要区别,并提供了实用的开发建议,旨在帮助开发者更好地理解各自平台的特性,从而创造出更加优秀的移动应用。
|
1天前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
4天前
|
安全 Android开发 iOS开发
探索Android与iOS开发的差异:平台特性与用户体验的对比分析
在移动应用开发的广阔天地中,Android和iOS两大阵营各据一方。本文将深入探讨这两个操作系统在开发环境、编程语言、用户界面设计及市场分布等方面的主要区别。通过比较分析,我们将揭示各自平台的特有优势,并讨论如何根据目标受众和业务需求选择适合的开发平台。
|
4天前
|
前端开发 测试技术 API
探索安卓应用的架构演进:从MVC到MVVM
本篇文章将深入探讨安卓应用开发中的架构演进,特别关注从传统的MVC(Model-View-Controller)到现代流行的MVVM(Model-View-ViewModel)架构的转变。通过对比两种架构的设计理念、实现方式和实际应用案例,解析MVVM在提高代码可维护性和可测试性方面的优势。
9 0
|
4天前
|
前端开发 JavaScript Android开发
手机APP开发|基于安卓APP实现掌上党支部——党员app
手机APP开发|基于安卓APP实现掌上党支部——党员app
|
5天前
|
安全 Java Android开发
探索Android与iOS开发的差异与挑战
在移动应用开发的广阔天地里,Android和iOS两大平台各自占据半壁江山。本文将深入探讨这两个平台的开发环境、工具、语言以及设计理念的差异,并分析这些差异给开发者带来的挑战。我们将从多个角度出发,包括用户界面设计、性能优化、安全性考量、以及市场分布等方面,为读者提供一个全面的视角,以理解在这两个平台上进行开发时需要考虑的关键因素。
|
6天前
|
存储 Android开发 Kotlin
Kotlin开发安卓app,在使用 MediaPlayer 播放 res/raw 中的音乐时遇到突然中断的问题,而 onErrorListener 没有接收到任何报错
在使用 Android MediaPlayer 播放 res/raw 中的音乐时遇到中断问题,可能的原因包括资源问题、媒体文件编码格式、生命周期管理和设备资源配置。要排查问题,检查音频文件是否正确包含,格式编码是否支持,MediaPlayer 是否正确管理及释放,以及设备是否有足够存储和配置。通过设置 onErrorListener 日志和确保在 onDestroy 中释放资源来调试。如果文件过大,考虑使用 AssetManager。遵循这些步骤可帮助诊断并解决播放中断的问题。
|
6天前
|
Android开发 Kotlin
kotlin开发安卓应用 如何修改app安装后的名称
在 Android 应用中,要修改安装后的显示名称,需更新 AndroidManifest.xml 文件中 application 标签的 android:label 属性。可直接在该属性内设置新名称,或在 res/values/strings.xml 文件中修改 app_name 并在 manifest 中引用。推荐使用 strings.xml 方式,以便支持多语言和集中管理。