Reputation: 30581
I'm seeing the following error in my Android project after updating to Gradle Build Tools 2.1.3 and Gradle 2.14.1. It happens immediately when I run the application. How do I fix this?
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
Upvotes: 16
Views: 23869
Reputation: 1020
I had the same issue with AGP 7.2.1 and Jacoco 0.8.7.
Adding this dependency to my app/build.gradle fixed it:
debugImplementation 'androidx.fragment:fragment-testing:1.4.1'
Upvotes: 3
Reputation: 494
After two days of searching for a solution, finally found this! just need to add this dependency:
implementation "org.jacoco:org.jacoco.agent:0.8.7:runtime"
Upvotes: 1
Reputation: 696
I think I found the best solution to this issue. For some reason the jacoco-agent.jar does not get included by default and it has the Offline.class that can't be found. You simply need to add the dependency for the agent. However, make sure it is the exact same version as the version of the jacoco plugin you are using since the end package Offline.class is found in is a commit hash. Here is what I am doing:
compile 'org.jacoco:jacoco-maven-plugin:0.7.9'
compile 'org.jacoco:org.jacoco.agent:0.7.9:runtime'
Upvotes: 2
Reputation: 419
For anyone facing this error while running UI Test with jacoco code coverage using createDebugCoverageReport task
Adding this jar solved this problem
Answer taken from
https://stackoverflow.com/a/42698722/3053781
I was facing this error while running UI test with coverage on android library project with android application project every thing was working fine only android library project was facing this issue
Upvotes: 2
Reputation: 30581
There was a bug report filed: https://code.google.com/p/android/issues/detail?id=220640
This looks to be a problem with jacoco versions. You'll need to update your jacocoversion to 0.7.6.201602180812
.
To quote from the issue:
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.
It also looks like one possible error might be related to Google Play Services. There are temporary workarounds for the time being.
Option 1: Comment out testCoverageEnabled true
.
buildTypes {
debug {
// testCoverageEnabled true
}
}
Option 2: Using Instant Run also seems to solve this problem.
Upvotes: 28