2016-08-28 70 views
5

Po aktualizacji do Gradle Build Tools 2.1.3 i Gradle 2.14.1 widzę następujący błąd w moim projekcie Android. Zdarza się to natychmiast po uruchomieniu aplikacji. Jak to naprawić?java.lang.NoClassDefFoundError: Nie powiodło się rozwiązanie problemu: Lorg/jacoco/agent/rt/internal_14f7ee5/Offline

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jacoco/agent/rt/internal_14f7ee5/Offline; 
at com.ourapp.next.conversation.SomeList.SomeListViewModel.$jacocoInit(SomeListViewModel.java) 
at com.ourapp.next.conversation.SomeList.SomeListViewModel.(SomeListViewModel.java) 
at com.ourapp.next.conversation.SomeList.SomeListAdapterTest.(SomeListAdapterTest.java:26) 
at java.lang.reflect.Constructor.newInstance(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217) 
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:27) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.jacoco.agent.rt.internal_14f7ee5.Offline" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.ourapp.next.debug.test-1/base.apk", zip file "/data/app/com.ourapp.next.debug-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
... 30 more 
Suppressed: java.lang.ClassNotFoundException: org.jacoco.agent.rt.internal_14f7ee5.Offline 
at java.lang.Class.classForName(Native Method) 
at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
... 31 more 
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

Odpowiedz

13

Było złożone zgłoszenie błędu: https://code.google.com/p/android/issues/detail?id=220640

To wygląda na problem z wersjami jacoco. Będziesz musiał zaktualizować swoją jacokoversion do 0.7.6.201602180812.

Cytując z emisji:

The jacoco plugin version was bumped from 0.7.4.201502262128 to 0.7.6.201602180812 between 2.1.2 to 2.1.3 which is the likely cause of this issue.

In 2.2 it is 0.7.5.201505241946.

wygląda również jak jeden możliwy błąd może być związany z Google Play. Na razie są tymczasowe obejścia.

Opcja 1: Skomentuj testCoverageEnabled true.

buildTypes { 
    debug { 
     // testCoverageEnabled true 
    } 
} 

Opcja 2: Korzystanie Natychmiastowy Uruchom wydaje się również, aby rozwiązać ten problem.

+0

Włączenie błyskawicznego uruchomienia naprawiło to dla mnie, ponieważ nie mogłem zmienić wersji wtyczki (nie było bezpośrednio na liście w moim kodzie źródłowym). –

0

Dla każdego, kto stoi ten błąd podczas wykonywania testu UI z pokrycia kodu jacoco korzystając createDebugCoverageReport zadanie

Dodanie tego słoika rozwiązać ten problem

Missing Jacoco Components Jar

odpowiedzi zaczerpnięte z

https://stackoverflow.com/a/42698722/3053781

Wystąpiłam z tym błędem podczas uruchamiania testu UI z pokryciem projektu biblioteki Android z projektem aplikacji na Androida. Wszystko działało dobrze tylko projekt biblioteki Android był skierowany na ten problem.

0

Myślę, że znalazłem najlepsze rozwiązanie tego problemu. Z jakiegoś powodu plik jacoco-agent.jar nie jest domyślnie dołączany i ma klasę Offline.class, której nie można znaleźć. Wystarczy dodać zależność dla agenta. Upewnij się jednak, że jest to dokładnie ta sama wersja, co wersja wtyczki jacoco, której używasz, ponieważ końcowy pakiet Offline.class znajduje się w hash commit. Oto co robię:

kompilacji 'org.jacoco: jacoco-maven-plugin: 0.7.9'

kompilacji 'org.jacoco: org.jacoco.agent: 0.7.9: Runtime'