diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/aar.go | 6 | ||||
-rw-r--r-- | java/androidmk.go | 1 | ||||
-rw-r--r-- | java/app.go | 23 | ||||
-rw-r--r-- | java/base.go | 20 | ||||
-rw-r--r-- | java/core-libraries/Android.bp | 45 | ||||
-rw-r--r-- | java/dex.go | 4 | ||||
-rw-r--r-- | java/dexpreopt.go | 6 | ||||
-rw-r--r-- | java/dexpreopt_check.go | 54 | ||||
-rw-r--r-- | java/java.go | 26 | ||||
-rw-r--r-- | java/java_test.go | 4 | ||||
-rw-r--r-- | java/jdeps_test.go | 2 | ||||
-rw-r--r-- | java/sdk_library.go | 16 | ||||
-rw-r--r-- | java/systemserver_classpath_fragment.go | 20 |
13 files changed, 160 insertions, 67 deletions
diff --git a/java/aar.go b/java/aar.go index 7d73b03e4..41cc24a0d 100644 --- a/java/aar.go +++ b/java/aar.go @@ -483,9 +483,9 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio } linkFlags = append(linkFlags, "--no-static-lib-packages") - if a.isLibrary && a.useResourceProcessorBusyBox(ctx) { - // When building an android_library using ResourceProcessorBusyBox pass --merge-only to skip resource - // references validation until the final app link step when all static libraries are present. + if a.isLibrary { + // Pass --merge-only to skip resource references validation until the final + // app link step when when all static libraries are present. linkFlags = append(linkFlags, "--merge-only") } diff --git a/java/androidmk.go b/java/androidmk.go index 0539d25aa..2dff6cd9f 100644 --- a/java/androidmk.go +++ b/java/androidmk.go @@ -313,6 +313,7 @@ func (binary *Binary) AndroidMkEntries() []android.AndroidMkEntries { ExtraEntries: []android.AndroidMkExtraEntriesFunc{ func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) { entries.SetBool("LOCAL_STRIP_MODULE", false) + entries.AddStrings("LOCAL_REQUIRED_MODULES", binary.androidMkNamesOfJniLibs...) }, }, ExtraFooters: []android.AndroidMkExtraFootersFunc{ diff --git a/java/app.go b/java/app.go index 1358fafec..dd9967516 100644 --- a/java/app.go +++ b/java/app.go @@ -172,7 +172,7 @@ type overridableAppProperties struct { RotationMinSdkVersion *string // the package name of this app. The package name in the manifest file is used if one was not given. - Package_name *string + Package_name proptools.Configurable[string] // the logging parent of this app. Logging_parent *string @@ -386,7 +386,8 @@ func (a *AndroidTestHelperApp) GenerateAndroidBuildActions(ctx android.ModuleCon checkMinSdkVersionMts(ctx, a.MinSdkVersion(ctx)) applicationId := a.appTestHelperAppProperties.Manifest_values.ApplicationId if applicationId != nil { - if a.overridableAppProperties.Package_name != nil { + packageName := a.overridableAppProperties.Package_name.Get(ctx) + if packageName.IsPresent() { ctx.PropertyErrorf("manifest_values.applicationId", "property is not supported when property package_name is set.") } a.aapt.manifestValues.applicationId = *applicationId @@ -586,10 +587,11 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) { } manifestPackageName, overridden := ctx.DeviceConfig().OverrideManifestPackageNameFor(ctx.ModuleName()) - if overridden || a.overridableAppProperties.Package_name != nil { + packageNameProp := a.overridableAppProperties.Package_name.Get(ctx) + if overridden || packageNameProp.IsPresent() { // The product override variable has a priority over the package_name property. if !overridden { - manifestPackageName = *a.overridableAppProperties.Package_name + manifestPackageName = packageNameProp.Get() } aaptLinkFlags = append(aaptLinkFlags, generateAaptRenamePackageFlags(manifestPackageName, a.renameResourcesPackage())...) a.overriddenManifestPackageName = manifestPackageName @@ -829,11 +831,12 @@ func (a *AndroidApp) createPrivappAllowlist(ctx android.ModuleContext) android.P return android.PathForModuleSrc(ctx, *a.appProperties.Privapp_allowlist) } - if a.overridableAppProperties.Package_name == nil { + packageNameProp := a.overridableAppProperties.Package_name.Get(ctx) + if packageNameProp.IsEmpty() { ctx.PropertyErrorf("privapp_allowlist", "package_name must be set to use privapp_allowlist") } - packageName := *a.overridableAppProperties.Package_name + packageName := packageNameProp.Get() fileName := "privapp_allowlist_" + packageName + ".xml" outPath := android.PathForModuleOut(ctx, fileName).OutputPath ctx.Build(pctx, android.BuildParams{ @@ -1418,7 +1421,8 @@ func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { } applicationId := a.appTestProperties.Manifest_values.ApplicationId if applicationId != nil { - if a.overridableAppProperties.Package_name != nil { + packageNameProp := a.overridableAppProperties.Package_name.Get(ctx) + if packageNameProp.IsPresent() { ctx.PropertyErrorf("manifest_values.applicationId", "property is not supported when property package_name is set.") } a.aapt.manifestValues.applicationId = *applicationId @@ -1469,10 +1473,11 @@ func (a *AndroidTest) FixTestConfig(ctx android.ModuleContext, testConfig androi command.FlagWithArg("--test-file-name ", a.installApkName+".apk") } - if a.overridableAppProperties.Package_name != nil { + packageNameProp := a.overridableAppProperties.Package_name.Get(ctx) + if packageNameProp.IsPresent() { fixNeeded = true command.FlagWithInput("--manifest ", a.manifestPath). - FlagWithArg("--package-name ", *a.overridableAppProperties.Package_name) + FlagWithArg("--package-name ", packageNameProp.Get()) } if a.appTestProperties.Mainline_package_name != nil { diff --git a/java/base.go b/java/base.go index fc21c44e5..a9399cbd3 100644 --- a/java/base.go +++ b/java/base.go @@ -1628,7 +1628,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath if j.ravenizer.enabled { ravenizerInput := outputFile - ravenizerOutput := android.PathForModuleOut(ctx, "ravenizer", jarName) + ravenizerOutput := android.PathForModuleOut(ctx, "ravenizer", "", jarName) ravenizerArgs := "" if proptools.Bool(j.properties.Ravenizer.Strip_mockito) { ravenizerArgs = "--strip-mockito" @@ -1637,6 +1637,14 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath outputFile = ravenizerOutput localImplementationJars = android.Paths{ravenizerOutput} completeStaticLibsImplementationJars = android.NewDepSet(android.PREORDER, localImplementationJars, nil) + if combinedResourceJar != nil { + ravenizerInput = combinedResourceJar + ravenizerOutput = android.PathForModuleOut(ctx, "ravenizer", "resources", jarName) + TransformRavenizer(ctx, ravenizerOutput, ravenizerInput, ravenizerArgs) + combinedResourceJar = ravenizerOutput + localResourceJars = android.Paths{ravenizerOutput} + completeStaticLibsResourceJars = android.NewDepSet(android.PREORDER, localResourceJars, nil) + } } if j.shouldApiMapper() { @@ -2164,16 +2172,14 @@ func (j *Module) ClassLoaderContexts() dexpreopt.ClassLoaderContextMap { // Collect information for opening IDE project files in java/jdeps.go. func (j *Module) IDEInfo(ctx android.BaseModuleContext, dpInfo *android.IdeInfo) { - // jarjar rules will repackage the sources. To prevent misleading results, IdeInfo should contain the - // repackaged jar instead of the input sources. if j.expandJarjarRules != nil { dpInfo.Jarjar_rules = append(dpInfo.Jarjar_rules, j.expandJarjarRules.String()) + // Add the header jar so that the rdeps can be resolved to the repackaged classes. dpInfo.Jars = append(dpInfo.Jars, j.headerJarFile.String()) - } else { - dpInfo.Srcs = append(dpInfo.Srcs, j.expandIDEInfoCompiledSrcs...) - dpInfo.SrcJars = append(dpInfo.SrcJars, j.compiledSrcJars.Strings()...) - dpInfo.SrcJars = append(dpInfo.SrcJars, j.annoSrcJars.Strings()...) } + dpInfo.Srcs = append(dpInfo.Srcs, j.expandIDEInfoCompiledSrcs...) + dpInfo.SrcJars = append(dpInfo.SrcJars, j.compiledSrcJars.Strings()...) + dpInfo.SrcJars = append(dpInfo.SrcJars, j.annoSrcJars.Strings()...) dpInfo.Deps = append(dpInfo.Deps, j.CompilerDeps()...) dpInfo.Aidl_include_dirs = append(dpInfo.Aidl_include_dirs, j.deviceProperties.Aidl.Include_dirs...) dpInfo.Static_libs = append(dpInfo.Static_libs, j.staticLibs(ctx)...) diff --git a/java/core-libraries/Android.bp b/java/core-libraries/Android.bp index 1cca7ad49..da865404b 100644 --- a/java/core-libraries/Android.bp +++ b/java/core-libraries/Android.bp @@ -41,10 +41,50 @@ java_defaults { is_stubs_module: true, } +soong_config_module_type { + name: "core_current_stubs_soong_config_defaults", + module_type: "java_defaults", + config_namespace: "ANDROID", + bool_variables: [ + "release_hidden_api_exportable_stubs", + ], + properties: [ + "dist.targets", + "dist.dest", + ], +} + +core_current_stubs_soong_config_defaults { + name: "core_current_stubs_everything_soong_config_defaults", + soong_config_variables: { + release_hidden_api_exportable_stubs: { + conditions_default: { + dist: { + targets: dist_targets, + dest: "core.current.stubs.jar", + }, + }, + }, + }, +} + +core_current_stubs_soong_config_defaults { + name: "core_current_stubs_exportable_soong_config_defaults", + soong_config_variables: { + release_hidden_api_exportable_stubs: { + dist: { + targets: dist_targets, + dest: "core.current.stubs.jar", + }, + }, + }, +} + java_library { name: "core.current.stubs", defaults: [ "core.current.stubs.defaults", + "core_current_stubs_everything_soong_config_defaults", ], static_libs: [ "art.module.public.api.stubs", @@ -76,16 +116,13 @@ java_library { name: "core.current.stubs.exportable", defaults: [ "core.current.stubs.defaults", + "core_current_stubs_exportable_soong_config_defaults", ], static_libs: [ "art.module.public.api.stubs.exportable", "conscrypt.module.public.api.stubs.exportable", "i18n.module.public.api.stubs.exportable", ], - dist: { - targets: dist_targets, - dest: "core.current.stubs.jar", - }, } // Distributed with the SDK for turning into system modules to compile apps diff --git a/java/dex.go b/java/dex.go index e16b05208..a3f699bf0 100644 --- a/java/dex.go +++ b/java/dex.go @@ -133,7 +133,7 @@ var d8, d8RE = pctx.MultiCommandRemoteStaticRules("d8", `$d8Template${config.D8Cmd} ${config.D8Flags} $d8Flags --output $outDir --no-dex-input-jar $in && ` + `$zipTemplate${config.SoongZipCmd} $zipFlags -o $outDir/classes.dex.jar -C $outDir -f "$outDir/classes*.dex" && ` + `${config.MergeZipsCmd} -D -stripFile "**/*.class" $mergeZipsFlags $out $outDir/classes.dex.jar $in && ` + - `rm -f "$outDir/classes*.dex" "$outDir/classes.dex.jar"`, + `rm -f "$outDir"/classes*.dex "$outDir/classes.dex.jar"`, CommandDeps: []string{ "${config.D8Cmd}", "${config.SoongZipCmd}", @@ -172,7 +172,7 @@ var r8, r8RE = pctx.MultiCommandRemoteStaticRules("r8", `rm -rf ${outUsageDir} && ` + `$zipTemplate${config.SoongZipCmd} $zipFlags -o $outDir/classes.dex.jar -C $outDir -f "$outDir/classes*.dex" && ` + `${config.MergeZipsCmd} -D -stripFile "**/*.class" $mergeZipsFlags $out $outDir/classes.dex.jar $in && ` + - `rm -f "$outDir/classes*.dex" "$outDir/classes.dex.jar"`, + `rm -f "$outDir"/classes*.dex "$outDir/classes.dex.jar"`, Depfile: "${out}.d", Deps: blueprint.DepsGCC, CommandDeps: []string{ diff --git a/java/dexpreopt.go b/java/dexpreopt.go index 63a863497..637da363c 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -494,6 +494,12 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, libName string, dexJa PresignedPrebuilt: d.isPresignedPrebuilt, } + if ctx.Config().InstallApexSystemServerDexpreoptSamePartition() { + dexpreoptConfig.ApexPartition = android.PathForModuleInstall(ctx).Partition() + } else { + dexpreoptConfig.ApexPartition = "system" + } + d.configPath = android.PathForModuleOut(ctx, "dexpreopt", dexJarStem, "dexpreopt.config") dexpreopt.WriteModuleConfig(ctx, dexpreoptConfig, d.configPath) ctx.CheckbuildFile(d.configPath) diff --git a/java/dexpreopt_check.go b/java/dexpreopt_check.go index 33be60352..c97156541 100644 --- a/java/dexpreopt_check.go +++ b/java/dexpreopt_check.go @@ -17,6 +17,8 @@ package java import ( "strings" + "github.com/google/blueprint" + "android/soong/android" "android/soong/dexpreopt" @@ -43,16 +45,12 @@ func RegisterDexpreoptCheckBuildComponents(ctx android.RegistrationContext) { type dexpreoptSystemserverCheck struct { android.SingletonModuleBase - // Mapping from the module name to the install paths to the compilation artifacts. - artifactsByModuleName map[string][]string - // The install paths to the compilation artifacts. artifacts []string } func dexpreoptSystemserverCheckFactory() android.SingletonModule { m := &dexpreoptSystemserverCheck{} - m.artifactsByModuleName = make(map[string][]string) android.InitAndroidArchModule(m, android.DeviceSupported, android.MultilibCommon) return m } @@ -62,7 +60,25 @@ func getInstallPath(ctx android.ModuleContext, location string) android.InstallP ctx, "", strings.TrimPrefix(location, "/")) } -func (m *dexpreoptSystemserverCheck) GenerateAndroidBuildActions(ctx android.ModuleContext) { +type systemServerDependencyTag struct { + blueprint.BaseDependencyTag +} + +// systemServerJarDepTag willl be used for validation. Skip visiblility. +func (b systemServerDependencyTag) ExcludeFromVisibilityEnforcement() { +} + +var ( + // dep tag for platform and apex system server jars + systemServerJarDepTag = systemServerDependencyTag{} +) + +var _ android.ExcludeFromVisibilityEnforcementTag = systemServerJarDepTag + +// Add a depenendency on the system server jars. The dexpreopt files of those will be emitted to make. +// The kati packaging system will verify that those files appear in installed files. +// Adding the dependency allows the singleton module to determine whether an apex system server jar is system_ext specific. +func (m *dexpreoptSystemserverCheck) DepsMutator(ctx android.BottomUpMutatorContext) { global := dexpreopt.GetGlobalConfig(ctx) targets := ctx.Config().Targets[android.Android] @@ -72,23 +88,27 @@ func (m *dexpreoptSystemserverCheck) GenerateAndroidBuildActions(ctx android.Mod return } - systemServerJars := global.AllSystemServerJars(ctx) - for _, jar := range systemServerJars.CopyOfJars() { - dexLocation := dexpreopt.GetSystemServerDexLocation(ctx, global, jar) - odexLocation := dexpreopt.ToOdexPath(dexLocation, targets[0].Arch.ArchType) + ctx.AddDependency(ctx.Module(), systemServerJarDepTag, global.AllSystemServerJars(ctx).CopyOfJars()...) +} + +func (m *dexpreoptSystemserverCheck) GenerateAndroidBuildActions(ctx android.ModuleContext) { + global := dexpreopt.GetGlobalConfig(ctx) + targets := ctx.Config().Targets[android.Android] + + ctx.VisitDirectDepsWithTag(systemServerJarDepTag, func(systemServerJar android.Module) { + partition := "system" + if systemServerJar.InstallInSystemExt() && ctx.Config().InstallApexSystemServerDexpreoptSamePartition() { + partition = ctx.DeviceConfig().SystemExtPath() // system_ext + } + dexLocation := dexpreopt.GetSystemServerDexLocation(ctx, global, systemServerJar.Name()) + odexLocation := dexpreopt.ToOdexPath(dexLocation, targets[0].Arch.ArchType, partition) odexPath := getInstallPath(ctx, odexLocation) vdexPath := getInstallPath(ctx, pathtools.ReplaceExtension(odexLocation, "vdex")) - m.artifactsByModuleName[jar] = []string{odexPath.String(), vdexPath.String()} - } + m.artifacts = append(m.artifacts, odexPath.String(), vdexPath.String()) + }) } func (m *dexpreoptSystemserverCheck) GenerateSingletonBuildActions(ctx android.SingletonContext) { - // Only keep modules defined in Soong. - ctx.VisitAllModules(func(module android.Module) { - if artifacts, ok := m.artifactsByModuleName[module.Name()]; ok { - m.artifacts = append(m.artifacts, artifacts...) - } - }) } func (m *dexpreoptSystemserverCheck) MakeVars(ctx android.MakeVarsContext) { diff --git a/java/java.go b/java/java.go index 661422b54..018850fef 100644 --- a/java/java.go +++ b/java/java.go @@ -1795,8 +1795,7 @@ type binaryProperties struct { // Name of the class containing main to be inserted into the manifest as Main-Class. Main_class *string - // Names of modules containing JNI libraries that should be installed alongside the host - // variant of the binary. + // Names of modules containing JNI libraries that should be installed alongside the binary. Jni_libs []string `android:"arch_variant"` } @@ -1809,6 +1808,8 @@ type Binary struct { wrapperFile android.Path binaryFile android.InstallPath + + androidMkNamesOfJniLibs []string } func (j *Binary) HostToolPath() android.OptionalPath { @@ -1880,6 +1881,21 @@ func (j *Binary) GenerateAndroidBuildActions(ctx android.ModuleContext) { ctx.ModuleName()+ext, j.wrapperFile) setOutputFiles(ctx, j.Library.Module) + + // Set the jniLibs of this binary. + // These will be added to `LOCAL_REQUIRED_MODULES`, and the kati packaging system will + // install these alongside the java binary. + ctx.VisitDirectDepsWithTag(jniInstallTag, func(jni android.Module) { + // Use the BaseModuleName of the dependency (without any prebuilt_ prefix) + bmn, _ := jni.(interface{ BaseModuleName() string }) + j.androidMkNamesOfJniLibs = append(j.androidMkNamesOfJniLibs, bmn.BaseModuleName()+":"+jni.Target().Arch.ArchType.Bitness()) + }) + // Check that native libraries are not listed in `required`. Prompt users to use `jni_libs` instead. + ctx.VisitDirectDepsWithTag(android.RequiredDepTag, func(dep android.Module) { + if _, hasSharedLibraryInfo := android.OtherModuleProvider(ctx, dep, cc.SharedLibraryInfoProvider); hasSharedLibraryInfo { + ctx.ModuleErrorf("cc_library %s is no longer supported in `required` of java_binary modules. Please use jni_libs instead.", dep.Name()) + } + }) } } @@ -1888,11 +1904,9 @@ func (j *Binary) DepsMutator(ctx android.BottomUpMutatorContext) { j.deps(ctx) } // These dependencies ensure the installation rules will install the jar file when the - // wrapper is installed, and the jni libraries on host when the wrapper is installed. - if ctx.Arch().ArchType != android.Common && ctx.Os().Class == android.Host { - ctx.AddVariationDependencies(nil, jniInstallTag, j.binaryProperties.Jni_libs...) - } + // wrapper is installed, and the jni libraries when the wrapper is installed. if ctx.Arch().ArchType != android.Common { + ctx.AddVariationDependencies(nil, jniInstallTag, j.binaryProperties.Jni_libs...) ctx.AddVariationDependencies( []blueprint.Variation{{Mutator: "arch", Variation: android.CommonArch.String()}}, binaryInstallTag, ctx.ModuleName()) diff --git a/java/java_test.go b/java/java_test.go index db154ce98..24dabdb10 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -3102,7 +3102,7 @@ func assertTestOnlyAndTopLevel(t *testing.T, ctx *android.TestResult, expectedTe } } -// Test that a dependency edge is created to the "first" variant of a native library listed in `required` of java_binary +// Test that a dependency edge is created to the matching variant of a native library listed in `jni_libs` of java_binary func TestNativeRequiredDepOfJavaBinary(t *testing.T) { findDepsOfModule := func(ctx *android.TestContext, module android.Module, depName string) []blueprint.Module { var ret []blueprint.Module @@ -3118,7 +3118,7 @@ func TestNativeRequiredDepOfJavaBinary(t *testing.T) { java_binary { name: "myjavabin", main_class: "com.android.MyJava", - required: ["mynativelib"], + jni_libs: ["mynativelib"], } cc_library_shared { name: "mynativelib", diff --git a/java/jdeps_test.go b/java/jdeps_test.go index d282f1976..7a0fb10cb 100644 --- a/java/jdeps_test.go +++ b/java/jdeps_test.go @@ -109,7 +109,7 @@ func TestCollectJavaLibraryWithJarJarRules(t *testing.T) { module := ctx.ModuleForTests("javalib", "android_common").Module().(*Library) dpInfo, _ := android.OtherModuleProvider(ctx, module, android.IdeInfoProviderKey) - android.AssertBoolEquals(t, "IdeInfo.Srcs of repackaged library should be empty", true, len(dpInfo.Srcs) == 0) + android.AssertStringEquals(t, "IdeInfo.Srcs of repackaged library should not be empty", "foo.java", dpInfo.Srcs[0]) android.AssertStringEquals(t, "IdeInfo.Jar_rules of repackaged library should not be empty", "jarjar_rules.txt", dpInfo.Jarjar_rules[0]) if !android.SubstringInList(dpInfo.Jars, "soong/.intermediates/javalib/android_common/jarjar/turbine/javalib.jar") { t.Errorf("IdeInfo.Jars of repackaged library should contain the output of jarjar-ing. All outputs: %v\n", dpInfo.Jars) diff --git a/java/sdk_library.go b/java/sdk_library.go index f30877258..dfbde0e54 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -2481,19 +2481,3 @@ func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberCo propertySet.AddProperty("doctag_files", dests) } } - -// TODO(b/358613520): This can be removed when modules are no longer allowed to depend on the top-level library. -func (s *SdkLibrary) IDEInfo(ctx android.BaseModuleContext, dpInfo *android.IdeInfo) { - s.Library.IDEInfo(ctx, dpInfo) - if s.implLibraryModule != nil { - dpInfo.Deps = append(dpInfo.Deps, s.implLibraryModule.Name()) - } else { - // This java_sdk_library does not have an implementation (it sets `api_only` to true). - // Examples of this are `art.module.intra.core.api` (IntraCore api surface). - // Return the "public" stubs for these. - stubPaths := s.findClosestScopePath(apiScopePublic) - if len(stubPaths.stubsHeaderPath) > 0 { - dpInfo.Jars = append(dpInfo.Jars, stubPaths.stubsHeaderPath[0].String()) - } - } -} diff --git a/java/systemserver_classpath_fragment.go b/java/systemserver_classpath_fragment.go index 924abd460..aad106007 100644 --- a/java/systemserver_classpath_fragment.go +++ b/java/systemserver_classpath_fragment.go @@ -127,6 +127,26 @@ func (s *SystemServerClasspathModule) GenerateAndroidBuildActions(ctx android.Mo configuredJars = configuredJars.AppendList(&standaloneConfiguredJars) classpathJars = append(classpathJars, standaloneClasspathJars...) s.classpathFragmentBase().generateClasspathProtoBuildActions(ctx, configuredJars, classpathJars) + s.setPartitionInfoOfLibraries(ctx) +} + +// Map of java library name to their install partition. +type LibraryNameToPartitionInfo struct { + LibraryNameToPartition map[string]string +} + +// LibraryNameToPartitionInfoProvider will be used by the top-level apex to enforce that dexpreopt files +// of apex system server jars are installed in the same partition as the top-level apex. +var LibraryNameToPartitionInfoProvider = blueprint.NewProvider[LibraryNameToPartitionInfo]() + +func (s *SystemServerClasspathModule) setPartitionInfoOfLibraries(ctx android.ModuleContext) { + libraryNameToPartition := map[string]string{} + ctx.VisitDirectDepsWithTag(systemServerClasspathFragmentContentDepTag, func(m android.Module) { + libraryNameToPartition[m.Name()] = m.PartitionTag(ctx.DeviceConfig()) + }) + android.SetProvider(ctx, LibraryNameToPartitionInfoProvider, LibraryNameToPartitionInfo{ + LibraryNameToPartition: libraryNameToPartition, + }) } func (s *SystemServerClasspathModule) configuredJars(ctx android.ModuleContext) android.ConfiguredJarList { |