Improve hiddenapi processing so it does not require white list
Rather than have a special white list to contain the names of modules that provide additional hiddenapi for modules on the bootclasspath this defines a convention that such modules must have a name which is of the format <x>-hiddenapi, where <x> is the name of the module on the bootclasspath. Bug: 73711752 Test: make droid && flashall -w && atest -p cts/tests/signature Change-Id: Ib2d69dea9541b60a9bb81496f00edb65036d1ebb
This commit is contained in:
@@ -33,12 +33,6 @@ var (
|
|||||||
DefaultLambdaStubsLibrary = "core-lambda-stubs"
|
DefaultLambdaStubsLibrary = "core-lambda-stubs"
|
||||||
SdkLambdaStubsPath = "prebuilts/sdk/tools/core-lambda-stubs.jar"
|
SdkLambdaStubsPath = "prebuilts/sdk/tools/core-lambda-stubs.jar"
|
||||||
|
|
||||||
// A list of the 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",
|
|
||||||
}
|
|
||||||
|
|
||||||
DefaultJacocoExcludeFilter = []string{"org.junit.*", "org.jacoco.*", "org.mockito.*"}
|
DefaultJacocoExcludeFilter = []string{"org.junit.*", "org.jacoco.*", "org.mockito.*"}
|
||||||
|
|
||||||
InstrumentFrameworkModules = []string{
|
InstrumentFrameworkModules = []string{
|
||||||
|
@@ -15,10 +15,11 @@
|
|||||||
package java
|
package java
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
"android/soong/java/config"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var hiddenAPIGenerateCSVRule = pctx.AndroidStaticRule("hiddenAPIGenerateCSV", blueprint.RuleParams{
|
var hiddenAPIGenerateCSVRule = pctx.AndroidStaticRule("hiddenAPIGenerateCSV", blueprint.RuleParams{
|
||||||
@@ -56,20 +57,39 @@ func (h *hiddenAPI) hiddenAPI(ctx android.ModuleContext, dexJar android.ModuleOu
|
|||||||
uncompressDex bool) android.ModuleOutPath {
|
uncompressDex bool) android.ModuleOutPath {
|
||||||
|
|
||||||
if !ctx.Config().IsEnvTrue("UNSAFE_DISABLE_HIDDENAPI_FLAGS") {
|
if !ctx.Config().IsEnvTrue("UNSAFE_DISABLE_HIDDENAPI_FLAGS") {
|
||||||
isBootJar := inList(ctx.ModuleName(), ctx.Config().BootJars())
|
name := ctx.ModuleName()
|
||||||
if isBootJar || inList(ctx.ModuleName(), config.HiddenAPIExtraAppUsageJars) {
|
|
||||||
|
// Modules whose names are of the format <x>-hiddenapi provide hiddenapi information
|
||||||
|
// for the boot jar module <x>. Otherwise, the module provides information for itself.
|
||||||
|
// Either way extract the name of the boot jar module.
|
||||||
|
bootJarName := strings.TrimSuffix(name, "-hiddenapi")
|
||||||
|
|
||||||
|
// If this module is on the boot jars list (or providing information for a module
|
||||||
|
// on the list) then extract the hiddenapi information from it, and if necessary
|
||||||
|
// encode that information in the generated dex file.
|
||||||
|
//
|
||||||
|
// It is important that hiddenapi information is only gathered for/from modules on
|
||||||
|
// that are actually on the boot jars list because the runtime only enforces access
|
||||||
|
// to the hidden API for the bootclassloader. If information is gathered for modules
|
||||||
|
// not on the list then that will cause failures in the CtsHiddenApiBlacklist...
|
||||||
|
// tests.
|
||||||
|
if inList(bootJarName, ctx.Config().BootJars()) {
|
||||||
// Derive the greylist from classes jar.
|
// Derive the greylist from classes jar.
|
||||||
flagsCSV := android.PathForModuleOut(ctx, "hiddenapi", "flags.csv")
|
flagsCSV := android.PathForModuleOut(ctx, "hiddenapi", "flags.csv")
|
||||||
metadataCSV := android.PathForModuleOut(ctx, "hiddenapi", "metadata.csv")
|
metadataCSV := android.PathForModuleOut(ctx, "hiddenapi", "metadata.csv")
|
||||||
hiddenAPIGenerateCSV(ctx, flagsCSV, metadataCSV, implementationJar)
|
hiddenAPIGenerateCSV(ctx, flagsCSV, metadataCSV, implementationJar)
|
||||||
h.flagsCSVPath = flagsCSV
|
h.flagsCSVPath = flagsCSV
|
||||||
h.metadataCSVPath = metadataCSV
|
h.metadataCSVPath = metadataCSV
|
||||||
}
|
|
||||||
if isBootJar {
|
// If this module is actually on the boot jars list and not providing
|
||||||
hiddenAPIJar := android.PathForModuleOut(ctx, "hiddenapi", ctx.ModuleName()+".jar")
|
// hiddenapi information for a module on the boot jars list then encode
|
||||||
h.bootDexJarPath = dexJar
|
// the gathered information in the generated dex file.
|
||||||
hiddenAPIEncodeDex(ctx, hiddenAPIJar, dexJar, uncompressDex)
|
if name == bootJarName {
|
||||||
dexJar = hiddenAPIJar
|
hiddenAPIJar := android.PathForModuleOut(ctx, "hiddenapi", name+".jar")
|
||||||
|
h.bootDexJarPath = dexJar
|
||||||
|
hiddenAPIEncodeDex(ctx, hiddenAPIJar, dexJar, uncompressDex)
|
||||||
|
dexJar = hiddenAPIJar
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user