Skip initHiddenAPI check of prebuilt's boot dex jar for APEX modules
There is a check in initHiddenAPI that makes sure that if the source module has been replaced by a prebuilt the prebuilt provides a boot dex jar. The check was added to try and detect an issue with hidden API processing early at build time rather than at runtime. That check relies on the source module having a PrebuiltDepTag dependency on the prebuilt module that is preferred and will be used by hidden API processing. That is true for modules that are not in an APEX but doesn't work for modules that are in an APEX. The issue is that an APEX variant of a source module depends on the non-APEX variant of the corresponding prebuilt module. However, that variant of the prebuilt is not the one that will be used by hidden API processing; it will use the APEX variant of the prebuilt module which is the one that has access to the boot dex jar. That results in the initHiddenAPI check giving a false negative as it states that the boot dex jar is not available when it may be. This change simply skips the check is the source module is an APEX variant. This is a temporary work around as the hidden API processing is being modularized for each APEX at which point initHiddenAPI will either be removed entirely or just skipped for APEXes altogether. Bug: 179354495 Bug: 185828824 Test: m nothing Change-Id: I2dc3654c9aa476541855b3f0f243a181ddf8d723
This commit is contained in:
@@ -156,16 +156,24 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.BaseModuleContext, configurationNa
|
||||
|
||||
// A source module that has been replaced by a prebuilt can never be the primary module.
|
||||
if module.IsReplacedByPrebuilt() {
|
||||
ctx.VisitDirectDepsWithTag(android.PrebuiltDepTag, func(prebuilt android.Module) {
|
||||
if h, ok := prebuilt.(hiddenAPIIntf); ok && h.bootDexJar() != nil {
|
||||
primary = false
|
||||
} else {
|
||||
ctx.ModuleErrorf(
|
||||
"hiddenapi has determined that the source module %q should be ignored as it has been"+
|
||||
" replaced by the prebuilt module %q but unfortunately it does not provide a"+
|
||||
" suitable boot dex jar", ctx.ModuleName(), ctx.OtherModuleName(prebuilt))
|
||||
}
|
||||
})
|
||||
if ctx.HasProvider(android.ApexInfoProvider) {
|
||||
// The source module is in an APEX but the prebuilt module on which it depends is not in an
|
||||
// APEX and so is not the one that will actually be used for hidden API processing. That
|
||||
// means it is not possible to check to see if it is a suitable replacement so just assume
|
||||
// that it is.
|
||||
primary = false
|
||||
} else {
|
||||
ctx.VisitDirectDepsWithTag(android.PrebuiltDepTag, func(prebuilt android.Module) {
|
||||
if h, ok := prebuilt.(hiddenAPIIntf); ok && h.bootDexJar() != nil {
|
||||
primary = false
|
||||
} else {
|
||||
ctx.ModuleErrorf(
|
||||
"hiddenapi has determined that the source module %q should be ignored as it has been"+
|
||||
" replaced by the prebuilt module %q but unfortunately it does not provide a"+
|
||||
" suitable boot dex jar", ctx.ModuleName(), ctx.OtherModuleName(prebuilt))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
h.primary = primary
|
||||
|
Reference in New Issue
Block a user