Use EMMA_INSTRUMENT_FRAMEWORK for apex framework libs.
Static coverage builds that trigger a dexpreopt target for a bootclasspath jar can fail since coverage for jars in apexes are turned on by default which requires jacocoagent to be present on the bootclasspath. Fix this by using EMMA_INSTRUMENT_FRAMEWORK to conditionally instrument framework libs in apexes. Bug: 157737183 Test: EMMA_INSTRUMENT=true EMMA_INSTRUMENT_STATIC=true m -j droid Change-Id: I2c323553e08741bc46b196bc3bb860614bc3f85b
This commit is contained in:
21
java/java.go
21
java/java.go
@@ -609,6 +609,21 @@ func (j *Module) shouldInstrumentStatic(ctx android.BaseModuleContext) bool {
|
||||
ctx.Config().UnbundledBuild())
|
||||
}
|
||||
|
||||
func (j *Module) shouldInstrumentInApex(ctx android.BaseModuleContext) bool {
|
||||
// Force enable the instrumentation for java code that is built for APEXes ...
|
||||
// except for the jacocoagent itself (because instrumenting jacocoagent using jacocoagent
|
||||
// doesn't make sense) or framework libraries (e.g. libraries found in the InstrumentFrameworkModules list) unless EMMA_INSTRUMENT_FRAMEWORK is true.
|
||||
isJacocoAgent := ctx.ModuleName() == "jacocoagent"
|
||||
if android.DirectlyInAnyApex(ctx, ctx.ModuleName()) && !isJacocoAgent && !j.IsForPlatform() {
|
||||
if !inList(ctx.ModuleName(), config.InstrumentFrameworkModules) {
|
||||
return true
|
||||
} else if ctx.Config().IsEnvTrue("EMMA_INSTRUMENT_FRAMEWORK") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (j *Module) sdkVersion() sdkSpec {
|
||||
return sdkSpecFrom(String(j.deviceProperties.Sdk_version))
|
||||
}
|
||||
@@ -1541,11 +1556,7 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
||||
j.headerJarFile = j.implementationJarFile
|
||||
}
|
||||
|
||||
// Force enable the instrumentation for java code that is built for APEXes ...
|
||||
// except for the jacocoagent itself (because instrumenting jacocoagent using jacocoagent
|
||||
// doesn't make sense)
|
||||
isJacocoAgent := ctx.ModuleName() == "jacocoagent"
|
||||
if android.DirectlyInAnyApex(ctx, ctx.ModuleName()) && !isJacocoAgent && !j.IsForPlatform() {
|
||||
if j.shouldInstrumentInApex(ctx) {
|
||||
j.properties.Instrument = true
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user