15

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
loeschg
  • 29,961
  • 26
  • 97
  • 150

5 Answers5

27

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.

loeschg
  • 29,961
  • 26
  • 97
  • 150
2

For anyone facing this error while running UI Test with jacoco code coverage using createDebugCoverageReport task

Adding this jar solved this problem

Missing Jacoco Components Jar

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

Ankur
  • 429
  • 4
  • 10
2

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'

Ryan Newsom
  • 696
  • 7
  • 12
  • error Program type already present: org.apache.maven.reporting.MavenMultiPageReport – Beulah Ana Mar 29 '20 at 07:49
  • Facing the same issue in 2021, an included lib depends on jacoco, but I don't understand why something from jacoco should run in the first place, in my case the crash happens when I start the app. I don't see why I should add that dependency to an app only because the lib uses that. – David Sep 27 '21 at 14:20
  • Same issue in 2022 -_- – John Glen Jun 02 '22 at 21:08
2

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'

StefanTo
  • 971
  • 1
  • 10
  • 28
  • 1
    I have no idea *why* but this also worked to get my AGP 7.2.2 Instrumentation Tests running again. I did take the liberty to use `debugImplementation 'androidx.fragment:fragment-testing:1.5.2'` instead. – Alves RC Sep 11 '22 at 18:42
1

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"
Hadi hashemi
  • 475
  • 6
  • 8