Android RoboGuice 3.0 NoClassDefFoundError:AnnotationDatabaseImpl
出于某种原因,robobleander不会生成注释数据库。 My build.gradle具有以下依赖项:Android RoboGuice 3.0 NoClassDefFoundError:AnnotationDatabaseImpl,android,roboguice,Android,Roboguice,出于某种原因,robobleander不会生成注释数据库。 My build.gradle具有以下依赖项: dependencies { provided 'org.roboguice:roboblender:3.0' compile fileTree(dir: 'libs', include: ['*.jar']) compile 'org.roboguice:roboguice:3.0' } 项目结构的其余部分是什么样的 具体来说,你读过 默认情况下,Android
dependencies {
provided 'org.roboguice:roboblender:3.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'org.roboguice:roboguice:3.0'
}
项目结构的其余部分是什么样的 具体来说,你读过 默认情况下,Android Studio的更高版本将生成一个项目,该项目属于使用库为大型应用程序配置RoboBlender的
类别
下面的修复程序执行以下操作:
在build.gradle中重新排列依赖项
提供指向项目中GuiceModule的指针
项目的基本模块
好的,看来因为我在主类中没有任何注入,所以它没有触发内部类的注释处理。因此,未创建任何注释数据库
此外,似乎不支持匿名内部类中的注入。因此,AsyncTask
需要是一个合适的类(它仍然可以在main活动
中)
我还没有弄清楚如何让RoboGuice检查内部类,即使外部类没有注入。您必须做什么才能触发注释处理?我的主要活动是打针。maina活动继承自一个抽象活动,该抽象活动也有注入。这种抽象活动继承自RoboActivity
当我将roboguice.annotations.packages设置为roboguice时,将不再引发NoClassFound异常,但我将为我要使用的第一个inject对象获取一个NullPointer异常
我使用eclipse启动应用程序
当我禁用RoboBlender(RoboGuice.setUseAnnotationDatabases(false);)时,注入工作。注释DatabaseImpl在编译时生成
这里有一个解释
这不是最终的解决方案,但它可以帮助您。我不知道为什么,但是RoboGuice 3.0和3.0.1抛出了这个异常。您需要做的是禁用main活动中数据库的注释,如下所示:
static {
RoboGuice.setUseAnnotationDatabases(false);
}
我希望这有助于我在android清单中添加了编译器参数和元数据。您可以在以下位置找到完整的项目:错误仍然是:“在路径:/data/app/org.jush.roboguice3test.AnnotationDatabaseImpl”上未找到类“org.jush.roboguice3test-1.apk”AndroidManifest.xml
缺少类似于“``的内容,然后在您的项目中,也创建该模块。它很可能是空的。感谢您的建议,但即使我添加了它也没有帮助:我按照您的建议尝试了重新排序依赖项,并添加了带有应用程序参数的模块构造函数,但仍然存在相同的错误。如果您的活动继承自RoboActivity,那么这与我遇到的问题不同。此外,您还说,如果禁用注释数据库,那么它就可以工作。因此,注入工作正常,但未生成db。我也没有找到任何方法来触发内部匿名类的注入。我不得不转到它自己的类。Roboblender甚至可以与Eclipse一起工作吗?我一直在AnnotationDatabaseImpl上找到NoClassDef,但没有生成该类。你能解决这个问题吗?
package org.jush.roboguice3test;
import android.app.Application;
import com.google.inject.AbstractModule;
public class GuiceModule extends AbstractModule {
private Application application;
public GuiceModule(Application application) {
this.application = application;
}
@Override
protected void configure() {
}
}
static {
RoboGuice.setUseAnnotationDatabases(false);
}