Propagate transitive missing optional_uses_libs.

Bug: 331528424
Test: m --no-skip-soong-tests
Ignore-AOSP-First: Depends on internal changes. Will cherry-pick once
  merged.
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:22154d8c3e82225c2d295f137ec37eebbef70235)
Merged-In: Ied2821f11b6a5056ecf577e1e25765bc6dd212c0
Change-Id: Ied2821f11b6a5056ecf577e1e25765bc6dd212c0
This commit is contained in:
Jiakai Zhang
2024-03-28 13:50:43 +00:00
committed by Cherrypicker Worker
parent 2665d27939
commit b7bc8d9508
5 changed files with 34 additions and 5 deletions

View File

@@ -356,12 +356,13 @@ type aaptBuildActionOptions struct {
forceNonFinalResourceIDs bool forceNonFinalResourceIDs bool
extraLinkFlags []string extraLinkFlags []string
aconfigTextFiles android.Paths aconfigTextFiles android.Paths
usesLibrary *usesLibrary
} }
func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptions) { func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptions) {
staticResourcesNodesDepSet, sharedResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedExportPackages, libFlags := staticResourcesNodesDepSet, sharedResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedExportPackages, libFlags :=
aaptLibs(ctx, opts.sdkContext, opts.classLoaderContexts) aaptLibs(ctx, opts.sdkContext, opts.classLoaderContexts, opts.usesLibrary)
// Exclude any libraries from the supplied list. // Exclude any libraries from the supplied list.
opts.classLoaderContexts = opts.classLoaderContexts.ExcludeLibs(opts.excludedLibs) opts.classLoaderContexts = opts.classLoaderContexts.ExcludeLibs(opts.excludedLibs)
@@ -703,7 +704,8 @@ func (t transitiveAarDeps) assets() android.Paths {
} }
// aaptLibs collects libraries from dependencies and sdk_version and converts them into paths // aaptLibs collects libraries from dependencies and sdk_version and converts them into paths
func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoaderContexts dexpreopt.ClassLoaderContextMap) ( func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext,
classLoaderContexts dexpreopt.ClassLoaderContextMap, usesLibrary *usesLibrary) (
staticResourcesNodes, sharedResourcesNodes *android.DepSet[*resourcesNode], staticRRODirs *android.DepSet[rroDir], staticResourcesNodes, sharedResourcesNodes *android.DepSet[*resourcesNode], staticRRODirs *android.DepSet[rroDir],
staticManifests *android.DepSet[android.Path], sharedLibs android.Paths, flags []string) { staticManifests *android.DepSet[android.Path], sharedLibs android.Paths, flags []string) {
@@ -753,6 +755,9 @@ func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoa
} }
addCLCFromDep(ctx, module, classLoaderContexts) addCLCFromDep(ctx, module, classLoaderContexts)
if usesLibrary != nil {
addMissingOptionalUsesLibsFromDep(ctx, module, usesLibrary)
}
}) })
// AAPT2 overlays are in lowest to highest priority order, the topological order will be reversed later. // AAPT2 overlays are in lowest to highest priority order, the topological order will be reversed later.
@@ -829,6 +834,7 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
classLoaderContexts: a.classLoaderContexts, classLoaderContexts: a.classLoaderContexts,
enforceDefaultTargetSdkVersion: false, enforceDefaultTargetSdkVersion: false,
aconfigTextFiles: getAconfigFilePaths(ctx), aconfigTextFiles: getAconfigFilePaths(ctx),
usesLibrary: &a.usesLibrary,
}, },
) )
@@ -1215,7 +1221,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
linkDeps = append(linkDeps, a.manifest) linkDeps = append(linkDeps, a.manifest)
staticResourcesNodesDepSet, sharedResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedLibs, libFlags := staticResourcesNodesDepSet, sharedResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedLibs, libFlags :=
aaptLibs(ctx, android.SdkContext(a), nil) aaptLibs(ctx, android.SdkContext(a), nil, nil)
_ = sharedResourcesNodesDepSet _ = sharedResourcesNodesDepSet
_ = staticRRODirsDepSet _ = staticRRODirsDepSet
@@ -1287,6 +1293,7 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) {
} }
} }
addCLCFromDep(ctx, module, a.classLoaderContexts) addCLCFromDep(ctx, module, a.classLoaderContexts)
addMissingOptionalUsesLibsFromDep(ctx, module, &a.usesLibrary)
}) })
var implementationJarFile android.OutputPath var implementationJarFile android.OutputPath

View File

@@ -531,6 +531,7 @@ func (a *AndroidApp) aaptBuildActions(ctx android.ModuleContext) {
forceNonFinalResourceIDs: nonFinalIds, forceNonFinalResourceIDs: nonFinalIds,
extraLinkFlags: aaptLinkFlags, extraLinkFlags: aaptLinkFlags,
aconfigTextFiles: getAconfigFilePaths(ctx), aconfigTextFiles: getAconfigFilePaths(ctx),
usesLibrary: &a.usesLibrary,
}, },
) )

View File

@@ -3244,7 +3244,10 @@ func TestUsesLibraries(t *testing.T) {
name: "static-y", name: "static-y",
srcs: ["a.java"], srcs: ["a.java"],
uses_libs: ["runtime-required-y"], uses_libs: ["runtime-required-y"],
optional_uses_libs: ["runtime-optional-y"], optional_uses_libs: [
"runtime-optional-y",
"missing-lib-a",
],
sdk_version: "current", sdk_version: "current",
} }
@@ -3341,7 +3344,8 @@ func TestUsesLibraries(t *testing.T) {
`--optional-uses-library bar ` + `--optional-uses-library bar ` +
`--optional-uses-library runtime-optional-x ` + `--optional-uses-library runtime-optional-x ` +
`--optional-uses-library runtime-optional-y ` + `--optional-uses-library runtime-optional-y ` +
`--missing-optional-uses-library missing-lib-b ` `--missing-optional-uses-library missing-lib-b ` +
`--missing-optional-uses-library missing-lib-a`
android.AssertStringDoesContain(t, "verify cmd args", verifyCmd, verifyArgs) android.AssertStringDoesContain(t, "verify cmd args", verifyCmd, verifyArgs)
// Test that all libraries are verified for an APK (library order matters). // Test that all libraries are verified for an APK (library order matters).

View File

@@ -2389,6 +2389,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
} }
addCLCFromDep(ctx, module, j.classLoaderContexts) addCLCFromDep(ctx, module, j.classLoaderContexts)
addMissingOptionalUsesLibsFromDep(ctx, module, &j.usesLibrary)
}) })
return deps return deps

View File

@@ -3175,6 +3175,22 @@ func addCLCFromDep(ctx android.ModuleContext, depModule android.Module,
} }
} }
func addMissingOptionalUsesLibsFromDep(ctx android.ModuleContext, depModule android.Module,
usesLibrary *usesLibrary) {
dep, ok := depModule.(ModuleWithUsesLibrary)
if !ok {
return
}
for _, lib := range dep.UsesLibrary().usesLibraryProperties.Missing_optional_uses_libs {
if !android.InList(lib, usesLibrary.usesLibraryProperties.Missing_optional_uses_libs) {
usesLibrary.usesLibraryProperties.Missing_optional_uses_libs =
append(usesLibrary.usesLibraryProperties.Missing_optional_uses_libs, lib)
}
}
}
type JavaApiContributionImport struct { type JavaApiContributionImport struct {
JavaApiContribution JavaApiContribution