diff options
author | 2025-03-05 21:30:39 +0000 | |
---|---|---|
committer | 2025-03-06 19:55:25 +0000 | |
commit | 5d180163896dda388a00d739244e5270a7f8f885 (patch) | |
tree | e45ada718619603cf07c9fc2efe89f8b535f36c5 | |
parent | de3a5c4be8aff15998cbf898e06fcc4679fe911f (diff) |
Do not propagate boot jars in CLC construction
Bootclasspath libraries are shared and available to apps by default.
Propagating the bootclasspath libraries in CLC and adding them in
manifest fixer may lead to discrepancies between the build time CLC and
the run time CLC, making dexpreopt usesless and leading to performance
regression.
Test: m nothing --no-skip-soong-test
Bug: 390048523
Change-Id: I15bc76a83f03e4575a9a7cd7cc821969f2204bf2
-rw-r--r-- | dexpreopt/class_loader_context.go | 5 | ||||
-rw-r--r-- | java/java_test.go | 69 |
2 files changed, 74 insertions, 0 deletions
diff --git a/dexpreopt/class_loader_context.go b/dexpreopt/class_loader_context.go index af1d33da6..7f50912b5 100644 --- a/dexpreopt/class_loader_context.go +++ b/dexpreopt/class_loader_context.go @@ -291,6 +291,11 @@ func (clcMap ClassLoaderContextMap) addContext(ctx android.ModuleInstallPathCont // For prebuilts, library should have the same name as the source module. lib = android.RemoveOptionalPrebuiltPrefix(lib) + // Bootclasspath libraries should not be added to CLC. + if android.InList(lib, ctx.Config().BootJars()) { + return nil + } + devicePath := UnknownInstallLibraryPath if installPath == nil { if android.InList(lib, CompatUsesLibs) || android.InList(lib, OptionalCompatUsesLibs) { diff --git a/java/java_test.go b/java/java_test.go index a6290a628..c91d2da97 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -3193,3 +3193,72 @@ cc_library_shared { deps := findDepsOfModule(res, res.ModuleForTests(t, "myjavabin", "android_common").Module(), "mynativelib") android.AssertIntEquals(t, "Create a dep on the first variant", 1, len(deps)) } + +func TestBootJarNotInUsesLibs(t *testing.T) { + t.Parallel() + result := android.GroupFixturePreparers( + PrepareForTestWithJavaDefaultModules, + PrepareForTestWithJavaSdkLibraryFiles, + FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"), + FixtureConfigureApexBootJars("myapex:mysdklibrary"), + ).RunTestWithBp(t, ` + bootclasspath_fragment { + name: "myfragment", + contents: ["mysdklibrary"], + hidden_api: { + split_packages: ["*"], + }, + } + + java_sdk_library { + name: "mysdklibrary", + srcs: ["Test.java"], + compile_dex: true, + public: {enabled: true}, + min_sdk_version: "2", + permitted_packages: ["mysdklibrary"], + sdk_version: "current", + } + + java_sdk_library { + name: "myothersdklibrary", + srcs: ["Test.java"], + compile_dex: true, + public: {enabled: true}, + min_sdk_version: "2", + permitted_packages: ["myothersdklibrary"], + sdk_version: "current", + } + + java_library { + name: "foo", + libs: [ + "bar", + "mysdklibrary.stubs", + ], + srcs: ["A.java"], + } + + java_library { + name: "bar", + libs: [ + "myothersdklibrary.stubs" + ], + } + `) + ctx := result.TestContext + fooModule := ctx.ModuleForTests(t, "foo", "android_common") + + androidMkEntries := android.AndroidMkEntriesForTest(t, ctx, fooModule.Module())[0] + localExportSdkLibraries := androidMkEntries.EntryMap["LOCAL_EXPORT_SDK_LIBRARIES"] + android.AssertStringListDoesNotContain(t, + "boot jar should not be included in uses libs entries", + localExportSdkLibraries, + "mysdklibrary", + ) + android.AssertStringListContains(t, + "non boot jar is included in uses libs entries", + localExportSdkLibraries, + "myothersdklibrary", + ) +} |