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())
|
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 {
|
func (j *Module) sdkVersion() sdkSpec {
|
||||||
return sdkSpecFrom(String(j.deviceProperties.Sdk_version))
|
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
|
j.headerJarFile = j.implementationJarFile
|
||||||
}
|
}
|
||||||
|
|
||||||
// Force enable the instrumentation for java code that is built for APEXes ...
|
if j.shouldInstrumentInApex(ctx) {
|
||||||
// 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() {
|
|
||||||
j.properties.Instrument = true
|
j.properties.Instrument = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user