blob: 8fa2b902a0a42bbfddfe146c831d5a6ddab83657 [file] [log] [blame]
Sebastien Hertz831c2562016-03-23 09:48:21 +01001We build an equivalent of the jacoco-agent.jar which contains classes from org.jacoco.core,
2org.jacoco.agent and org.jacoco.agent.rt packages but also classes from asm 5.0.1.
3
4However, Jacoco depends on classes that do not exist in Android (java.lang.instrument.* or
5javax.management.*) for runtime instrumentation only. The ART compiler would reject those classes
6when they are either in the bootclasspath (core, frameworks, ...) or system apps.
7
8Since we only use offline instrumentation for code coverage (using Jack) and do not execute these
9classes at runtime, we simply not compile them here.
10
11We also need to modify the source code to cut dependencies to the classes that we exclude from the
12compilation. The changes are surrounded by "BEGIN android-change" and "END android-change". Here
13is the list of the changes:
14
151) Remove the creation of JmxRegistration in org.jacoco.agent.rt.internal.Agent.
Allen Hair6d4519e2016-06-29 11:15:21 -0700162) Change default OutputMode to none in org.jacoco.core.runtime.AgentOptions
Pete Gillin04f25e92018-01-22 18:29:50 +0000173) Change the runtime to reduce dependencies on core libraries.
18 Previously, Offline's static initializer would eagerly create an
19 Agent, a process which has lots of dependencies. With this change,
Pete Gillind82e0862018-02-01 13:36:40 +000020 Offline only eagerly creates a Map<Long, ExecutionData>, which is much
Pete Gillin04f25e92018-01-22 18:29:50 +000021 more lightweight. The Agent is only created when it's actually
22 needed. This makes it possible to instrument a lot of more core
23 libraries without creating a circular dependency at runtime.