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

Commit 28ac2ffc authored by Colin Cross's avatar Colin Cross
Browse files

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
parent ddde9e29
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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")
+45 −0
Original line number Diff line number Diff line
@@ -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())
}