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

Commit 567b9d70 authored by Colin Cross's avatar Colin Cross Committed by Gerrit Code Review
Browse files

Merge changes from topic "revert-3008874-OJOKRLYEZJ" into main

* changes:
  Revert "Support transitive dependencies through android_libary_i..."
  Revert "Support static_libs for java_import modules"
parents 34c93d8e 44841aad
Loading
Loading
Loading
Loading
+28 −62
Original line number Diff line number Diff line
@@ -387,6 +387,11 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio
	// Add additional manifest files to transitive manifests.
	additionalManifests := android.PathsForModuleSrc(ctx, a.aaptProperties.Additional_manifests)
	transitiveManifestPaths := append(android.Paths{manifestPath}, additionalManifests...)
	// TODO(b/288358614): Soong has historically not merged manifests from dependencies of android_library_import
	// modules.  Merging manifests from dependencies could remove the need for pom2bp to generate the "-nodeps" copies
	// of androidx libraries, but doing so triggers errors due to errors introduced by existing dependencies of
	// android_library_import modules.  If this is fixed, staticManifestsDepSet can be dropped completely in favor of
	// staticResourcesNodesDepSet.manifests()
	transitiveManifestPaths = append(transitiveManifestPaths, staticManifestsDepSet.ToList()...)

	if len(transitiveManifestPaths) > 1 && !Bool(a.aaptProperties.Dont_merge_manifests) {
@@ -758,8 +763,7 @@ func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoa
	// reverse later.
	// NOTE: this is legacy and probably incorrect behavior, for most other cases (e.g. conflicting classes in
	// dependencies) the highest priority dependency is listed first, but for resources the highest priority
	// dependency has to be listed last.  This is also inconsistent with the way manifests from the same
	// transitive dependencies are merged.
	// dependency has to be listed last.
	staticResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil,
		android.ReverseSliceInPlace(staticResourcesNodeDepSets))
	sharedResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil,
@@ -974,8 +978,7 @@ type AARImport struct {

	properties AARImportProperties

	headerJarFile                      android.WritablePath
	implementationJarFile              android.WritablePath
	classpathFile                      android.WritablePath
	proguardFlags                      android.WritablePath
	exportPackage                      android.WritablePath
	transitiveAaptResourcePackagesFile android.Path
@@ -996,9 +999,6 @@ type AARImport struct {
	sdkVersion    android.SdkSpec
	minSdkVersion android.ApiLevel

	usesLibrary
	classLoaderContexts dexpreopt.ClassLoaderContextMap

	// Single aconfig "cache file" merged from this module and all dependencies.
	mergedAconfigFiles map[string]android.Paths
}
@@ -1011,7 +1011,7 @@ func (a *AARImport) OutputFiles(tag string) (android.Paths, error) {
	case ".aar":
		return []android.Path{a.aarPath}, nil
	case "":
		return []android.Path{a.implementationJarFile}, nil
		return []android.Path{a.classpathFile}, nil
	default:
		return nil, fmt.Errorf("unsupported module reference tag %q", tag)
	}
@@ -1094,8 +1094,6 @@ func (a *AARImport) DepsMutator(ctx android.BottomUpMutatorContext) {

	ctx.AddVariationDependencies(nil, libTag, a.properties.Libs...)
	ctx.AddVariationDependencies(nil, staticLibTag, a.properties.Static_libs...)

	a.usesLibrary.deps(ctx, false)
}

type JniPackageInfo struct {
@@ -1154,7 +1152,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	}

	extractedAARDir := android.PathForModuleOut(ctx, "aar")
	classpathFile := extractedAARDir.Join(ctx, "classes-combined.jar")
	a.classpathFile = extractedAARDir.Join(ctx, "classes-combined.jar")
	a.manifest = extractedAARDir.Join(ctx, "AndroidManifest.xml")
	a.rTxt = extractedAARDir.Join(ctx, "R.txt")
	a.assetsPackage = android.PathForModuleOut(ctx, "assets.zip")
@@ -1170,11 +1168,11 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	ctx.Build(pctx, android.BuildParams{
		Rule:        unzipAAR,
		Input:       a.aarPath,
		Outputs:     android.WritablePaths{classpathFile, a.proguardFlags, a.manifest, a.assetsPackage, a.rTxt},
		Outputs:     android.WritablePaths{a.classpathFile, a.proguardFlags, a.manifest, a.assetsPackage, a.rTxt},
		Description: "unzip AAR",
		Args: map[string]string{
			"outDir":             extractedAARDir.String(),
			"combinedClassesJar": classpathFile.String(),
			"combinedClassesJar": a.classpathFile.String(),
			"assetsPackage":      a.assetsPackage.String(),
		},
	})
@@ -1247,7 +1245,13 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	a.resourcesNodesDepSet = resourcesNodesDepSetBuilder.Build()

	manifestDepSetBuilder := android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL).Direct(a.manifest)
	manifestDepSetBuilder.Transitive(staticManifestsDepSet)
	// TODO(b/288358614): Soong has historically not merged manifests from dependencies of android_library_import
	// modules.  Merging manifests from dependencies could remove the need for pom2bp to generate the "-nodeps" copies
	// of androidx libraries, but doing so triggers errors due to errors introduced by existing dependencies of
	// android_library_import modules.  If this is fixed, AndroidLibraryDependency.ManifestsDepSet can be dropped
	// completely in favor of AndroidLibraryDependency.ResourceNodesDepSet.manifest
	//manifestDepSetBuilder.Transitive(transitiveStaticDeps.manifests)
	_ = staticManifestsDepSet
	a.manifestsDepSet = manifestDepSetBuilder.Build()

	transitiveAaptResourcePackages := staticDeps.resPackages().Strings()
