如何在Gradle中使用自定义Java注释处理器?

时间:2014-09-03 16:34:09

标签: java android gradle android-studio annotation-processing

我一直在研究一个扩展AbstractProcessor的简单java注释处理器。

我已经能够使用javac -Processor MyProcessor mySource.java

成功测试了这一点

问题是将它集成到使用Android Studio的简单Hello World Android应用程序中。

我首先制作了一个新的Android项目,然后添加了一个单独的模块,我放置了所有的注释处理器代码(MyProcessor类以及它使用的自定义注释)。

然后我将这个新模块添加为HelloWorld android项目的依赖项。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':MyProcessorModule')
}

如何使用处理器根据HelloWorld应用程序中的所有源文件生成代码?

3 个答案:

答案 0 :(得分:3)

有一个插件可以让它工作。它与Maven上的模块完美配合,不确定本地.jar文件,但你确定试一试:

这里是插件页面:https://bitbucket.org/hvisser/android-apt

这里是我的build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        ... add this classpath to your buildscript dependencies
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt' << apply the plugin after the android plugin

dependencies {
    // in dependencies you call it
    apt 'com.company.myAnnotation:plugin:1.0-SNAPSHOT'
    compile 'com.company.myAnnotation:api:1.0-SNAPSHOT'

它应该有用。

答案 1 :(得分:1)

使用android-apt插件。更好的是,派一个已经使用android-apt插件开发本地注释处理器的sample project

了解sample project here

答案 2 :(得分:0)

你正在做的事情是完全正确的,这是我用作图书馆的一个项目的例子:

dependencies {
    compile project(':boundservice')
}

当然您还应该做的是将您添加库的模块定义为

android-library plagin而非申请。

如果您使用New Module - &gt;执行此操作,则会自动执行此操作Android Library选项,但也许正如我所理解的这个项目......与Android无关,您应该选择Java Library选项。

当你这样做并同步build.gradle文件时(也许有点干净的构建应该也有帮助)你应该能够在Android项目中使用你的类文件。