Roboblender使用具有多个模块的注释数据库

时间:2015-06-12 19:37:48

标签: android gradle dependency-injection roboguice roboblender

我正在按照RoboBlender Wiki中的步骤使用注释数据库,但我一直收到java.lang.IllegalStateException: Unable to use annotation database(s),因为它无法找到AnnotationDatabaseImpl

我正在使用Android Studio和Gradle。该项目由多个模块组成。

  • 应用
  • moduleA
  • moduleB
  • moduleC

以下是我添加到构建脚本中的内容:

应用程序/的build.gradle:

dependencies {
  provided 'org.roboguice:roboblender:3.0.1'
  provided 'org.roboguice:roboblender:3.0.1'
}
project.tasks.withType(JavaCompile) { task ->
    options.compilerArgs << "-AguiceAnnotationDatabasePackageName=com.sample.myapp"
}

模块[X] /build.gradle:

project.tasks.withType(JavaCompile) { task ->
    options.compilerArgs << "-AguiceAnnotationDatabasePackageName=com.sample.module[x]"
}

在应用程序对象上:

 RoboGuice.setUseAnnotationDatabases(true);
 RoboGuice.getOrCreateBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE,
 RoboGuice.newDefaultRoboModule(this), new MyModule());
        RoboGuice.injectMembers(this, this);

我错过了什么吗?我发现了一些类似的问题,但它们并不是很有用。

更新: 我忘记了第一次添加它,但是我包括清单元。

<meta-data android:name="roboguice.modules" android:value="your.package.MyModule"/>  
<meta-data android:name="roboguice.annotations.packages" android:value="com.sample.myapp,com.sample.modulex,com.sample.moduley"/>

更新2: 我终于找到了问题。 Proguard正在删除该课程。修正了:

-keep public class * extends com.google.inject.AnnotationDatabase

2 个答案:

答案 0 :(得分:2)

您是否在AndroidManifest.xml

中列出了模块和注释数据库?
    <meta-data android:name="roboguice.modules" android:value="your.package.MyModule"/>  
    <meta-data android:name="roboguice.annotations.packages" android:value="com.sample.myapp,com.sample.modulex,com.sample.moduley"/>

答案 1 :(得分:2)

几个小时后我发现了问题。这是进展。添加以下行修复了问题。

-keep public class * extends com.google.inject.AnnotationDatabase

您可以通过在项目文件夹中运行来检查是否正在生成类:

find . | grep -i AnnotationDatabaseImpl