@@ -1259,45 +1263,12 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	a.transitiveAaptResourcePackagesFile = transitiveAaptResourcePackagesFile

	a.collectTransitiveHeaderJars(ctx)

	a.classLoaderContexts = a.usesLibrary.classLoaderContextForUsesLibDeps(ctx)

	var staticJars android.Paths
	var staticHeaderJars android.Paths
	ctx.VisitDirectDeps(func(module android.Module) {
		if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
			tag := ctx.OtherModuleDependencyTag(module)
			switch tag {
			case staticLibTag:
				staticJars = append(staticJars, dep.ImplementationJars...)
				staticHeaderJars = append(staticHeaderJars, dep.HeaderJars...)
			}
		}
		addCLCFromDep(ctx, module, a.classLoaderContexts)
	})

	if len(staticJars) > 0 {
		combineJars := append(android.Paths{classpathFile}, staticJars...)
		a.implementationJarFile = android.PathForModuleOut(ctx, "combined", ctx.ModuleName()+".jar")
		TransformJarsToJar(ctx, a.implementationJarFile, "combine", combineJars, android.OptionalPath{}, false, nil, nil)
	} else {
		a.implementationJarFile = classpathFile
	}

	if len(staticHeaderJars) > 0 {
		combineJars := append(android.Paths{classpathFile}, staticHeaderJars...)
		a.headerJarFile = android.PathForModuleOut(ctx, "turbine-combined", ctx.ModuleName()+".jar")
		TransformJarsToJar(ctx, a.headerJarFile, "combine header jars", combineJars, android.OptionalPath{}, false, nil, nil)
	} else {
		a.headerJarFile = classpathFile
	}

	android.SetProvider(ctx, JavaInfoProvider, JavaInfo{
		HeaderJars:                     android.PathsIfNonNil(a.headerJarFile),
		HeaderJars:                     android.PathsIfNonNil(a.classpathFile),
		TransitiveLibsHeaderJars:       a.transitiveLibsHeaderJars,
		TransitiveStaticLibsHeaderJars: a.transitiveStaticLibsHeaderJars,
		ImplementationAndResourcesJars: android.PathsIfNonNil(a.implementationJarFile),
		ImplementationJars:             android.PathsIfNonNil(a.implementationJarFile),
		ImplementationAndResourcesJars: android.PathsIfNonNil(a.classpathFile),
		ImplementationJars:             android.PathsIfNonNil(a.classpathFile),
		StubsLinkType:                  Implementation,
		// TransitiveAconfigFiles: // TODO(b/289117800): LOCAL_ACONFIG_FILES for prebuilts
	})
@@ -1330,15 +1301,15 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
}

func (a *AARImport) HeaderJars() android.Paths {
	return android.Paths{a.headerJarFile}
	return android.Paths{a.classpathFile}
}

func (a *AARImport) ImplementationAndResourcesJars() android.Paths {
	return android.Paths{a.implementationJarFile}
	return android.Paths{a.classpathFile}
}

