2014-04-30 6 views
6

Ich benutze Dolch in einer Android-Anwendung. Es funktioniert in der Anwendung, aber wenn ich die Instrumentierungstests ausführen, bekomme ich einen NoClassDefFoundError.Dolch-Code, der NoClassDefFoundError in Android-Instrumentierungstests gibt, funktioniert aber in der normalen Anwendung

Ich benutze Gradle und Espresso. Dies geschieht OHNE progaurd.

Das ist merkwürdig, da das "Module $$ ModuleAdapter" geladen wird, aber "Module $$ ModuleAdapter $ EndpointProvidesAdapter" nicht.

Ich zog die APK vom Gerät zurück und verwendete Dexdump, um zu verifizieren, dass die Klasse tatsächlich in der APK ist, "Module $$ ModuleAdapter $ EndpointProvidesAdapter".

Irgendwelche Ideen zu was könnte das verursachen?

java.lang.NoClassDefFoundError: Module$$ModuleAdapter$EndpointProvidesAdapter 
      at ...Module$$ModuleAdapter.getBindings(MslModule$$ModuleAdapter.java:33) 
      at ...Module$$ModuleAdapter.getBindings(MslModule$$ModuleAdapter.java:13) 
      at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:185) 
      at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:138) 
      at dagger.ObjectGraph.create(ObjectGraph.java:129) 
      at ...Application.onCreate(...Application.java:21) 
      at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007) 
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344) 
      at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5017) 
      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:779) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class ...Module$$ModuleAdapter$MslEndpointProvidesAdapter" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/....test-1.apk", zip file "/data/app/...-2.apk"],nativeLibraryDirectories=[/data/app-lib/....test-1, /data/app-lib/...-2, /vendor/lib, /system/lib]] 
      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
            at ...Module$$ModuleAdapter.getBindings(MslModule$$ModuleAdapter.java:33) 
            at ...Module$$ModuleAdapter.getBindings(MslModule$$ModuleAdapter.java:13) 
            at dagger.ObjectGraph$DaggerObjectGraph.makeGraph(ObjectGraph.java:185) 
            at dagger.ObjectGraph$DaggerObjectGraph.access$000(ObjectGraph.java:138) 
            at dagger.ObjectGraph.create(ObjectGraph.java:129) 
            at ...eApplication.onCreate(...Application.java:21) 
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007) 
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344) 
            at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5017) 

Antwort

3

Dies scheint auf den Weg, um mehr verwandt zu sein ich Espresso wurde mit als ein Dolch Problem ist ...

androidTestCompile ('com.google.android.apps.common.testing:espresso:1.1'){ 
     exclude group: 'com.squareup.dagger' 
} 

zu „double-Espresso“ Jake Wharton Schalt das Problem geht weg gemacht .

https://github.com/JakeWharton/double-espresso

Ich bin immer noch nicht sicher, warum das eine NoClassDefFoundError an diesem Dolch generierte Klasse verursachen würde.

5

Double Espresso ist jetzt zugunsten von Espresso 2.0 veraltet. Es ist möglich, dass es für Sie funktioniert hat, weil Jake eine gute Arbeit geleistet hat, transitive Abhängigkeiten aufzuzählen, die Sie möglicherweise ausschließen müssen, damit die Dinge funktionieren.

Nach meiner Erfahrung mit Espresso 2.0 mit Dolch können Sie benötigen javax.inject von Ihren Espresso Abhängigkeiten auszuschließen:

androidTestCompile ('com.android.support.test.espresso:espresso-core:2.0') { 
    exclude group: 'javax.inject' 
} 

Sie müssen diese Abhängigkeiten für alle der Espresso machen kann, dass Ihr Projekt enthält.