2014-10-30 12 views
5

Per qualche motivo, RoboBlender non genera il database delle annotazioni. mio build.gradle ha le seguenti dipendenze:RoboGuice 3.0 NoClassDefFoundError: AnnotationDatabaseImpl

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

risposta

0

Che cosa significa il resto della vostra struttura di progetto simile?

In particolare, Hai letto il RoboBlender wiki

versioni successive di Android Studio sarà, per impostazione predefinita, genera un progetto che rientra nella Configuring RoboBlender for a large application using libraries -category.

Fix sotto esegue le seguenti operazioni:

  1. Riorganizzare dipendenze in build.gradle
  2. Forniture puntatore GuiceModule nel progetto
  3. modulo Rudimentary per il vostro progetto


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

ho aggiunto gli argomenti compilatore ei meta-dati nel manifest di Android. Puoi trovare il progetto completo all'indirizzo: https://github.com/jush/RoboGuice3Test L'errore è ancora: "Non ho trovato la classe" org.jush.roboguice3test.AnnotationDatabaseImpl "sul percorso:/data/app/org .jush.roboguice3test-1.apk " – jush

+0

' '' AndroidManifest.xml''' manca qualcosa come '' '' '' e poi il tuo nel tuo progetto, crea quel modulo pure. Potrebbe benissimo essere vuoto. –

+0

grazie per il suggerimento ma non è stato d'aiuto anche se l'ho aggiunto: https://github.com/jush/RoboGuice3Test/commit/0726a14e447b81b5fd003fde0f0d03957a96e9e8 – jush

1

Ok, così sembra che da quando non ho avuto alcuna iniezione nella classe principale MainActivity non ha innescare la trasformazione di annotazione della interno AsyncTask. Pertanto non è stato creato alcun database di annotazioni.

Inoltre, sembra che l'iniezione in classi interne anonime non sia supportata. Quindi lo AsyncTask deve essere una classe appropriata (può ancora essere all'interno dello MainActivity).

Non ho ancora capito come dire a RoboGuice di ispezionare le classi interne anche se quella esterna non ha iniezioni.

+0

sei riuscito a capirlo? – amadib

+1

No, abbiamo deciso di passare a [Dagger 2] (http://google.github.io/dagger/). – jush

0

Cosa hai dovuto fare per attivare l'elaborazione dell'annotazione? La mia attività principale ha iniezioni. L'attività di maina eredita da un'attività astratta che ha anche iniezioni. Questa attività astratta eredita da RoboActivity.

Quando ho impostato il roboguice.annotations.packages a roboguice l'eccezione NoClassFound non viene gettato più, ma ho un Exception NullPointer per la prima iniettare-Object che voglio uso.

Uso eclipse per avviare l'app.

Quando disattivo l'esecuzione di RoboBlender (RoboGuice.setUseAnnotationDatabases (false);).

+0

Se la tua attività viene ereditata da RoboActivity, si tratta di un problema diverso da quello che avevo. Inoltre, si dice che se si disabilita il database di annotazione, allora funziona. Pertanto, l'iniezione funziona ma il db non viene generato. Inoltre non ho trovato alcun modo per attivare l'iniezione della classe anonima interna. Dovevo trasferirmi nella sua classe. – jush

+0

Roboblender funziona anche con Eclipse? Continuo a ricevere noclassdeffound su AnnotationDatabaseImpl, la classe non viene generata. – Christine

4

Questa non è una soluzione definitiva, ma può aiutare. Non so perché, ma RoboGuice 3.0 e 3.0.1 lancia questa eccezione.Quello che devi fare è disattivare le annotazioni per i database nel MainActivity come segue:

static { 
    RoboGuice.setUseAnnotationDatabases(false); 
} 

Spero che questo aiuto