2014-10-30 9 views
5

Aus irgendeinem Grund generiert der RoboBlender die Annotationsdatenbank nicht. Mein build.gradle hat die folgenden Abhängigkeiten:RoboGuice 3.0 NoClassDefFoundError: AnnotationDatabaseImpl

dependencies { 
    provided 'org.roboguice:roboblender:3.0' 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'org.roboguice:roboguice:3.0' 
} 

Antwort

0

Was bedeutet der Rest Ihrer Struktur Projekt aussehen?

Insbesondere haben Sie die RoboBlender wiki

Spätere Versionen von Android Studio gelesen werden, standardmäßig ein Projekt erzeugen, die in das Configuring RoboBlender for a large application using libraries -Niveau fällt.

Fix unten führt Folgendes aus:

  1. Rearrange Abhängigkeiten in build.gradle
  2. Zeiger Bedarf im Projekt
  3. Rudimentär Modul für Ihr Projekt GuiceModule


diff --git a/app/build.gradle b/app/build.gradle 
index 1e69cec..8450fff 100644 
--- a/app/build.gradle 
+++ b/app/build.gradle 
@@ -34,9 +34,9 @@ android { 
} 

dependencies { 
- provided 'org.roboguice:roboblender:3.0' 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'org.roboguice:roboguice:3.0' 
+ provided 'org.roboguice:roboblender:3.0' 
} 

project.tasks.withType(JavaCompile) { task -> 
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml 
index 017d11e..dba9e49 100644 
--- a/app/src/main/AndroidManifest.xml 
+++ b/app/src/main/AndroidManifest.xml 
@@ -8,6 +8,7 @@ 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <meta-data android:name="roboguice.annotations.packages" android:value="org.jush.roboguice3test"/> 
+  <meta-data android:name="roboguice.modules" android:value="org.jush.roboguice3test.GuiceModule"/> 
     <activity 
      android:name="org.jush.roboguice3test.MainActivity" 
      android:label="@string/app_name" > 


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() { 
    } 
} 
+0

Ich fügte hinzu, die Compiler-Argumente und die Meta-Daten in Android-Manifest. Sie finden das vollständige Projekt unter: https://github.com/jush/RoboGuice3Test Der Fehler ist immer noch: "nicht gefunden Klasse" org.jush.roboguice3test.AnnotationDatabaseImpl "auf Pfad:/data/app/org .jush.roboguice3test-1.apk " – jush

+0

' '' AndroidManifest.xml''' fehlt etwas wie '' '' '' und dann Ihr in Ihrem Projekt, erstellen Sie auch dieses Modul. Es könnte sehr gut leer sein. –

+0

danke für den Vorschlag, aber es hat nicht geholfen, obwohl ich es hinzugefügt: https://github.com/jush/RoboGuice3Test/commit/0726a14e447b81b5fd003fde0f0d03957a96e9e8 – jush

1

Ok, so scheint es, dass ich da keine Einspritzung in der Hauptklasse hatte MainActivity es nicht die Anmerkung Verarbeitung der inneren AsyncTask nicht verursacht hätte. Daher wurde keine Annotationsdatenbank erstellt.

Darüber hinaus scheint es, dass die Injektion in anonyme innere Klassen nicht unterstützt wird. Also muss die AsyncTask eine richtige Klasse sein (sie kann immer noch innerhalb der MainActivity sein).

Ich habe noch nicht herausgefunden, wie man RoboGuice sagt, die inneren Klassen zu untersuchen, obwohl der äußere keine Injektionen hat.

+0

konnten Sie das herausfinden? – amadib

+1

Nein, wir haben uns entschieden, zu [Dagger 2] (http://google.github.io/dagger/) zu wechseln. – jush

0

Was mussten Sie tun, dass die Annotationsverarbeitung ausgelöst wurde? Meine Haupttätigkeit hat Injektionen. Die maina-Aktivität erbt von einer abstrakten Aktivität, die auch Injektionen hat. Diese abstrakte Aktivität erbt von RoboActivity.

Wenn ich die roboguice.annotations.packages zu roboguice die NoClassFound Ausnahme nicht mehr geworfen wird, aber ich erhalte eine Nullpointer-Ausnahme für das erste Inject-Objekt, das ich verwenden möchte.

Ich benutze Eclipse, um die App zu starten.

Wenn ich RoboBlender deaktivieren (RoboGuice.setUseAnnotationDatabases (false);) Injektion funktioniert.

+0

Wenn Ihre Aktivität von RoboActivity erbt, ist das ein anderes Problem als das, das ich hatte. Darüber hinaus sagen Sie, dass es funktioniert, wenn Sie die Annotation-Datenbank deaktivieren. Daher funktioniert die Injektion, aber die db wird nicht generiert. Auch ich habe keine Möglichkeit gefunden, die Injektion der inneren anonymen Klasse auszulösen. Ich musste in eine eigene Klasse wechseln. – jush

+0

Funktioniert der Roboblender überhaupt mit Eclipse? Ich bekomme noclassdeffound auf AnnotationDatabaseImpl, die Klasse wird nicht generiert. – Christine

4

Dies ist keine endgültige Lösung, aber es kann Ihnen zur Verfügung steht helfen. Ich weiß nicht warum, aber RoboGuice 3.0 und 3.0.1 löst diese Ausnahme aus.Was Sie tun müssen, ist zu deaktivieren Anmerkungen für Datenbanken in Ihrem MainActivity wie folgt:

static { 
    RoboGuice.setUseAnnotationDatabases(false); 
} 

Ich hoffe, diese Hilfe