Android + Groovy + Android 注解

标签 android groovy android-annotations

我正在玩 android 和 android-annotiations,为什么不玩 groovy 呢……也许太多了 :D

AndroidAnnotations,在APT(Android Processing Tools)的帮助下生成可以在源代码中使用的帮助类,并且这个源代码在APT创建之前编译......

Groovy 是一种很棒的语言,可以在 Android 中运行,并且在 swissknife 的帮助下可以创建一个快速应用程序,这里有几个例子。

是否可以混合使用这两种方法?我想不是,但我可以问一下:)

查看这段代码...

构建.gradle

buildscript {
    repositories {
        jcenter()
        mavenLocal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'com.github.dcendents:android-maven-plugin:1.2'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
        classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.6'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'groovyx.grooid.groovy-android'

...

dependencies {
    ...
    compile 'com.github.batuypn:SmartConfigLibrary:v1.0.6'

代码

...
import groovy.transform.CompileStatic

import batuypn.android.smartconfiglibrary.SmartConfigLibrary_
import batuypn.android.smartconfiglibrary.SmartConfigLibrary_.*

// @CompileStatic
class SmartConfigActivity extends Activity implements SmartConfigLibrary_.Callback {
    private SmartConfigLibrary_ smartConfigLibrary;
...

错误

SmartConfigActivity.groovy: 16: unable to resolve class SmartConfigLibrary_.Callback
@ line 16, column 1. class SmartConfigActivity extends Activity implements SmartConfigLibrary_.Callback { ^

1 error

:compileDebugGroovy FAILED

最佳答案

从 Gradle 2.5 开始,您可以在 Groovy 源代码上使用“注释处理”。这在技术上不是 Groovy 处理,因为实际上 Gradle 强制 Groovy 编译器创建 Java stub ,然后处理该 stub 。处理器将创建 Java 源代码,这些源代码将在联合编译中与 Groovy 一起编译。这意味着您只能在 Groovy 构造上使用注释,这些构造在 Java 语言中具有等效项。但基本上这应该不是问题,因为处理器设计用于 Java。此外,您只能使用此功能来生成新类,而不能修改现有类,就像 lombok 以一种非常骇人听闻的方式所做的那样。从用户的角度来看,这个 Groovy 处理应该是透明的,不管它背后的技术如何。

我创建了一个示例项目来演示:https://github.com/WonderCsabo/androidannotations/tree/groovyExample/examples/gradle

编辑:android-apt 插件现在支持 Groovy Android 处理,因此 Gradle 配置更容易。我更改了上面的示例以利用 android-apt

您还可以添加 Java 源代码并对其进行处理,生成的类将可用于 Groovy。

关于Android + Groovy + Android 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31160831/

相关文章:

java - rest-assured : Cannot get property 'assertionClosure' on null object调用get时出现空指针异常

java - Firebase 检查是否存在在应该返回 true 的地方返回 false

gradle - 如何将管道添加到 groovy exec 命令行?

android - 如何在Android中更改开关的文本颜色

java - 如何在 Katalon Studio 中执行基本的 Java 代码

java - AndroidAnnotations Rest SourceHttpMessageConverter错误

android - Gradle + AndroidAnnotations 生成重复的类错误 - 需要在每次构建之前清理项目

Android注解不知道textview

Android 应用程序结构 - Activity 与 Fragment

java - 为什么我无法将NavigationOnClickListener 设置为工具栏?