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

Commit c89fe625 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Revert "Revert "Split Java libraries per apex"""

parents c6fa3eca 7f7766d5
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -91,6 +91,8 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
	ctx.RegisterModuleType("sh_binary", android.ModuleFactoryAdaptor(android.ShBinaryFactory))
	ctx.RegisterModuleType("android_app_certificate", android.ModuleFactoryAdaptor(java.AndroidAppCertificateFactory))
	ctx.RegisterModuleType("filegroup", android.ModuleFactoryAdaptor(android.FileGroupFactory))
	ctx.RegisterModuleType("java_library", android.ModuleFactoryAdaptor(java.LibraryFactory))

	ctx.PreArchMutators(func(ctx android.RegisterMutatorsContext) {
		ctx.BottomUp("prebuilts", android.PrebuiltMutator).Parallel()
	})
@@ -205,6 +207,7 @@ func testApexContext(t *testing.T, bp string) (*android.TestContext, android.Con
		"mytest3.cpp":                          nil,
		"myprebuilt":                           nil,
		"my_include":                           nil,
		"foo/bar/MyClass.java":                 nil,
		"vendor/foo/devkeys/test.x509.pem":     nil,
		"vendor/foo/devkeys/test.pk8":          nil,
		"testkey.x509.pem":                     nil,
@@ -280,7 +283,8 @@ func TestBasicApex(t *testing.T) {
				both: {
					binaries: ["foo",],
				}
			}
			},
			java_libs: ["myjar"],
		}

		apex {
@@ -338,6 +342,23 @@ func TestBasicApex(t *testing.T) {
			stl: "none",
			notice: "custom_notice",
		}

		java_library {
			name: "myjar",
			srcs: ["foo/bar/MyClass.java"],
			sdk_version: "none",
			system_modules: "none",
			compile_dex: true,
			static_libs: ["myotherjar"],
		}

		java_library {
			name: "myotherjar",
			srcs: ["foo/bar/MyClass.java"],
			sdk_version: "none",
			system_modules: "none",
			compile_dex: true,
		}
	`)

	apexRule := ctx.ModuleForTests("myapex", "android_common_myapex").Rule("apexRule")
@@ -354,17 +375,24 @@ func TestBasicApex(t *testing.T) {

	// Ensure that apex variant is created for the direct dep
	ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_core_shared_myapex")
	ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common_myapex")

	// Ensure that apex variant is created for the indirect dep
	ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_core_shared_myapex")
	ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common_myapex")

	// Ensure that both direct and indirect deps are copied into apex
	ensureContains(t, copyCmds, "image.apex/lib64/mylib.so")
	ensureContains(t, copyCmds, "image.apex/lib64/mylib2.so")
	ensureContains(t, copyCmds, "image.apex/javalib/myjar.jar")
	// .. but not for java libs
	ensureNotContains(t, copyCmds, "image.apex/javalib/myotherjar.jar")

	// Ensure that the platform variant ends with _core_shared
	// Ensure that the platform variant ends with _core_shared or _common
	ensureListContains(t, ctx.ModuleVariantsForTests("mylib"), "android_arm64_armv8-a_core_shared")
	ensureListContains(t, ctx.ModuleVariantsForTests("mylib2"), "android_arm64_armv8-a_core_shared")
	ensureListContains(t, ctx.ModuleVariantsForTests("myjar"), "android_common")
	ensureListContains(t, ctx.ModuleVariantsForTests("myotherjar"), "android_common")

	// Ensure that all symlinks are present.
	found_foo_link_64 := false
+15 −0
Original line number Diff line number Diff line
@@ -55,6 +55,11 @@ func (library *Library) AndroidMkHostDex(w io.Writer, name string, data android.
}

func (library *Library) AndroidMk() android.AndroidMkData {
	if !library.IsForPlatform() {
		return android.AndroidMkData{
			Disabled: true,
		}
	}
	return android.AndroidMkData{
		Class:      "JAVA_LIBRARIES",
		OutputFile: android.OptionalPathForPath(library.outputFile),
@@ -141,6 +146,11 @@ func (j *TestHelperLibrary) AndroidMk() android.AndroidMkData {
}

func (prebuilt *Import) AndroidMk() android.AndroidMkData {
	if !prebuilt.IsForPlatform() {
		return android.AndroidMkData{
			Disabled: true,
		}
	}
	return android.AndroidMkData{
		Class:      "JAVA_LIBRARIES",
		OutputFile: android.OptionalPathForPath(prebuilt.combinedClasspathFile),
@@ -157,6 +167,11 @@ func (prebuilt *Import) AndroidMk() android.AndroidMkData {
}

func (prebuilt *DexImport) AndroidMk() android.AndroidMkData {
	if !prebuilt.IsForPlatform() {
		return android.AndroidMkData{
			Disabled: true,
		}
	}
	return android.AndroidMkData{
		Class:      "JAVA_LIBRARIES",
		OutputFile: android.OptionalPathForPath(prebuilt.maybeStrippedDexJarFile),
+8 −0
Original line number Diff line number Diff line
@@ -152,6 +152,14 @@ func stubFlagsRule(ctx android.SingletonContext) {
		// Collect dex jar paths for modules that had hiddenapi encode called on them.
		if h, ok := module.(hiddenAPIIntf); ok {
			if jar := h.bootDexJar(); jar != nil {
				// For a java lib included in an APEX, only take the one built for
				// the platform variant, and skip the variants for APEXes.
				// Otherwise, the hiddenapi tool will complain about duplicated classes
				if a, ok := module.(android.ApexModule); ok {
					if android.InAnyApex(module.Name()) && !a.IsForPlatform() {
						return
					}
				}
				bootDexJars = append(bootDexJars, jar)
			}
		}
+12 −2
Original line number Diff line number Diff line
@@ -267,6 +267,7 @@ func (me *CompilerDeviceProperties) EffectiveOptimizeEnabled() bool {
type Module struct {
	android.ModuleBase
	android.DefaultableModuleBase
	android.ApexModuleBase

	properties       CompilerProperties
	protoProperties  android.ProtoProperties
@@ -1550,7 +1551,8 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	j.deviceProperties.UncompressDex = j.dexpreopter.uncompressedDex
	j.compile(ctx, nil)

	if (Bool(j.properties.Installable) || ctx.Host()) && !android.DirectlyInAnyApex(ctx, ctx.ModuleName()) {
	exclusivelyForApex := android.InAnyApex(ctx.ModuleName()) && !j.IsForPlatform()
	if (Bool(j.properties.Installable) || ctx.Host()) && !exclusivelyForApex {
		j.installFile = ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"),
			ctx.ModuleName()+".jar", j.outputFile)
	}
@@ -1581,6 +1583,7 @@ func LibraryFactory() android.Module {
		&module.Module.protoProperties)

	InitJavaModule(module, android.HostAndDeviceSupported)
	android.InitApexModule(module)
	return module
}

@@ -1603,6 +1606,7 @@ func LibraryHostFactory() android.Module {
	module.Module.properties.Installable = proptools.BoolPtr(true)

	InitJavaModule(module, android.HostSupported)
	android.InitApexModule(module)
	return module
}

@@ -1858,6 +1862,7 @@ type ImportProperties struct {
type Import struct {
	android.ModuleBase
	android.DefaultableModuleBase
	android.ApexModuleBase
	prebuilt android.Prebuilt

	properties ImportProperties
@@ -2014,6 +2019,7 @@ func ImportFactory() android.Module {

	android.InitPrebuiltModule(module, &module.properties.Jars)
	InitJavaModule(module, android.HostAndDeviceSupported)
	android.InitApexModule(module)
	return module
}

@@ -2029,6 +2035,7 @@ func ImportFactoryHost() android.Module {

	android.InitPrebuiltModule(module, &module.properties.Jars)
	InitJavaModule(module, android.HostSupported)
	android.InitApexModule(module)
	return module
}

@@ -2041,6 +2048,7 @@ type DexImportProperties struct {
type DexImport struct {
	android.ModuleBase
	android.DefaultableModuleBase
	android.ApexModuleBase
	prebuilt android.Prebuilt

	properties DexImportProperties
@@ -2132,6 +2140,7 @@ func DexImportFactory() android.Module {

	android.InitPrebuiltModule(module, &module.properties.Jars)
	InitJavaModule(module, android.DeviceSupported)
	android.InitApexModule(module)
	return module
}

@@ -2141,6 +2150,7 @@ func DexImportFactory() android.Module {
type Defaults struct {
	android.ModuleBase
	android.DefaultsModuleBase
	android.ApexModuleBase
}

// java_defaults provides a set of properties that can be inherited by other java or android modules.
@@ -2199,7 +2209,7 @@ func DefaultsFactory(props ...interface{}) android.Module {
	)

	android.InitDefaultsModule(module)

	android.InitApexModule(module)
	return module
}