diff --git a/java/config/config.go b/java/config/config.go index 75be9e21a..2602e6b04 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -33,7 +33,12 @@ var ( DefaultLambdaStubsLibrary = "core-lambda-stubs" SdkLambdaStubsPath = "prebuilts/sdk/tools/core-lambda-stubs.jar" - // A list of the jars that provide information about usages of the hidden API. + // A list of the non-boot jars that provide hidden APIs, i.e. libraries. + HiddenAPIProvidingNonBootJars = []string{ + "android.test.base", + } + + // A list of the non-boot jars that provide information about usages of the hidden API. HiddenAPIExtraAppUsageJars = []string{ // The core-oj-hiddenapi provides information for the core-oj jar. "core-oj-hiddenapi", diff --git a/java/hiddenapi.go b/java/hiddenapi.go index f19905116..01e2c5ec2 100644 --- a/java/hiddenapi.go +++ b/java/hiddenapi.go @@ -59,7 +59,14 @@ func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, dexJar android.ModuleOu if !ctx.Config().IsEnvTrue("UNSAFE_DISABLE_HIDDENAPI_FLAGS") { isBootJar := inList(ctx.ModuleName(), ctx.Config().BootJars()) - if isBootJar || inList(ctx.ModuleName(), config.HiddenAPIExtraAppUsageJars) { + // Check to see if this module provides part of the hiddenapi, i.e. is a boot jar or a white listed + // library. + isProvidingJar := isBootJar || inList(ctx.ModuleName(), config.HiddenAPIProvidingNonBootJars) + + // If this module provides part of the hiddenapi or is a special module that simply provides information + // about the hiddenapi then extract information about the hiddenapi from the UnsupportedAppUsage + // annotations compiled into the classes.jar. + if isProvidingJar || inList(ctx.ModuleName(), config.HiddenAPIExtraAppUsageJars) { // Derive the greylist from classes jar. flagsCSV := android.PathForModuleOut(ctx, "hiddenapi", "flags.csv") metadataCSV := android.PathForModuleOut(ctx, "hiddenapi", "metadata.csv") @@ -67,7 +74,10 @@ func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, dexJar android.ModuleOu h.flagsCSVPath = flagsCSV h.metadataCSVPath = metadataCSV } - if isBootJar { + + // If this module provides part of the hiddenapi then encode the information about the hiddenapi into + // the dex file created for this module. + if isProvidingJar { hiddenAPIJar := android.PathForModuleOut(ctx, "hiddenapi", ctx.ModuleName()+".jar") h.bootDexJarPath = dexJar hiddenAPIEncodeDex(ctx, hiddenAPIJar, dexJar, uncompressDex)