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"
This commit is contained in:
Colin Cross
2024-03-22 18:25:30 +00:00
committed by Gerrit Code Review
6 changed files with 86 additions and 231 deletions

View File

@@ -387,6 +387,11 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio
// Add additional manifest files to transitive manifests. // Add additional manifest files to transitive manifests.
additionalManifests := android.PathsForModuleSrc(ctx, a.aaptProperties.Additional_manifests) additionalManifests := android.PathsForModuleSrc(ctx, a.aaptProperties.Additional_manifests)
transitiveManifestPaths := append(android.Paths{manifestPath}, additionalManifests...) 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()...) transitiveManifestPaths = append(transitiveManifestPaths, staticManifestsDepSet.ToList()...)
if len(transitiveManifestPaths) > 1 && !Bool(a.aaptProperties.Dont_merge_manifests) { 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. // reverse later.
// NOTE: this is legacy and probably incorrect behavior, for most other cases (e.g. conflicting classes in // 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 // 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 // dependency has to be listed last.
// transitive dependencies are merged.
staticResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil, staticResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil,
android.ReverseSliceInPlace(staticResourcesNodeDepSets)) android.ReverseSliceInPlace(staticResourcesNodeDepSets))
sharedResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil, sharedResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil,
@@ -974,8 +978,7 @@ type AARImport struct {
properties AARImportProperties properties AARImportProperties
headerJarFile android.WritablePath classpathFile android.WritablePath
implementationJarFile android.WritablePath
proguardFlags android.WritablePath proguardFlags android.WritablePath
exportPackage android.WritablePath exportPackage android.WritablePath
transitiveAaptResourcePackagesFile android.Path transitiveAaptResourcePackagesFile android.Path
@@ -996,9 +999,6 @@ type AARImport struct {
sdkVersion android.SdkSpec sdkVersion android.SdkSpec
minSdkVersion android.ApiLevel minSdkVersion android.ApiLevel
usesLibrary
classLoaderContexts dexpreopt.ClassLoaderContextMap
// Single aconfig "cache file" merged from this module and all dependencies. // Single aconfig "cache file" merged from this module and all dependencies.
mergedAconfigFiles map[string]android.Paths mergedAconfigFiles map[string]android.Paths
} }
@@ -1011,7 +1011,7 @@ func (a *AARImport) OutputFiles(tag string) (android.Paths, error) {
case ".aar": case ".aar":
return []android.Path{a.aarPath}, nil return []android.Path{a.aarPath}, nil
case "": case "":
return []android.Path{a.implementationJarFile}, nil return []android.Path{a.classpathFile}, nil
default: default:
return nil, fmt.Errorf("unsupported module reference tag %q", tag) 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, libTag, a.properties.Libs...)
ctx.AddVariationDependencies(nil, staticLibTag, a.properties.Static_libs...) ctx.AddVariationDependencies(nil, staticLibTag, a.properties.Static_libs...)
a.usesLibrary.deps(ctx, false)
} }
type JniPackageInfo struct { type JniPackageInfo struct {
@@ -1154,7 +1152,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
} }
extractedAARDir := android.PathForModuleOut(ctx, "aar") 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.manifest = extractedAARDir.Join(ctx, "AndroidManifest.xml")
a.rTxt = extractedAARDir.Join(ctx, "R.txt") a.rTxt = extractedAARDir.Join(ctx, "R.txt")
a.assetsPackage = android.PathForModuleOut(ctx, "assets.zip") a.assetsPackage = android.PathForModuleOut(ctx, "assets.zip")
@@ -1170,11 +1168,11 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{
Rule: unzipAAR, Rule: unzipAAR,
Input: a.aarPath, 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", Description: "unzip AAR",
Args: map[string]string{ Args: map[string]string{
"outDir": extractedAARDir.String(), "outDir": extractedAARDir.String(),
"combinedClassesJar": classpathFile.String(), "combinedClassesJar": a.classpathFile.String(),
"assetsPackage": a.assetsPackage.String(), "assetsPackage": a.assetsPackage.String(),
}, },
}) })
@@ -1247,7 +1245,13 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
a.resourcesNodesDepSet = resourcesNodesDepSetBuilder.Build() a.resourcesNodesDepSet = resourcesNodesDepSetBuilder.Build()
manifestDepSetBuilder := android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL).Direct(a.manifest) 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() a.manifestsDepSet = manifestDepSetBuilder.Build()
transitiveAaptResourcePackages := staticDeps.resPackages().Strings() transitiveAaptResourcePackages := staticDeps.resPackages().Strings()
@@ -1259,45 +1263,12 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
a.transitiveAaptResourcePackagesFile = transitiveAaptResourcePackagesFile a.transitiveAaptResourcePackagesFile = transitiveAaptResourcePackagesFile
a.collectTransitiveHeaderJars(ctx) 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{ android.SetProvider(ctx, JavaInfoProvider, JavaInfo{
HeaderJars: android.PathsIfNonNil(a.headerJarFile), HeaderJars: android.PathsIfNonNil(a.classpathFile),
TransitiveLibsHeaderJars: a.transitiveLibsHeaderJars, TransitiveLibsHeaderJars: a.transitiveLibsHeaderJars,
TransitiveStaticLibsHeaderJars: a.transitiveStaticLibsHeaderJars, TransitiveStaticLibsHeaderJars: a.transitiveStaticLibsHeaderJars,
ImplementationAndResourcesJars: android.PathsIfNonNil(a.implementationJarFile), ImplementationAndResourcesJars: android.PathsIfNonNil(a.classpathFile),
ImplementationJars: android.PathsIfNonNil(a.implementationJarFile), ImplementationJars: android.PathsIfNonNil(a.classpathFile),
StubsLinkType: Implementation, StubsLinkType: Implementation,
// TransitiveAconfigFiles: // TODO(b/289117800): LOCAL_ACONFIG_FILES for prebuilts // 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 { func (a *AARImport) HeaderJars() android.Paths {
return android.Paths{a.headerJarFile} return android.Paths{a.classpathFile}
} }
func (a *AARImport) ImplementationAndResourcesJars() android.Paths { func (a *AARImport) ImplementationAndResourcesJars() android.Paths {
return android.Paths{a.implementationJarFile} return android.Paths{a.classpathFile}
} }
func (a *AARImport) DexJarBuildPath(ctx android.ModuleErrorfContext) OptionalDexJarPath { func (a *AARImport) DexJarBuildPath(ctx android.ModuleErrorfContext) android.Path {
return OptionalDexJarPath{} return nil
} }
func (a *AARImport) DexJarInstallPath() android.Path { func (a *AARImport) DexJarInstallPath() android.Path {
@@ -1346,11 +1317,9 @@ func (a *AARImport) DexJarInstallPath() android.Path {
} }
func (a *AARImport) ClassLoaderContexts() dexpreopt.ClassLoaderContextMap { func (a *AARImport) ClassLoaderContexts() dexpreopt.ClassLoaderContextMap {
return a.classLoaderContexts return nil
} }
var _ UsesLibraryDependency = (*AARImport)(nil)
var _ android.ApexModule = (*AARImport)(nil) var _ android.ApexModule = (*AARImport)(nil)
// Implements android.ApexModule // Implements android.ApexModule
@@ -1359,7 +1328,7 @@ func (a *AARImport) DepIsInSameApex(ctx android.BaseModuleContext, dep android.M
} }
// Implements android.ApexModule // Implements android.ApexModule
func (a *AARImport) ShouldSupportSdkVersion(ctx android.BaseModuleContext, func (g *AARImport) ShouldSupportSdkVersion(ctx android.BaseModuleContext,
sdkVersion android.ApiLevel) error { sdkVersion android.ApiLevel) error {
return nil return nil
} }
@@ -1373,10 +1342,7 @@ var _ android.PrebuiltInterface = (*AARImport)(nil)
func AARImportFactory() android.Module { func AARImportFactory() android.Module {
module := &AARImport{} module := &AARImport{}
module.AddProperties( module.AddProperties(&module.properties)
&module.properties,
&module.usesLibrary.usesLibraryProperties,
)
android.InitPrebuiltModule(module, &module.properties.Aars) android.InitPrebuiltModule(module, &module.properties.Aars)
android.InitApexModule(module) android.InitApexModule(module)

View File

@@ -92,9 +92,10 @@ func TestManifestMerger(t *testing.T) {
"out/soong/.intermediates/transitive/android_common/manifest_fixer/AndroidManifest.xml", "out/soong/.intermediates/transitive/android_common/manifest_fixer/AndroidManifest.xml",
"transitive/AndroidManifest2.xml", "transitive/AndroidManifest2.xml",
"out/soong/.intermediates/transitive_import/android_common/aar/AndroidManifest.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/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) manifestMergerRule.Implicits)
} }

View File

@@ -211,7 +211,7 @@ func (prebuilt *Import) AndroidMkEntries() []android.AndroidMkEntries {
return []android.AndroidMkEntries{android.AndroidMkEntries{ return []android.AndroidMkEntries{android.AndroidMkEntries{
Class: "JAVA_LIBRARIES", Class: "JAVA_LIBRARIES",
OverrideName: prebuilt.BaseModuleName(), OverrideName: prebuilt.BaseModuleName(),
OutputFile: android.OptionalPathForPath(prebuilt.combinedImplementationFile), OutputFile: android.OptionalPathForPath(prebuilt.combinedClasspathFile),
Include: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk", Include: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk",
ExtraEntries: []android.AndroidMkExtraEntriesFunc{ ExtraEntries: []android.AndroidMkExtraEntriesFunc{
func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) { func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
@@ -219,8 +219,8 @@ func (prebuilt *Import) AndroidMkEntries() []android.AndroidMkEntries {
if prebuilt.dexJarFile.IsSet() { if prebuilt.dexJarFile.IsSet() {
entries.SetPath("LOCAL_SOONG_DEX_JAR", prebuilt.dexJarFile.Path()) entries.SetPath("LOCAL_SOONG_DEX_JAR", prebuilt.dexJarFile.Path())
} }
entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.combinedHeaderFile) entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.combinedClasspathFile)
entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.combinedImplementationFile) entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.combinedClasspathFile)
entries.SetString("LOCAL_SDK_VERSION", prebuilt.sdkVersion.String()) entries.SetString("LOCAL_SDK_VERSION", prebuilt.sdkVersion.String())
entries.SetString("LOCAL_MODULE_STEM", prebuilt.Stem()) entries.SetString("LOCAL_MODULE_STEM", prebuilt.Stem())
// TODO(b/289117800): LOCAL_ACONFIG_FILES for prebuilts // TODO(b/289117800): LOCAL_ACONFIG_FILES for prebuilts
@@ -262,13 +262,13 @@ func (prebuilt *AARImport) AndroidMkEntries() []android.AndroidMkEntries {
} }
return []android.AndroidMkEntries{android.AndroidMkEntries{ return []android.AndroidMkEntries{android.AndroidMkEntries{
Class: "JAVA_LIBRARIES", Class: "JAVA_LIBRARIES",
OutputFile: android.OptionalPathForPath(prebuilt.implementationJarFile), OutputFile: android.OptionalPathForPath(prebuilt.classpathFile),
Include: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk", Include: "$(BUILD_SYSTEM)/soong_java_prebuilt.mk",
ExtraEntries: []android.AndroidMkExtraEntriesFunc{ ExtraEntries: []android.AndroidMkExtraEntriesFunc{
func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) { func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true) entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.headerJarFile) entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.classpathFile)
entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.implementationJarFile) entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.classpathFile)
entries.SetPath("LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE", prebuilt.exportPackage) entries.SetPath("LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE", prebuilt.exportPackage)
entries.SetPath("LOCAL_SOONG_TRANSITIVE_RES_PACKAGES", prebuilt.transitiveAaptResourcePackagesFile) entries.SetPath("LOCAL_SOONG_TRANSITIVE_RES_PACKAGES", prebuilt.transitiveAaptResourcePackagesFile)
entries.SetPath("LOCAL_SOONG_EXPORT_PROGUARD_FLAGS", prebuilt.proguardFlags) entries.SetPath("LOCAL_SOONG_EXPORT_PROGUARD_FLAGS", prebuilt.proguardFlags)

View File

@@ -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/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/shared/android_common/turbine-combined/shared.jar",
"out/soong/.intermediates/direct/android_common/turbine-combined/direct.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{ appCombined: []string{
"out/soong/.intermediates/app/android_common/javac/app.jar", "out/soong/.intermediates/app/android_common/javac/app.jar",
"out/soong/.intermediates/direct/android_common/combined/direct.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, directResources: nil,
@@ -849,12 +849,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
directClasspath: []string{ directClasspath: []string{
"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", "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/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{ directCombined: []string{
"out/soong/.intermediates/direct/android_common/javac/direct.jar", "out/soong/.intermediates/direct/android_common/javac/direct.jar",
"out/soong/.intermediates/transitive/android_common/javac/transitive.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"}, 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/app/android_common/busybox/R.jar",
"out/soong/.intermediates/shared/android_common/turbine-combined/shared.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/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{ appCombined: []string{
"out/soong/.intermediates/app/android_common/javac/app.jar", "out/soong/.intermediates/app/android_common/javac/app.jar",
"out/soong/.intermediates/app/android_common/busybox/R.jar", "out/soong/.intermediates/app/android_common/busybox/R.jar",
"out/soong/.intermediates/direct/android_common/combined/direct.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, 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_dep/android_common/busybox/R.jar",
"out/soong/.intermediates/transitive_import/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/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{ directCombined: []string{
"out/soong/.intermediates/direct/android_common/javac/direct.jar", "out/soong/.intermediates/direct/android_common/javac/direct.jar",
"out/soong/.intermediates/transitive/android_common/javac/transitive.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"}, 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/app/android_common/busybox/R.jar",
"out/soong/.intermediates/shared/android_common/turbine-combined/shared.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/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{ appCombined: []string{
"out/soong/.intermediates/app/android_common/javac/app.jar", "out/soong/.intermediates/app/android_common/javac/app.jar",
"out/soong/.intermediates/app/android_common/busybox/R.jar", "out/soong/.intermediates/app/android_common/busybox/R.jar",
"out/soong/.intermediates/direct/android_common/combined/direct.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, 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/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/shared/android_common/turbine-combined/shared.jar",
"out/soong/.intermediates/direct/android_common/turbine-combined/direct.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{ appCombined: []string{
"out/soong/.intermediates/app/android_common/javac/app.jar", "out/soong/.intermediates/app/android_common/javac/app.jar",
"out/soong/.intermediates/direct/android_common/combined/direct.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, 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_dep/android_common/busybox/R.jar",
"out/soong/.intermediates/transitive_import/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/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{ directCombined: []string{
"out/soong/.intermediates/direct/android_common/javac/direct.jar", "out/soong/.intermediates/direct/android_common/javac/direct.jar",
"out/soong/.intermediates/transitive/android_common/javac/transitive.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, 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/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/shared/android_common/turbine-combined/shared.jar",
"out/soong/.intermediates/direct/android_common/turbine-combined/direct.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{ appCombined: []string{
"out/soong/.intermediates/app/android_common/javac/app.jar", "out/soong/.intermediates/app/android_common/javac/app.jar",
"out/soong/.intermediates/direct/android_common/combined/direct.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, directResources: nil,
@@ -1157,12 +1157,12 @@ func TestAndroidResourceProcessor(t *testing.T) {
directClasspath: []string{ directClasspath: []string{
"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", "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/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{ directCombined: []string{
"out/soong/.intermediates/direct/android_common/javac/direct.jar", "out/soong/.intermediates/direct/android_common/javac/direct.jar",
"out/soong/.intermediates/transitive/android_common/javac/transitive.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"}, transitiveResources: []string{"out/soong/.intermediates/transitive/android_common/aapt2/transitive/res/values_strings.arsc.flat"},

View File

@@ -21,7 +21,6 @@ package java
import ( import (
"fmt" "fmt"
"path/filepath" "path/filepath"
"slices"
"sort" "sort"
"strings" "strings"
@@ -2338,9 +2337,6 @@ type ImportProperties struct {
// List of shared java libs that this module has dependencies to // List of shared java libs that this module has dependencies to
Libs []string 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) // List of files to remove from the jar file(s)
Exclude_files []string Exclude_files []string
@@ -2393,10 +2389,9 @@ type Import struct {
dexJarFileErr error dexJarFileErr error
dexJarInstallFile android.Path dexJarInstallFile android.Path
combinedImplementationFile android.Path combinedClasspathFile android.Path
combinedHeaderFile android.Path classLoaderContexts dexpreopt.ClassLoaderContextMap
classLoaderContexts dexpreopt.ClassLoaderContextMap exportAidlIncludeDirs android.Paths
exportAidlIncludeDirs android.Paths
hideApexVariantFromMake bool hideApexVariantFromMake bool
@@ -2480,7 +2475,6 @@ func (j *Import) setStrictUpdatabilityLinting(bool) {
func (j *Import) DepsMutator(ctx android.BottomUpMutatorContext) { func (j *Import) DepsMutator(ctx android.BottomUpMutatorContext) {
ctx.AddVariationDependencies(nil, libTag, j.properties.Libs...) ctx.AddVariationDependencies(nil, libTag, j.properties.Libs...)
ctx.AddVariationDependencies(nil, staticLibTag, j.properties.Static_libs...)
if ctx.Device() && Bool(j.dexProperties.Compile_dex) { if ctx.Device() && Bool(j.dexProperties.Compile_dex) {
sdkDeps(ctx, android.SdkContext(j), j.dexer) 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) { func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
j.commonBuildActions(ctx) 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) j.classLoaderContexts = make(dexpreopt.ClassLoaderContextMap)
var flags javaBuilderFlags var flags javaBuilderFlags
j.collectTransitiveHeaderJars(ctx) j.collectTransitiveHeaderJars(ctx)
var staticJars android.Paths
var staticHeaderJars android.Paths
ctx.VisitDirectDeps(func(module android.Module) { ctx.VisitDirectDeps(func(module android.Module) {
tag := ctx.OtherModuleDependencyTag(module) tag := ctx.OtherModuleDependencyTag(module)
if dep, ok := android.OtherModuleProvider(ctx, module, JavaInfoProvider); ok { 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...) flags.dexClasspath = append(flags.dexClasspath, dep.HeaderJars...)
case staticLibTag: case staticLibTag:
flags.classpath = append(flags.classpath, dep.HeaderJars...) flags.classpath = append(flags.classpath, dep.HeaderJars...)
staticJars = append(staticJars, dep.ImplementationAndResourcesJars...)
staticHeaderJars = append(staticHeaderJars, dep.HeaderJars...)
case bootClasspathTag: case bootClasspathTag:
flags.bootClasspath = append(flags.bootClasspath, dep.HeaderJars...) flags.bootClasspath = append(flags.bootClasspath, dep.HeaderJars...)
} }
@@ -2541,46 +2543,6 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
addCLCFromDep(ctx, module, j.classLoaderContexts) 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.maybeInstall(ctx, jarName, outputFile)
j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Aidl.Export_include_dirs) 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{ android.SetProvider(ctx, JavaInfoProvider, JavaInfo{
HeaderJars: android.PathsIfNonNil(j.combinedHeaderFile), HeaderJars: android.PathsIfNonNil(j.combinedClasspathFile),
TransitiveLibsHeaderJars: j.transitiveLibsHeaderJars, TransitiveLibsHeaderJars: j.transitiveLibsHeaderJars,
TransitiveStaticLibsHeaderJars: j.transitiveStaticLibsHeaderJars, TransitiveStaticLibsHeaderJars: j.transitiveStaticLibsHeaderJars,
ImplementationAndResourcesJars: android.PathsIfNonNil(j.combinedImplementationFile), ImplementationAndResourcesJars: android.PathsIfNonNil(j.combinedClasspathFile),
ImplementationJars: android.PathsIfNonNil(j.combinedImplementationFile), ImplementationJars: android.PathsIfNonNil(j.combinedClasspathFile),
AidlIncludeDirs: j.exportAidlIncludeDirs, AidlIncludeDirs: j.exportAidlIncludeDirs,
StubsLinkType: j.stubsLinkType, StubsLinkType: j.stubsLinkType,
// TODO(b/289117800): LOCAL_ACONFIG_FILES for prebuilts // 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) { func (j *Import) OutputFiles(tag string) (android.Paths, error) {
switch tag { switch tag {
case "", ".jar": case "", ".jar":
return android.Paths{j.combinedImplementationFile}, nil return android.Paths{j.combinedClasspathFile}, nil
default: default:
return nil, fmt.Errorf("unsupported module reference tag %q", tag) 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) var _ android.OutputFileProducer = (*Import)(nil)
func (j *Import) HeaderJars() android.Paths { 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 { 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 { func (j *Import) DexJarBuildPath(ctx android.ModuleErrorfContext) OptionalDexJarPath {

View File

@@ -588,11 +588,10 @@ func TestPrebuilts(t *testing.T) {
javac := fooModule.Rule("javac") javac := fooModule.Rule("javac")
combineJar := ctx.ModuleForTests("foo", "android_common").Description("for javac") combineJar := ctx.ModuleForTests("foo", "android_common").Description("for javac")
barModule := ctx.ModuleForTests("bar", "android_common") barModule := ctx.ModuleForTests("bar", "android_common")
barJar := barModule.Output("combined/bar.jar").Output barJar := barModule.Rule("combineJar").Output
bazModule := ctx.ModuleForTests("baz", "android_common") bazModule := ctx.ModuleForTests("baz", "android_common")
bazJar := bazModule.Rule("combineJar").Output bazJar := bazModule.Rule("combineJar").Output
sdklibStubsJar := ctx.ModuleForTests("sdklib.stubs", "android_common"). sdklibStubsJar := ctx.ModuleForTests("sdklib.stubs", "android_common").Rule("combineJar").Output
Output("combined/sdklib.stubs.jar").Output
fooLibrary := fooModule.Module().(*Library) fooLibrary := fooModule.Module().(*Library)
assertDeepEquals(t, "foo unique sources incorrect", assertDeepEquals(t, "foo unique sources incorrect",
@@ -1036,7 +1035,7 @@ func TestExcludeFileGroupInSrcs(t *testing.T) {
} }
} }
func TestJavaLibraryOutputFiles(t *testing.T) { func TestJavaLibrary(t *testing.T) {
testJavaWithFS(t, "", map[string][]byte{ testJavaWithFS(t, "", map[string][]byte{
"libcore/Android.bp": []byte(` "libcore/Android.bp": []byte(`
java_library { java_library {
@@ -1053,7 +1052,7 @@ func TestJavaLibraryOutputFiles(t *testing.T) {
}) })
} }
func TestJavaImportOutputFiles(t *testing.T) { func TestJavaImport(t *testing.T) {
testJavaWithFS(t, "", map[string][]byte{ testJavaWithFS(t, "", map[string][]byte{
"libcore/Android.bp": []byte(` "libcore/Android.bp": []byte(`
java_import { java_import {
@@ -1069,85 +1068,6 @@ func TestJavaImportOutputFiles(t *testing.T) {
}) })
} }
func TestJavaImport(t *testing.T) {
bp := `
java_library {
name: "source_library",
srcs: ["source.java"],
}
java_import {
name: "import_with_no_deps",
jars: ["no_deps.jar"],
}
java_import {
name: "import_with_source_deps",
jars: ["source_deps.jar"],
static_libs: ["source_library"],
}
java_import {
name: "import_with_import_deps",
jars: ["import_deps.jar"],
static_libs: ["import_with_no_deps"],
}
`
ctx := android.GroupFixturePreparers(
PrepareForTestWithJavaDefaultModules,
).RunTestWithBp(t, bp)
source := ctx.ModuleForTests("source_library", "android_common")
sourceJar := source.Output("javac/source_library.jar")
sourceHeaderJar := source.Output("turbine-combined/source_library.jar")
sourceJavaInfo, _ := android.SingletonModuleProvider(ctx, source.Module(), JavaInfoProvider)
// The source library produces separate implementation and header jars
android.AssertPathsRelativeToTopEquals(t, "source library implementation jar",
[]string{sourceJar.Output.String()}, sourceJavaInfo.ImplementationAndResourcesJars)
android.AssertPathsRelativeToTopEquals(t, "source library header jar",
[]string{sourceHeaderJar.Output.String()}, sourceJavaInfo.HeaderJars)
importWithNoDeps := ctx.ModuleForTests("import_with_no_deps", "android_common")
importWithNoDepsJar := importWithNoDeps.Output("combined/import_with_no_deps.jar")
importWithNoDepsJavaInfo, _ := android.SingletonModuleProvider(ctx, importWithNoDeps.Module(), JavaInfoProvider)
// An import with no deps produces a single jar used as both the header and implementation jar.
android.AssertPathsRelativeToTopEquals(t, "import with no deps implementation jar",
[]string{importWithNoDepsJar.Output.String()}, importWithNoDepsJavaInfo.ImplementationAndResourcesJars)
android.AssertPathsRelativeToTopEquals(t, "import with no deps header jar",
[]string{importWithNoDepsJar.Output.String()}, importWithNoDepsJavaInfo.HeaderJars)
android.AssertPathsRelativeToTopEquals(t, "import with no deps combined inputs",
[]string{"no_deps.jar"}, importWithNoDepsJar.Inputs)
importWithSourceDeps := ctx.ModuleForTests("import_with_source_deps", "android_common")
importWithSourceDepsJar := importWithSourceDeps.Output("combined/import_with_source_deps.jar")
importWithSourceDepsHeaderJar := importWithSourceDeps.Output("turbine-combined/import_with_source_deps.jar")
importWithSourceDepsJavaInfo, _ := android.SingletonModuleProvider(ctx, importWithSourceDeps.Module(), JavaInfoProvider)
// An import with source deps produces separate header and implementation jars.
android.AssertPathsRelativeToTopEquals(t, "import with source deps implementation jar",
[]string{importWithSourceDepsJar.Output.String()}, importWithSourceDepsJavaInfo.ImplementationAndResourcesJars)
android.AssertPathsRelativeToTopEquals(t, "import with source deps header jar",
[]string{importWithSourceDepsHeaderJar.Output.String()}, importWithSourceDepsJavaInfo.HeaderJars)
android.AssertPathsRelativeToTopEquals(t, "import with source deps combined implementation jar inputs",
[]string{"source_deps.jar", sourceJar.Output.String()}, importWithSourceDepsJar.Inputs)
android.AssertPathsRelativeToTopEquals(t, "import with source deps combined header jar inputs",
[]string{"source_deps.jar", sourceHeaderJar.Output.String()}, importWithSourceDepsHeaderJar.Inputs)
importWithImportDeps := ctx.ModuleForTests("import_with_import_deps", "android_common")
importWithImportDepsJar := importWithImportDeps.Output("combined/import_with_import_deps.jar")
importWithImportDepsJavaInfo, _ := android.SingletonModuleProvider(ctx, importWithImportDeps.Module(), JavaInfoProvider)
// An import with only import deps produces a single jar used as both the header and implementation jar.
android.AssertPathsRelativeToTopEquals(t, "import with import deps implementation jar",
[]string{importWithImportDepsJar.Output.String()}, importWithImportDepsJavaInfo.ImplementationAndResourcesJars)
android.AssertPathsRelativeToTopEquals(t, "import with import deps header jar",
[]string{importWithImportDepsJar.Output.String()}, importWithImportDepsJavaInfo.HeaderJars)
android.AssertPathsRelativeToTopEquals(t, "import with import deps combined implementation jar inputs",
[]string{"import_deps.jar", importWithNoDepsJar.Output.String()}, importWithImportDepsJar.Inputs)
}
var compilerFlagsTestCases = []struct { var compilerFlagsTestCases = []struct {
in string in string
out bool out bool