func (a *AARImport) DexJarBuildPath(ctx android.ModuleErrorfContext) OptionalDexJarPath {
	return OptionalDexJarPath{}
func (a *AARImport) DexJarBuildPath(ctx android.ModuleErrorfContext) android.Path {
	return nil
}

func (a *AARImport) DexJarInstallPath() android.Path {
@@ -1346,11 +1317,9 @@ func (a *AARImport) DexJarInstallPath() android.Path {
}

func (a *AARImport) ClassLoaderContexts() dexpreopt.ClassLoaderContextMap {
	return a.classLoaderContexts
	return nil
}

var _ UsesLibraryDependency = (*AARImport)(nil)

var _ android.ApexModule = (*AARImport)(nil)

// Implements android.ApexModule
@@ -1359,7 +1328,7 @@ func (a *AARImport) DepIsInSameApex(ctx android.BaseModuleContext, dep android.M
}

// Implements android.ApexModule
func (a *AARImport) ShouldSupportSdkVersion(ctx android.BaseModuleContext,
func (g *AARImport) ShouldSupportSdkVersion(ctx android.BaseModuleContext,
	sdkVersion android.ApiLevel) error {
	return nil
}
@@ -1373,10 +1342,7 @@ var _ android.PrebuiltInterface = (*AARImport)(nil)
func AARImportFactory() android.Module {
	module := &AARImport{}

	module.AddProperties(
		&module.properties,
		&module.usesLibrary.usesLibraryProperties,
	)
	module.AddProperties(&module.properties)

	android.InitPrebuiltModule(module, &module.properties.Aars)
	android.InitApexModule(module)
+3 −2
Original line number Diff line number Diff line
@@ -92,9 +92,10 @@ func TestManifestMerger(t *testing.T) {
			"out/soong/.intermediates/transitive/android_common/manifest_fixer/AndroidManifest.xml",
			"transitive/AndroidManifest2.xml",
			"out/soong/.intermediates/transitive_import/android_common/aar/AndroidManifest.xml",
			"out/soong/.intermediates/transitive_import_dep/android_common/aar/AndroidManifest.xml",
			"out/soong/.intermediates/direct_import/android_common/aar/AndroidManifest.xml",
			"out/soong/.intermediates/direct_import_dep/android_common/aar/AndroidManifest.xml",
			// TODO(b/288358614): Soong has historically not merged manifests from dependencies of
			// android_library_import modules.

		},
		manifestMergerRule.Implicits)
}
+6 −6
Original line number Diff line number Diff line
@@ -211,7 +211,7 @@ func (prebuilt *Import) AndroidMkEntries() []android.AndroidMkEntries {
	return []android.AndroidMkEntries{android.AndroidMkEntries{
		Class:        "JAVA_LIBRARIES",
		OverrideName: prebuilt.BaseModuleName(),
		OutputFile:   android.OptionalPathForPath(prebuilt.combinedImplementationFile),
		OutputFile:   android.OptionalPathForPath(prebuilt.combinedClasspathFile),
		Include:      "$(BUILD_SYSTEM)/soong_java_prebuilt.mk",
		ExtraEntries: []android.AndroidMkExtraEntriesFunc{
			func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
@@ -219,8 +219,8 @@ func (prebuilt *Import) AndroidMkEntries() []android.AndroidMkEntries {
				if prebuilt.dexJarFile.IsSet() {
					entries.SetPath("LOCAL_SOONG_DEX_JAR", prebuilt.dexJarFile.Path())
				}
				entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.combinedHeaderFile)
				entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.combinedImplementationFile)
				entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.combinedClasspathFile)
				entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.combinedClasspathFile)
				entries.SetString("LOCAL_SDK_VERSION", prebuilt.sdkVersion.String())
				entries.SetString("LOCAL_MODULE_STEM", prebuilt.Stem())
				// TODO(b/289117800): LOCAL_ACONFIG_FILES for prebuilts
@@ -262,13 +262,13 @@ func (prebuilt *AARImport) AndroidMkEntries() []android.AndroidMkEntries {
	}
	return []android.AndroidMkEntries{android.AndroidMkEntries{
		Class:      "JAVA_LIBRARIES",
		OutputFile: android.OptionalPathForPath(prebuilt.implementationJarFile),
		OutputFile: android.OptionalPathForPath(prebuilt.classpathFile),
		Include:    "$(BUILD_SYSTEM)/soong_java_prebuilt.mk",
		ExtraEntries: []android.AndroidMkExtraEntriesFunc{
			func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
				entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
				entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.headerJarFile)
				entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.implementationJarFile)
				entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.classpathFile)
				entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.classpathFile)
				entries.SetPath("LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE", prebuilt.exportPackage)
				entries.SetPath("LOCAL_SOONG_TRANSITIVE_RES_PACKAGES", prebuilt.transitiveAaptResourcePackagesFile)
				entries.SetPath("LOCAL_SOONG_EXPORT_PROGUARD_FLAGS", prebuilt.proguardFlags)
+18 −18
Original line number Diff line number Diff line
@@ -829,12 +829,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
				"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
				"out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
				"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},
			appCombined: []string{
				"out/soong/.intermediates/app/android_common/javac/app.jar",
				"out/soong/.intermediates/direct/android_common/combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},

			directResources: nil,
@@ -849,12 +849,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
			directClasspath: []string{
				"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
				"out/soong/.intermediates/transitive/android_common/turbine-combined/transitive.jar",
				"out/soong/.intermediates/transitive_import/android_common/turbine-combined/transitive_import.jar",
				"out/soong/.intermediates/transitive_import/android_common/aar/classes-combined.jar",
			},
			directCombined: []string{
				"out/soong/.intermediates/direct/android_common/javac/direct.jar",
				"out/soong/.intermediates/transitive/android_common/javac/transitive.jar",
				"out/soong/.intermediates/transitive_import/android_common/combined/transitive_import.jar",
				"out/soong/.intermediates/transitive_import/android_common/aar/classes-combined.jar",
			},

			transitiveResources: []string{"out/soong/.intermediates/transitive/android_common/aapt2/transitive/res/values_strings.arsc.flat"},
@@ -928,13 +928,13 @@ func TestAndroidResourceProcessor(t *testing.T) {
				"out/soong/.intermediates/app/android_common/busybox/R.jar",
				"out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
				"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},
			appCombined: []string{
				"out/soong/.intermediates/app/android_common/javac/app.jar",
				"out/soong/.intermediates/app/android_common/busybox/R.jar",
				"out/soong/.intermediates/direct/android_common/combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},

			directResources: nil,
@@ -953,12 +953,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
				"out/soong/.intermediates/transitive_import_dep/android_common/busybox/R.jar",
				"out/soong/.intermediates/transitive_import/android_common/busybox/R.jar",
				"out/soong/.intermediates/transitive/android_common/turbine-combined/transitive.jar",
				"out/soong/.intermediates/transitive_import/android_common/turbine-combined/transitive_import.jar",
				"out/soong/.intermediates/transitive_import/android_common/aar/classes-combined.jar",
			},
			directCombined: []string{
				"out/soong/.intermediates/direct/android_common/javac/direct.jar",
				"out/soong/.intermediates/transitive/android_common/javac/transitive.jar",
				"out/soong/.intermediates/transitive_import/android_common/combined/transitive_import.jar",
				"out/soong/.intermediates/transitive_import/android_common/aar/classes-combined.jar",
			},

			transitiveResources: []string{"out/soong/.intermediates/transitive/android_common/aapt2/transitive/res/values_strings.arsc.flat"},
@@ -1034,13 +1034,13 @@ func TestAndroidResourceProcessor(t *testing.T) {
				"out/soong/.intermediates/app/android_common/busybox/R.jar",
				"out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
				"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},
			appCombined: []string{
				"out/soong/.intermediates/app/android_common/javac/app.jar",
				"out/soong/.intermediates/app/android_common/busybox/R.jar",
				"out/soong/.intermediates/direct/android_common/combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},

			dontVerifyDirect:           true,
@@ -1075,12 +1075,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
				"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
				"out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
				"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},
			appCombined: []string{
				"out/soong/.intermediates/app/android_common/javac/app.jar",
				"out/soong/.intermediates/direct/android_common/combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},

			directResources: nil,
@@ -1098,12 +1098,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
				"out/soong/.intermediates/transitive_import_dep/android_common/busybox/R.jar",
				"out/soong/.intermediates/transitive_import/android_common/busybox/R.jar",
				"out/soong/.intermediates/transitive/android_common/turbine-combined/transitive.jar",
				"out/soong/.intermediates/transitive_import/android_common/turbine-combined/transitive_import.jar",
				"out/soong/.intermediates/transitive_import/android_common/aar/classes-combined.jar",
			},
			directCombined: []string{
				"out/soong/.intermediates/direct/android_common/javac/direct.jar",
				"out/soong/.intermediates/transitive/android_common/javac/transitive.jar",
				"out/soong/.intermediates/transitive_import/android_common/combined/transitive_import.jar",
				"out/soong/.intermediates/transitive_import/android_common/aar/classes-combined.jar",
			},

			dontVerifyTransitive:       true,
@@ -1137,12 +1137,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
				"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
				"out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar",
				"out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/turbine-combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},
			appCombined: []string{
				"out/soong/.intermediates/app/android_common/javac/app.jar",
				"out/soong/.intermediates/direct/android_common/combined/direct.jar",
				"out/soong/.intermediates/direct_import/android_common/combined/direct_import.jar",
				"out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar",
			},

			directResources: nil,
@@ -1157,12 +1157,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
			directClasspath: []string{
				"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar",
				"out/soong/.intermediates/transitive/android_common/turbine-combined/transitive.jar",
				"out/soong/.intermediates/transitive_import/android_common/turbine-combined/transitive_import.jar",
				"out/soong/.intermediates/transitive_import/android_common/aar/classes-combined.jar",
			},
			directCombined: []string{
				"out/soong/.intermediates/direct/android_common/javac/direct.jar",
				"out/soong/.intermediates/transitive/android_common/javac/transitive.jar",
				"out/soong/.intermediates/transitive_import/android_common/combined/transitive_import.jar",
				"out/soong/.intermediates/transitive_import/android_common/aar/classes-combined.jar",
			},

			transitiveResources: []string{"out/soong/.intermediates/transitive/android_common/aapt2/transitive/res/values_strings.arsc.flat"},
+27 −59
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ package java
import (
	"fmt"
	"path/filepath"
	"slices"
	"sort"
	"strings"

@@ -2338,9 +2337,6 @@ type ImportProperties struct {
	// List of shared java libs that this module has dependencies to
	Libs []string

	// List of static java libs that this module has dependencies to
	Static_libs []string

	// List of files to remove from the jar file(s)
	Exclude_files []string

@@ -2393,8 +2389,7 @@ type Import struct {
	dexJarFileErr     error
	dexJarInstallFile android.Path

	combinedImplementationFile android.Path
	combinedHeaderFile         android.Path
	combinedClasspathFile android.Path
	classLoaderContexts   dexpreopt.ClassLoaderContextMap
	exportAidlIncludeDirs android.Paths

@@ -2480,7 +2475,6 @@ func (j *Import) setStrictUpdatabilityLinting(bool) {

func (j *Import) DepsMutator(ctx android.BottomUpMutatorContext) {
	ctx.AddVariationDependencies(nil, libTag, j.properties.Libs...)
	ctx.AddVariationDependencies(nil, staticLibTag, j.properties.Static_libs...)

	if ctx.Device() && Bool(j.dexProperties.Compile_dex) {
		sdkDeps(ctx, android.SdkContext(j), j.dexer)
@@ -2510,13 +2504,23 @@ func (j *Import) commonBuildActions(ctx android.ModuleContext) {
func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	j.commonBuildActions(ctx)

	jars := android.PathsForModuleSrc(ctx, j.properties.Jars)

	jarName := j.Stem() + ".jar"
	outputFile := android.PathForModuleOut(ctx, "combined", jarName)
	TransformJarsToJar(ctx, outputFile, "for prebuilts", jars, android.OptionalPath{},
		false, j.properties.Exclude_files, j.properties.Exclude_dirs)
	if Bool(j.properties.Jetifier) {
		inputFile := outputFile
		outputFile = android.PathForModuleOut(ctx, "jetifier", jarName)
		TransformJetifier(ctx, outputFile, inputFile)
	}
	j.combinedClasspathFile = outputFile
	j.classLoaderContexts = make(dexpreopt.ClassLoaderContextMap)

	var flags javaBuilderFlags

	j.collectTransitiveHeaderJars(ctx)
	var staticJars android.Paths
	var staticHeaderJars android.Paths
	ctx.VisitDirectDeps(func(module android.Module) {
		tag := ctx.OtherModuleDependencyTag(module)
		if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok {
@@ -2526,8 +2530,6 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
				flags.dexClasspath = append(flags.dexClasspath, dep.HeaderJars...)
			case staticLibTag:
				flags.classpath = append(flags.classpath, dep.HeaderJars...)
				staticJars = append(staticJars, dep.ImplementationAndResourcesJars...)
				staticHeaderJars = append(staticHeaderJars, dep.HeaderJars...)
			case bootClasspathTag:
				flags.bootClasspath = append(flags.bootClasspath, dep.HeaderJars...)
			}
@@ -2541,46 +2543,6 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
		addCLCFromDep(ctx, module, j.classLoaderContexts)
	})

	jars := android.PathsForModuleSrc(ctx, j.properties.Jars)
	jarName := j.Stem() + ".jar"

	// Always pass the input jars to TransformJarsToJar, even if there is only a single jar, we need the output
	// file of the module to be named jarName.
	outputFile := android.PathForModuleOut(ctx, "combined", jarName)
	implementationJars := append(slices.Clone(jars), staticJars...)
	TransformJarsToJar(ctx, outputFile, "combine prebuilt implementation jars", implementationJars, android.OptionalPath{},
		false, j.properties.Exclude_files, j.properties.Exclude_dirs)

	// If no dependencies have separate header jars then there is no need to create a separate
	// header jar for this module.
	reuseImplementationJarAsHeaderJar := slices.Equal(staticJars, staticHeaderJars)

	var headerOutputFile android.WritablePath
	if reuseImplementationJarAsHeaderJar {
		headerOutputFile = outputFile
	} else {
		headerJars := append(slices.Clone(jars), staticHeaderJars...)
		headerOutputFile = android.PathForModuleOut(ctx, "turbine-combined", jarName)
		TransformJarsToJar(ctx, headerOutputFile, "combine prebuilt header jars", headerJars, android.OptionalPath{},
			false, j.properties.Exclude_files, j.properties.Exclude_dirs)
	}

	if Bool(j.properties.Jetifier) {
		inputFile := outputFile
		outputFile = android.PathForModuleOut(ctx, "jetifier", jarName)
		TransformJetifier(ctx, outputFile, inputFile)

		if !reuseImplementationJarAsHeaderJar {
			headerInputFile := headerOutputFile
			headerOutputFile = android.PathForModuleOut(ctx, "jetifier-headers", jarName)
			TransformJetifier(ctx, headerOutputFile, headerInputFile)
		} else {
			headerOutputFile = outputFile
		}
	}
	j.combinedHeaderFile = headerOutputFile
	j.combinedImplementationFile = outputFile

	j.maybeInstall(ctx, jarName, outputFile)

	j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Aidl.Export_include_dirs)
@@ -2664,11 +2626,11 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	}

	android.SetProvider(ctx, JavaInfoProvider, JavaInfo{
		HeaderJars:                     android.PathsIfNonNil(j.combinedHeaderFile),
		HeaderJars:                     android.PathsIfNonNil(j.combinedClasspathFile),
		TransitiveLibsHeaderJars:       j.transitiveLibsHeaderJars,
		TransitiveStaticLibsHeaderJars: j.transitiveStaticLibsHeaderJars,
		ImplementationAndResourcesJars: android.PathsIfNonNil(j.combinedImplementationFile),
		ImplementationJars:             android.PathsIfNonNil(j.combinedImplementationFile),
		ImplementationAndResourcesJars: android.PathsIfNonNil(j.combinedClasspathFile),
		ImplementationJars:             android.PathsIfNonNil(j.combinedClasspathFile),
		AidlIncludeDirs:                j.exportAidlIncludeDirs,
		StubsLinkType:                  j.stubsLinkType,
		// TODO(b/289117800): LOCAL_ACONFIG_FILES for prebuilts
@@ -2696,7 +2658,7 @@ func (j *Import) maybeInstall(ctx android.ModuleContext, jarName string, outputF
func (j *Import) OutputFiles(tag string) (android.Paths, error) {
	switch tag {
	case "", ".jar":
		return android.Paths{j.combinedImplementationFile}, nil
		return android.Paths{j.combinedClasspathFile}, nil
	default:
		return nil, fmt.Errorf("unsupported module reference tag %q", tag)
	}
@@ -2705,11 +2667,17 @@ func (j *Import) OutputFiles(tag string) (android.Paths, error) {
var _ android.OutputFileProducer = (*Import)(nil)

func (j *Import) HeaderJars() android.Paths {
	return android.PathsIfNonNil(j.combinedHeaderFile)
	if j.combinedClasspathFile == nil {
		return nil
	}
	return android.Paths{j.combinedClasspathFile}
}

func (j *Import) ImplementationAndResourcesJars() android.Paths {
	return android.PathsIfNonNil(j.combinedImplementationFile)
	if j.combinedClasspathFile == nil {
		return nil
	}
	return android.Paths{j.combinedClasspathFile}
}

func (j *Import) DexJarBuildPath(ctx android.ModuleErrorfContext) OptionalDexJarPath {
Loading