From ec0fe1775b726f852839729ecc16adff1dcffe4d Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Thu, 25 Feb 2021 15:34:13 +0000 Subject: Avoid hiddenapi ignoring prebuilt with missing dex implementation jar Previously, when a prebuilt was preferred but did not provide a suitable boot dex jar both the source and the prebuilt were silently ignored which meant that the "hiddenapi list" command was not given a complete set of boot dex jars. That could either lead to incorrect hiddenapi flags being set or the "hiddenapi list" command failing if it could not find a class. Debugging the cause of either of those cases can be very time consuming so this change fails early and makes the cause very explicit. Bug: 181267622 Test: m nothing Change-Id: I6763ddb9ba90ed2e501d0cf7984f6655237e905d --- java/hiddenapi.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'java/hiddenapi.go') diff --git a/java/hiddenapi.go b/java/hiddenapi.go index da2c48f0c..208ced769 100644 --- a/java/hiddenapi.go +++ b/java/hiddenapi.go @@ -148,7 +148,18 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.BaseModuleContext, configurationNa primary = configurationName == ctx.ModuleName() // A source module that has been replaced by a prebuilt can never be the primary module. - primary = primary && !module.IsReplacedByPrebuilt() + 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)) + } + }) + } } h.primary = primary } -- cgit v1.2.3-59-g8ed1b