diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index defa82c0c..2be40583c 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -943,20 +943,17 @@ func packageFileForTargetImage(ctx android.ModuleContext, image *bootImageVarian } for _, install := range image.vdexInstalls { - if image.target.Arch.ArchType.Name != ctx.DeviceConfig().DeviceArch() { - // Note that the vdex files are identical between architectures. If the target image is - // not for the primary architecture create symlinks to share the vdex of the primary - // architecture with the other architectures. - // - // Assuming that the install path has the architecture name with it, replace the - // architecture name with the primary architecture name to find the source vdex file. - installPath, relDir, name := getModuleInstallPathInfo(ctx, install.To) - if name != "" { - srcRelDir := strings.Replace(relDir, image.target.Arch.ArchType.Name, ctx.DeviceConfig().DeviceArch(), 1) - ctx.InstallSymlink(installPath.Join(ctx, relDir), name, installPath.Join(ctx, srcRelDir, name)) - } - } else { - packageFile(ctx, install) + installPath, relDir, name := getModuleInstallPathInfo(ctx, install.To) + if name == "" { + continue + } + // Note that the vdex files are identical between architectures. Copy the vdex to a no arch directory + // and create symlinks for both the primary and secondary arches. + ctx.InstallSymlink(installPath.Join(ctx, relDir), name, installPath.Join(ctx, "framework", name)) + if image.target.Arch.ArchType.Name == ctx.DeviceConfig().DeviceArch() { + // Copy the vdex from the primary arch to the no-arch directory + // e.g. /system/framework/$bootjar.vdex + ctx.InstallFile(installPath.Join(ctx, "framework"), name, install.From) } } }