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

Commit 320e1706 authored by Paul Duffin's avatar Paul Duffin Committed by Gerrit Code Review
Browse files

Merge "Allow dex jars from prebuilt_apex to be used by hiddenapi"

parents b71a8de0 9d67ca6a
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -4526,9 +4526,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
		ctx := testDexpreoptWithApexes(t, bp, "", transform)
		checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar")

		// Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index
		// file.
		checkHiddenAPIIndexInputs(t, ctx, ``)
		// Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file.
		checkHiddenAPIIndexInputs(t, ctx, `
.intermediates/libfoo/android_common_myapex/hiddenapi/index.csv
`)
	})

	t.Run("prebuilt with source library preferred", func(t *testing.T) {
@@ -4599,9 +4600,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
		ctx := testDexpreoptWithApexes(t, bp, "", transform)
		checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar")

		// Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index
		// file.
		checkHiddenAPIIndexInputs(t, ctx, ``)
		// Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file.
		checkHiddenAPIIndexInputs(t, ctx, `
.intermediates/prebuilt_libfoo/android_common_myapex/hiddenapi/index.csv
`)
	})

	t.Run("prebuilt with source apex preferred", func(t *testing.T) {
@@ -4698,9 +4700,10 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
		ctx := testDexpreoptWithApexes(t, bp, "", transform)
		checkBootDexJarPath(t, ctx, ".intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar")

		// Make sure that the dex file from the prebuilt_apex does NOT contribute to the hiddenapi index
		// file.
		checkHiddenAPIIndexInputs(t, ctx, ``)
		// Make sure that the dex file from the prebuilt_apex contributes to the hiddenapi index file.
		checkHiddenAPIIndexInputs(t, ctx, `
.intermediates/prebuilt_libfoo/android_common_prebuilt_myapex/hiddenapi/index.csv
`)
	})
}

+13 −7
Original line number Diff line number Diff line
@@ -144,12 +144,7 @@ func (h *hiddenAPI) hiddenAPIExtractAndEncode(ctx android.ModuleContext, name st
		return dexJar
	}

	// More than one library with the same classes may need to be encoded but only one should be
	// used as a source of information for hidden API processing otherwise it will result in
	// duplicate entries in the files.
	if primary {
		h.hiddenAPIExtractInformation(ctx, dexJar, implementationJar)
	}
	h.hiddenAPIExtractInformation(ctx, dexJar, implementationJar, primary)

	if !h.annotationsOnly {
		hiddenAPIJar := android.PathForModuleOut(ctx, "hiddenapi", name+".jar").OutputPath
@@ -169,7 +164,18 @@ func (h *hiddenAPI) hiddenAPIExtractAndEncode(ctx android.ModuleContext, name st
//
// It also makes the dex jar available for use when generating the
// hiddenAPISingletonPathsStruct.stubFlags.
func (h *hiddenAPI) hiddenAPIExtractInformation(ctx android.ModuleContext, dexJar, classesJar android.Path) {
func (h *hiddenAPI) hiddenAPIExtractInformation(ctx android.ModuleContext, dexJar, classesJar android.Path, primary bool) {
	if !h.active {
		return
	}

	// More than one library with the same classes may need to be encoded but only one should be
	// used as a source of information for hidden API processing otherwise it will result in
	// duplicate entries in the files.
	if !primary {
		return
	}

	stubFlagsCSV := hiddenAPISingletonPaths(ctx).stubFlags

	flagsCSV := android.PathForModuleOut(ctx, "hiddenapi", "flags.csv")
+7 −5
Original line number Diff line number Diff line
@@ -2917,6 +2917,9 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Aidl.Export_include_dirs)

	if ctx.Device() {
		configurationName := j.BaseModuleName()
		primary := j.Prebuilt().UsePrebuilt()

		// If this is a variant created for a prebuilt_apex then use the dex implementation jar
		// obtained from the associated deapexer module.
		ai := ctx.Provider(android.ApexInfoProvider).(android.ApexInfo)
@@ -2930,8 +2933,10 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {

			// Get the path of the dex implementation jar from the `deapexer` module.
			di := ctx.OtherModuleProvider(deapexerModule, android.DeapexerProvider).(android.DeapexerInfo)
			j.dexJarFile = di.PrebuiltExportPath(j.BaseModuleName(), ".dexjar")
			if j.dexJarFile == nil {
			if dexOutputPath := di.PrebuiltExportPath(j.BaseModuleName(), ".dexjar"); dexOutputPath != nil {
				j.dexJarFile = dexOutputPath
				j.hiddenAPI.hiddenAPIExtractInformation(ctx, dexOutputPath, outputFile, primary)
			} else {
				// This should never happen as a variant for a prebuilt_apex is only created if the
				// prebuilt_apex has been configured to export the java library dex file.
				ctx.ModuleErrorf("internal error: no dex implementation jar available from prebuilt_apex %q", deapexerModule.Name())
@@ -2961,9 +2966,6 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
				return
			}

			configurationName := j.BaseModuleName()
			primary := j.Prebuilt().UsePrebuilt()

			// Hidden API CSV generation and dex encoding
			dexOutputFile = j.hiddenAPIExtractAndEncode(ctx, configurationName, primary, dexOutputFile, outputFile,
				proptools.Bool(j.dexProperties.Uncompress_dex))