diff --git a/apex/apex_test.go b/apex/apex_test.go index 49a5d2ab1..d6803f639 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -8846,6 +8846,16 @@ func TestApexJavaCoverage(t *testing.T) { android.FixtureMergeEnv(map[string]string{ "EMMA_INSTRUMENT": "true", }), + // need to mock jacocoagent here to satisfy dependency added for + // instrumented libraries at build time + android.FixtureAddFile("jacocoagent/Android.bp", []byte(` + java_library { + name: "jacocoagent", + srcs: ["Test.java"], + system_modules: "none", + sdk_version: "none", + } + `)), ).RunTest(t) // Make sure jacoco ran on both mylib and mybootclasspathlib diff --git a/java/base.go b/java/base.go index cf3b3d510..53f0f52c2 100644 --- a/java/base.go +++ b/java/base.go @@ -169,6 +169,8 @@ type CommonProperties struct { Output_params []string } + // If true, then jacocoagent is automatically added as a libs dependency so that + // r8 will not strip instrumentation classes out of dexed libraries. Instrument bool `blueprint:"mutated"` // If true, then the module supports statically including the jacocoagent // into the library. @@ -787,6 +789,9 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) { } else if j.shouldInstrumentStatic(ctx) { ctx.AddVariationDependencies(nil, staticLibTag, "jacocoagent") } + if j.shouldInstrument(ctx) { + ctx.AddVariationDependencies(nil, libTag, "jacocoagent") + } if j.useCompose() { ctx.AddVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), kotlinPluginTag, diff --git a/java/bootclasspath_fragment_test.go b/java/bootclasspath_fragment_test.go index f95c83fe7..2bfb255af 100644 --- a/java/bootclasspath_fragment_test.go +++ b/java/bootclasspath_fragment_test.go @@ -96,10 +96,22 @@ func TestBootclasspathFragmentInconsistentArtConfiguration_ApexMixture(t *testin } func TestBootclasspathFragment_Coverage(t *testing.T) { - prepareForTestWithFrameworkCoverage := android.FixtureMergeEnv(map[string]string{ - "EMMA_INSTRUMENT": "true", - "EMMA_INSTRUMENT_FRAMEWORK": "true", - }) + prepareForTestWithFrameworkCoverage := android.GroupFixturePreparers( + android.FixtureMergeEnv(map[string]string{ + "EMMA_INSTRUMENT": "true", + "EMMA_INSTRUMENT_FRAMEWORK": "true", + }), + // need to mock jacocoagent here to satisfy dependency added for + // instrumented libraries at build time + android.FixtureAddFile("jacocoagent/Android.bp", []byte(` + java_library { + name: "jacocoagent", + srcs: ["Test.java"], + system_modules: "none", + sdk_version: "none", + } + `)), + ) prepareWithBp := android.FixtureWithRootAndroidBp(` bootclasspath_fragment {