Roboblender 使用带有多个模块的注释数据库
Roboblender use annotation databases with multiple modules
我正在按照 RoboBlender Wiki 中的步骤使用注释数据库,但我一直收到 java.lang.IllegalStateException: Unable to use annotation database(s)
,因为它找不到 AnnotationDatabaseImpl
我正在使用 Android Studio 和 Gradle。该项目由多个模块组成。
- 应用程序
- 模块A
- 模块B
- 模块C
这是我添加到构建脚本中的内容:
app/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 正在删除 class。通过添加修复:
-keep public class * extends com.google.inject.AnnotationDatabase
您是否在 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"/>
几个小时后我发现了问题。这是proguard。添加以下行解决了问题。
-keep public class * extends com.google.inject.AnnotationDatabase
您可以在项目文件夹中检查 类 是否由 运行 生成:
find . | grep -i AnnotationDatabaseImpl
我正在按照 RoboBlender Wiki 中的步骤使用注释数据库,但我一直收到 java.lang.IllegalStateException: Unable to use annotation database(s)
,因为它找不到 AnnotationDatabaseImpl
我正在使用 Android Studio 和 Gradle。该项目由多个模块组成。
- 应用程序
- 模块A
- 模块B
- 模块C
这是我添加到构建脚本中的内容:
app/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 正在删除 class。通过添加修复:
-keep public class * extends com.google.inject.AnnotationDatabase
您是否在 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"/>
几个小时后我发现了问题。这是proguard。添加以下行解决了问题。
-keep public class * extends com.google.inject.AnnotationDatabase
您可以在项目文件夹中检查 类 是否由 运行 生成:
find . | grep -i AnnotationDatabaseImpl