2016-01-13 8 views
9

Dies ist nicht immer gesehen, aber auf bestimmte API 14 und 19RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector

Unten ist die stacktrace

java.lang.NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector 
    at roboguice.RoboGuice.getInjector(RoboGuice.java:197) 
    at roboguice.activity.RoboActivity.onCreate(RoboActivity.java:90) 
    at com.bnmcombines.galleryflavors.Launcher.onCreate(Launcher.java:71) 
    at android.app.Activity.performCreate(Activity.java:5343) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2441) 
    at android.app.ActivityThread.access$900(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
    at android.os.Handler.dispatchMessage(Handler.java:110) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:5345) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 
    at dalvik.system.NativeStart.main(Native Method) 

schon ein Problem mit RoboGuice 3.0 angemeldet gesehen: https://github.com/roboguice/roboguice/issues/328

Aber keine Antwort und wir sind derzeit blockiert.

Problem behoben

I bezeichnet MultiDex Document vorsichtiger diesmal und aktualisiert mein AndroidManifest.xml auf unter, dass ich

<application 
     ... 
     android:name="android.support.multidex.MultiDexApplication"> 
     ... 
    </application> 
</manifest> 
+0

verwenden Sie proguard in Ihrem build.gradle? –

+0

Es ist in Release-Build-Typ und nicht in Debug verwendet, bekomme ich diesen Fehler, während Debug selbst ausgeführt – rsakhale

+0

Scheint wie ein Multidex-Problem. Verwenden Sie Multidex für Ihre Debug-Builds? –

Antwort

1

verpasst hatte ich vor, Folgendes zu tun -

  1. Überprüfen Sie, ob Dies ist ein Problem mit 65.000 Methodenlimits (multidex), in dem versucht wird, einen Releasebuild auszuführen, bei dem Proguard unbenutzte Funktionen entfernt und die Anzahl reduziert Funktionen im Dex.

  2. java.lang.NoClassDefFoundError kann auch verursacht werden, wenn Ausnahmen bei statischen Variablen/Objektinitialisierung geworfen werden. Überprüfen Sie, ob Sie eine/aus einer RoboGuice-Klasse erben oder einen Initialisierungscode mit statischen Objekten oder Codeblöcken verwenden. Das Problem kann von dort kommen.

Werfen Sie auch einen Blick auf RoboGuice 3.0 NoClassDefFoundError: AnnotationDatabaseImpl, kann es Ihnen helfen, (obwohl der Fehler der Benutzer über eine andere Klasse wird immer, sie Initialisierung der eines statischen Objekt ist).

viel Glück.

+0

Kein Glück anderes auch dies. – rsakhale

+0

Dann würde ich sagen, es ist Zeit, ein Problem im RoboGuice-Repo bei GitHub zu öffnen ... – FunkSoulBrother

3

Vom git Link, den Sie in der Antwort gepostet

immer diese Fehlermeldung auf API-Ebene 14 und API Stufe 19 Geräte. Beim Versuch, nach der Klasse zu suchen, sehe ich, dass diese Klasse verfügbar ist, aber immer noch NoClassDefFoundException bekommen, was seltsam ist. Dies geschieht nur unter bestimmten Fall nicht immer

Dieser Fehler wegen MultiDexApplication .Ich habe Gesicht, diese Art von Problem mit einer anderen Bibliothek nicht derselben Bibliothek kommen, aber einige andere library.It werden Fehler der RoboGuice Bibliothek, weil sein Initialisierung der App starten, wo Dex (in dem Ihre RoboGuice-Bibliothek Code in Dex konvertiert wird) Datei ist nicht zu setzen (installieren).

Um dies zu beheben, müssen Sie Multiple Dex-Datei behandeln. mit Hilfe von applicaiton build.gradle & Application class

unter Veränderungen, die in build.gradle Datei

dexOptions { 
     incremental true 
     // here heap size give 4g i got this thing from https://groups.google.com/forum/#!topic/adt-dev/P_TLBTyFWVY 

     javaMaxHeapSize "4g" 
    } 


dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
    // your dependencies which you are using. 

} 

Entire build.gradle

apply plugin: 'com.android.application' 
repositories { 
    mavenCentral()// for new android studio version it can be jcenter() 

} 
configurations { 
// all*.exclude group: 'com.android.support', module: 'recyclerview-v7' 
} 

android { 
    signingConfigs { 
     /* 
     releasebuild { 
      keyAlias 'hellotest' 
      keyPassword 'hellotest' 
      storeFile file('path to keystore') 
      storePassword 'hellotest' 
     } 
     */ 
    } 
    compileSdkVersion 'Google Inc.:Google APIs:22' 
    buildToolsVersion '23.0.0' 
    /* if you got error regarding duplicate file of META-INF/LICENSE.txt from jar file 
    packagingOptions { 
     exclude 'META-INF/LICENSE.txt' 
    } 
    */ 
    dexOptions { 
     jumboMode = true 
     incremental true 
     // here heap size give 4g i got this thing from https://groups.google.com/forum/#!topic/adt-dev/P_TLBTyFWVY 

     javaMaxHeapSize "4g" 
    } 
    defaultConfig { 
     multiDexEnabled true 
     applicationId "com.myapp.packagenme" 
     minSdkVersion 17 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      signingConfig signingConfigs.releasebuild 
     } 
     debug { 
      signingConfig signingConfigs.releasebuild 
     } 
    } 
} 

dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
    // your dependencies which you are using. 

} 

Wenn Ihre App nutzt erweitert die Applicationclass erforderlich ist, können Sie die attachBaseContext außer Kraft setzen können() -Methode und rufen Sie MultiDex auf.install (this) um multidex zu aktivieren. Um install multipledex file context applicaiton-Klasse, die sollte MultiDexApplication

public class MyAppClass extends MultiDexApplication{ 
@Override 
    protected void attachBaseContext(Context newBase) { 
     MultiDex.install(newBase); 
     super.attachBaseContext(newBase); 
    } 
} 

Lassen Sie mich, wenn etwas wissen erstreckt.

+0

Ich versuchte dies, aber es half nicht wegen Platzproblem, da es angegeben Java Virtual Machine mit gegebener Konfiguration nicht erstellen kann. – rsakhale

+0

Welche Idee verwendest du? Wenn es Studio ist, können Sie bitte Ihre build.gradle posten. – user1140237

+0

Ich benutze Android Studio 1.5.1, mein Problem wurde gerade gelöst, indem ich 'android: name =" android.support.multidex.MultiDexApplication "' zu ' rsakhale