Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4a65fee authored by Paul Duffin's avatar Paul Duffin Committed by Android (Google) Code Review
Browse files

Merge "Make bootclasspath_fragments always perform hidden API processing" into sc-dev

parents a8ea2833 2b255d7f
Loading
Loading
Loading
Loading
+3 −19
Original line number Diff line number Diff line
@@ -576,25 +576,9 @@ func (b *BootclasspathFragmentModule) generateHiddenAPIBuildActions(ctx android.
	// Create hidden API input structure.
	input := b.createHiddenAPIFlagInput(ctx, contents, fragments)

	var output *HiddenAPIOutput

	// Hidden API processing is conditional as a temporary workaround as not all
	// bootclasspath_fragments provide the appropriate information needed for hidden API processing
	// which leads to breakages of the build.
	// TODO(b/179354495): Stop hidden API processing being conditional once all bootclasspath_fragment
	//  modules have been updated to support it.
	if input.canPerformHiddenAPIProcessing(ctx, b.properties) {
	// Delegate the production of the hidden API all-flags.csv file to a module type specific method.
	common := ctx.Module().(commonBootclasspathFragment)
		output = common.produceHiddenAPIOutput(ctx, contents, input)
	} else {
		// As hidden API processing cannot be performed fall back to trying to retrieve the legacy
		// encoded boot dex files, i.e. those files encoded by the individual libraries and returned
		// from the DexJarBuildPath() method.
		output = &HiddenAPIOutput{
			EncodedBootDexFilesByModule: retrieveLegacyEncodedBootDexFiles(ctx, contents),
		}
	}
	output := common.produceHiddenAPIOutput(ctx, contents, input)

	// Initialize a HiddenAPIInfo structure.
	hiddenAPIInfo := HiddenAPIInfo{
+0 −37
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import (

	"android/soong/android"
	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"
)

// Contains support for processing hiddenAPI in a modular fashion.
@@ -697,42 +696,6 @@ func newHiddenAPIFlagInput() HiddenAPIFlagInput {
	return input
}

// canPerformHiddenAPIProcessing determines whether hidden API processing should be performed.
//
// A temporary workaround to avoid existing bootclasspath_fragments that do not provide the
// appropriate information needed for hidden API processing breaking the build.
// TODO(b/179354495): Remove this workaround.
func (i *HiddenAPIFlagInput) canPerformHiddenAPIProcessing(ctx android.ModuleContext, properties bootclasspathFragmentProperties) bool {
	// Performing hidden API processing without stubs is not supported and it is unlikely to ever be
	// required as the whole point of adding something to the bootclasspath fragment is to add it to
	// the bootclasspath in order to be used by something else in the system. Without any stubs it
	// cannot do that.
	if len(i.StubDexJarsByScope) == 0 {
		return false
	}

	// Hidden API processing is always enabled in tests.
	if ctx.Config().TestProductVariables != nil {
		return true
	}

	// A module that has fragments should have access to the information it needs in order to perform
	// hidden API processing.
	if len(properties.Fragments) != 0 {
		return true
	}

	// The art bootclasspath fragment does not depend on any other fragments but already supports
	// hidden API processing.
	imageName := proptools.String(properties.Image_name)
	if imageName == "art" {
		return true
	}

	// Disable it for everything else.
	return false
}

// gatherStubLibInfo gathers information from the stub libs needed by hidden API processing from the
// dependencies added in hiddenAPIAddStubLibDependencies.
//
+20 −1
Original line number Diff line number Diff line
@@ -133,6 +133,13 @@ prebuilt_bootclasspath_fragment {
    apex_available: ["com.android.art"],
    image_name: "art",
    contents: ["mybootlib"],
    hidden_api: {
        stub_flags: "hiddenapi/stub-flags.csv",
        annotation_flags: "hiddenapi/annotation-flags.csv",
        metadata: "hiddenapi/metadata.csv",
        index: "hiddenapi/index.csv",
        all_flags: "hiddenapi/all-flags.csv",
    },
}

java_import {
@@ -153,6 +160,13 @@ prebuilt_bootclasspath_fragment {
    apex_available: ["com.android.art"],
    image_name: "art",
    contents: ["mysdk_mybootlib@current"],
    hidden_api: {
        stub_flags: "hiddenapi/stub-flags.csv",
        annotation_flags: "hiddenapi/annotation-flags.csv",
        metadata: "hiddenapi/metadata.csv",
        index: "hiddenapi/index.csv",
        all_flags: "hiddenapi/all-flags.csv",
    },
}

java_import {
@@ -171,6 +185,11 @@ sdk_snapshot {
}
`),
		checkAllCopyRules(`
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/stub-flags.csv -> hiddenapi/stub-flags.csv
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/all-flags.csv -> hiddenapi/all-flags.csv
.intermediates/mybootlib/android_common/javac/mybootlib.jar -> java/mybootlib.jar
		`),
		snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),