2016-01-13 40 views
9

To nie zawsze jest widoczne, ale widać na konkretnym API 14 i 19.RoboGuice 3,0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector

Poniżej 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) 

Już problemem jest rejestrowane z RoboGuice 3.0: https://github.com/roboguice/roboguice/issues/328

Ale brak odpowiedzi, a obecnie jesteśmy zablokowani.

problem został rozwiązany

odniosłem MultiDex Document bardziej dokładnie ten czas i aktualizowane mój AndroidManifest.xml poniżej, że ominęło

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

używasz proguard w swoim build.gradle? –

+0

Służy do budowania wersji wydania, a nie do debugowania. Otrzymuję ten błąd podczas uruchamiania debugowania. – rsakhale

+0

Wydaje się, że problem dotyczy wielu dysków. Czy używasz wielościeżkowego do kompilacji debugowania? –

Odpowiedz

1

proponuję wykonać następujące czynności -

  1. sprawdzić, czy to jest problem limitów metod (multikserów 65k), próbując uruchomić kompilację wydania z Proguard, usuwając nieużywane funkcje i zmniejszając liczbę funkcje w dokumencie.

  2. Wywołanie java.lang.NoClassDefFoundError może być również spowodowane wyjątkami zgłaszanymi podczas inicjowania zmiennej statycznej/obiektu. Sprawdź, czy używasz/dziedziczenia z klasy RoboGuice lub używając kodu inicjalizacyjnego z obiektami statycznymi lub blokami kodu. Problem może pochodzić stąd.

Również spojrzeć na RoboGuice 3.0 NoClassDefFoundError: AnnotationDatabaseImpl może pomóc (mimo że błąd użytkownik robi to o innej klasy, to jest to, że od inicjalizacji obiektu statycznego).

powodzenia.

+0

Bez tego też nie ma szczęścia. – rsakhale

+0

Niż powiedziałbym, że nadszedł czas, aby otworzyć problem w repozytorium RoboGuice na GitHub ... – FunkSoulBrother

3

z linku git którym pisał w odpowiedzi

otrzymuję ten błąd na poziomie 14 i API API Level 19 urządzeń. Podczas próby wyszukania klasy widzę, że ta klasa jest dostępna, ale nadal ma wyjątek NoClassDefFoundException. Dzieje się tak tylko w przypadku niektórych nie zawsze

Ten błąd będzie pochodzić z powodu MultiDexApplication .I mieć twarz tego rodzaju kwestii z innego biblioteka nie samej biblioteki, ale jakiś inny library.It będzie błąd biblioteki RoboGuice ponieważ jego inicjalizacja uruchamiania aplikacji, gdzie dex (w którym twój kod biblioteki RoboGuice jest konwertowany na dex) nie jest ustawiony plik (install).

Aby rozwiązać problem obsługi wielu plików Dex. z pomocą applicaiton build.gradle & Application class

poniżej zmiany, które są wymagane w build.gradle pliku

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. 

} 

Cały 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. 

} 

Jeśli aplikacja używa rozszerza Applicationclass można zastąpić attachBaseContext() i wywołaj MultiDex.zainstaluj (to), aby włączyć wielościeżkowe. Aby install multipledex file context użyciu klasę Applicaiton który powinien rozciąga MultiDexApplication

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

Daj mi znać, jeśli w ogóle.

+0

Próbowałem tego, ale to nie pomogło z powodu problemu z przestrzenią, ponieważ nie można utworzyć wirtualnej maszyny Java z podaną konfiguracją. – rsakhale

+0

Którego ide używasz ..? Jeśli jest to studio, czy możesz opublikować swój build.gradle. – user1140237

+0

Używam Androida Studio 1.5.1, mój problem został rozwiązany przez dodanie 'android: name =" android.support.multidex.MultiDexApplication "' do ' rsakhale