Merge "Support libraries (not just boot jars) that have hiddenapi"
diff --git a/java/config/config.go b/java/config/config.go
index 75be9e2..2602e6b 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -33,7 +33,12 @@
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 f199051..01e2c5e 100644
--- a/java/hiddenapi.go
+++ b/java/hiddenapi.go
@@ -59,7 +59,14 @@
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 @@
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)