Android RoboGuice 3.0 NoClassDefFoundError:AnnotationDatabaseImpl

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

出于某种原因,robobleander不会生成注释数据库。 My build.gradle具有以下依赖项:

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);
    }