2014-09-03 115 views
5

我一直在研究扩展AbstractProcessor的简单java注释处理器。如何在Gradle中使用自定义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应用程序中的所有源文件生成代码?

+0

我错过了您在手动编译时使用的编译器Args for Gradle。 – Peter 2014-09-03 17:11:34

+0

你最终找出了做这件事的正确方法吗? – 2015-09-05 11:43:24

回答

2

有一个插件可以使它工作。它的工作原理完全与那些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' 

它应该工作。

+4

它也适用于本地jar:'apt文件('libs/locallib.jar')' – WonderCsabo 2014-09-03 16:44:47

0

你在做什么是完全正确的,这里是我的一个项目,我作为一个库使用的例子:

dependencies { 
    compile project(':boundservice') 
} 
当然,你也应该做的

是定义添加的模块您库作为

android-library plagin而不是应用程序。

如果你使用New Module呢?这应该自动发生 - >Android Library选项,但也许因为这个项目,我的理解...无关与Android,你应该只选择了Java Library选项。

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