Merge "Use the correct mainline BCP jars for app dexpreopt." into main
This commit is contained in:
@@ -5459,7 +5459,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
|
|
||||||
checkBootDexJarPath := func(t *testing.T, ctx *android.TestContext, stem string, bootDexJarPath string) {
|
checkBootDexJarPath := func(t *testing.T, ctx *android.TestContext, stem string, bootDexJarPath string) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
s := ctx.ModuleForTests("platform-bootclasspath", "android_common")
|
s := ctx.ModuleForTests("dex_bootjars", "android_common")
|
||||||
foundLibfooJar := false
|
foundLibfooJar := false
|
||||||
base := stem + ".jar"
|
base := stem + ".jar"
|
||||||
for _, output := range s.AllOutputs() {
|
for _, output := range s.AllOutputs() {
|
||||||
@@ -5909,8 +5909,8 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
|
|||||||
`
|
`
|
||||||
|
|
||||||
ctx := testDexpreoptWithApexes(t, bp, "", preparer, fragment)
|
ctx := testDexpreoptWithApexes(t, bp, "", preparer, fragment)
|
||||||
checkBootDexJarPath(t, ctx, "libfoo", "out/soong/.intermediates/libfoo/android_common_apex10000/hiddenapi/libfoo.jar")
|
checkBootDexJarPath(t, ctx, "libfoo", "out/soong/.intermediates/my-bootclasspath-fragment/android_common_myapex/hiddenapi-modular/encoded/libfoo.jar")
|
||||||
checkBootDexJarPath(t, ctx, "libbar", "out/soong/.intermediates/libbar/android_common_myapex/hiddenapi/libbar.jar")
|
checkBootDexJarPath(t, ctx, "libbar", "out/soong/.intermediates/my-bootclasspath-fragment/android_common_myapex/hiddenapi-modular/encoded/libbar.jar")
|
||||||
|
|
||||||
// Verify the correct module jars contribute to the hiddenapi index file.
|
// Verify the correct module jars contribute to the hiddenapi index file.
|
||||||
checkHiddenAPIIndexFromClassesInputs(t, ctx, ``)
|
checkHiddenAPIIndexFromClassesInputs(t, ctx, ``)
|
||||||
|
@@ -210,57 +210,18 @@ func isProfileProviderApex(ctx android.PathContext, apexName string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apex boot config allows to access build/install paths of apex boot jars without going
|
|
||||||
// through the usual trouble of registering dependencies on those modules and extracting build paths
|
|
||||||
// from those dependencies.
|
|
||||||
type apexBootConfig struct {
|
|
||||||
// A list of apex boot jars.
|
|
||||||
modules android.ConfiguredJarList
|
|
||||||
|
|
||||||
// A list of predefined build paths to apex boot jars. They are configured very early,
|
|
||||||
// before the modules for these jars are processed and the actual paths are generated, and
|
|
||||||
// later on a singleton adds commands to copy actual jars to the predefined paths.
|
|
||||||
dexPaths android.WritablePaths
|
|
||||||
|
|
||||||
// Map from module name (without prebuilt_ prefix) to the predefined build path.
|
|
||||||
dexPathsByModule map[string]android.WritablePath
|
|
||||||
|
|
||||||
// A list of dex locations (a.k.a. on-device paths) to the boot jars.
|
|
||||||
dexLocations []string
|
|
||||||
}
|
|
||||||
|
|
||||||
var updatableBootConfigKey = android.NewOnceKey("apexBootConfig")
|
|
||||||
|
|
||||||
// Returns apex boot config.
|
|
||||||
func GetApexBootConfig(ctx android.PathContext) apexBootConfig {
|
|
||||||
return ctx.Config().Once(updatableBootConfigKey, func() interface{} {
|
|
||||||
apexBootJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars
|
|
||||||
dir := android.PathForOutput(ctx, getDexpreoptDirName(ctx), "apex_bootjars")
|
|
||||||
dexPaths := apexBootJars.BuildPaths(ctx, dir)
|
|
||||||
dexPathsByModuleName := apexBootJars.BuildPathsByModule(ctx, dir)
|
|
||||||
|
|
||||||
dexLocations := apexBootJars.DevicePaths(ctx.Config(), android.Android)
|
|
||||||
|
|
||||||
return apexBootConfig{apexBootJars, dexPaths, dexPathsByModuleName, dexLocations}
|
|
||||||
}).(apexBootConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a list of paths and a list of locations for the boot jars used in dexpreopt (to be
|
// Returns a list of paths and a list of locations for the boot jars used in dexpreopt (to be
|
||||||
// passed in -Xbootclasspath and -Xbootclasspath-locations arguments for dex2oat).
|
// passed in -Xbootclasspath and -Xbootclasspath-locations arguments for dex2oat).
|
||||||
func bcpForDexpreopt(ctx android.PathContext, withUpdatable bool) (android.WritablePaths, []string) {
|
func bcpForDexpreopt(ctx android.PathContext, withUpdatable bool) (android.WritablePaths, []string) {
|
||||||
// Non-updatable boot jars (they are used both in the boot image and in dexpreopt).
|
|
||||||
bootImage := defaultBootImageConfig(ctx)
|
bootImage := defaultBootImageConfig(ctx)
|
||||||
|
if withUpdatable {
|
||||||
|
bootImage = mainlineBootImageConfig(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
dexPaths := bootImage.dexPathsDeps
|
dexPaths := bootImage.dexPathsDeps
|
||||||
// The dex locations for all Android variants are identical.
|
// The dex locations for all Android variants are identical.
|
||||||
dexLocations := bootImage.getAnyAndroidVariant().dexLocationsDeps
|
dexLocations := bootImage.getAnyAndroidVariant().dexLocationsDeps
|
||||||
|
|
||||||
if withUpdatable {
|
|
||||||
// Apex boot jars (they are used only in dexpreopt, but not in the boot image).
|
|
||||||
apexBootConfig := GetApexBootConfig(ctx)
|
|
||||||
dexPaths = append(dexPaths, apexBootConfig.dexPaths...)
|
|
||||||
dexLocations = append(dexLocations, apexBootConfig.dexLocations...)
|
|
||||||
}
|
|
||||||
|
|
||||||
return dexPaths, dexLocations
|
return dexPaths, dexLocations
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -202,8 +202,6 @@ func (b *platformBootclasspathModule) GenerateAndroidBuildActions(ctx android.Mo
|
|||||||
|
|
||||||
bootDexJarByModule := b.generateHiddenAPIBuildActions(ctx, b.configuredModules, b.fragments)
|
bootDexJarByModule := b.generateHiddenAPIBuildActions(ctx, b.configuredModules, b.fragments)
|
||||||
buildRuleForBootJarsPackageCheck(ctx, bootDexJarByModule)
|
buildRuleForBootJarsPackageCheck(ctx, bootDexJarByModule)
|
||||||
|
|
||||||
b.copyApexBootJarsForAppsDexpreopt(ctx, apexModules)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate classpaths.proto config
|
// Generate classpaths.proto config
|
||||||
@@ -415,10 +413,3 @@ func (b *platformBootclasspathModule) generateHiddenApiMakeVars(ctx android.Make
|
|||||||
// INTERNAL_PLATFORM_HIDDENAPI_FLAGS is used by Make rules in art/ and cts/.
|
// INTERNAL_PLATFORM_HIDDENAPI_FLAGS is used by Make rules in art/ and cts/.
|
||||||
ctx.Strict("INTERNAL_PLATFORM_HIDDENAPI_FLAGS", b.hiddenAPIFlagsCSV.String())
|
ctx.Strict("INTERNAL_PLATFORM_HIDDENAPI_FLAGS", b.hiddenAPIFlagsCSV.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy apex module dex jars to their predefined locations. They will be used for dexpreopt for apps.
|
|
||||||
func (b *platformBootclasspathModule) copyApexBootJarsForAppsDexpreopt(ctx android.ModuleContext, apexModules []android.Module) {
|
|
||||||
config := GetApexBootConfig(ctx)
|
|
||||||
apexBootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, apexModules)
|
|
||||||
copyBootJarsToPredefinedLocations(ctx, apexBootDexJarsByModule, config.dexPathsByModule)
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user