From 28ac2ffc8083a71b9e9f97098af4d12f1f732411 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 2 Apr 2024 12:21:34 -0700 Subject: [PATCH] Strip relative paths from android_library_import output files androidx.annotation_annotation is used as a test data file, and converting it from an android_library to an android_library_import causes the relative path used in the test data path to change. Clear the relative path in android_library_import the same way that android_library and other java based modules do. Also change the name of classes-combined.jar to the name of the module so that the output file has the right name if there are no static dependences that require running the merge_zips step. Bug: 288358614 Test: TestAndroidLibraryOutputFileRel Change-Id: I28210aa370a742d789102ff71db3685ca744878f --- java/aar.go | 12 ++++++++---- java/aar_test.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/java/aar.go b/java/aar.go index 1734da945..5a478d065 100644 --- a/java/aar.go +++ b/java/aar.go @@ -1154,7 +1154,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { } extractedAARDir := android.PathForModuleOut(ctx, "aar") - classpathFile := extractedAARDir.Join(ctx, "classes-combined.jar") + classpathFile := extractedAARDir.Join(ctx, ctx.ModuleName()+".jar") a.manifest = extractedAARDir.Join(ctx, "AndroidManifest.xml") a.rTxt = extractedAARDir.Join(ctx, "R.txt") a.assetsPackage = android.PathForModuleOut(ctx, "assets.zip") @@ -1276,14 +1276,18 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { addCLCFromDep(ctx, module, a.classLoaderContexts) }) + var implementationJarFile android.OutputPath 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) + implementationJarFile = android.PathForModuleOut(ctx, "combined", ctx.ModuleName()+".jar").OutputPath + TransformJarsToJar(ctx, implementationJarFile, "combine", combineJars, android.OptionalPath{}, false, nil, nil) } else { - a.implementationJarFile = classpathFile + implementationJarFile = classpathFile } + // Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource + a.implementationJarFile = implementationJarFile.WithoutRel() + if len(staticHeaderJars) > 0 { combineJars := append(android.Paths{classpathFile}, staticHeaderJars...) a.headerJarFile = android.PathForModuleOut(ctx, "turbine-combined", ctx.ModuleName()+".jar") diff --git a/java/aar_test.go b/java/aar_test.go index 6bd53f228..3361bf929 100644 --- a/java/aar_test.go +++ b/java/aar_test.go @@ -128,3 +128,48 @@ func TestLibraryFlagsPackages(t *testing.T) { "--feature-flags @out/soong/.intermediates/bar/intermediate.txt --feature-flags @out/soong/.intermediates/baz/intermediate.txt", ) } + +func TestAndroidLibraryOutputFilesRel(t *testing.T) { + result := android.GroupFixturePreparers( + PrepareForTestWithJavaDefaultModules, + ).RunTestWithBp(t, ` + android_library { + name: "foo", + srcs: ["a.java"], + } + + android_library_import { + name: "bar", + aars: ["bar.aar"], + + } + + android_library_import { + name: "baz", + aars: ["baz.aar"], + static_libs: ["bar"], + } + `) + + foo := result.ModuleForTests("foo", "android_common") + bar := result.ModuleForTests("bar", "android_common") + baz := result.ModuleForTests("baz", "android_common") + + fooOutputPath := android.OutputFileForModule(android.PathContext(nil), foo.Module(), "") + barOutputPath := android.OutputFileForModule(android.PathContext(nil), bar.Module(), "") + bazOutputPath := android.OutputFileForModule(android.PathContext(nil), baz.Module(), "") + + android.AssertPathRelativeToTopEquals(t, "foo output path", + "out/soong/.intermediates/foo/android_common/javac/foo.jar", fooOutputPath) + android.AssertPathRelativeToTopEquals(t, "bar output path", + "out/soong/.intermediates/bar/android_common/aar/bar.jar", barOutputPath) + android.AssertPathRelativeToTopEquals(t, "baz output path", + "out/soong/.intermediates/baz/android_common/combined/baz.jar", bazOutputPath) + + android.AssertStringEquals(t, "foo relative output path", + "foo.jar", fooOutputPath.Rel()) + android.AssertStringEquals(t, "bar relative output path", + "bar.jar", barOutputPath.Rel()) + android.AssertStringEquals(t, "baz relative output path", + "baz.jar", bazOutputPath.Rel()) +}