|  | // Copyright 2022 Google Inc. All rights reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | // Testing support for dexpreopt config. | 
|  | // | 
|  | // The bootImageConfig/bootImageVariant structs returned by genBootImageConfigs are used in many | 
|  | // places in the build and are currently mutated in a number of those locations. This provides | 
|  | // comprehensive tests of the fields in those structs to ensure that they have been initialized | 
|  | // correctly and where relevant, mutated correctly. | 
|  | // | 
|  | // This is used in TestBootImageConfig to verify that the | 
|  |  | 
|  | package java | 
|  |  | 
|  | import ( | 
|  | "fmt" | 
|  | "strings" | 
|  | "testing" | 
|  |  | 
|  | "android/soong/android" | 
|  | "android/soong/dexpreopt" | 
|  | ) | 
|  |  | 
|  | // PrepareForBootImageConfigTest is the minimal set of preparers that are needed to be able to use | 
|  | // the Check*BootImageConfig methods define here. | 
|  | var PrepareForBootImageConfigTest = android.GroupFixturePreparers( | 
|  | android.PrepareForTestWithArchMutator, | 
|  | android.PrepareForTestAccessingMakeVars, | 
|  | PrepareForTestWithDexpreopt, | 
|  | FixtureConfigureBootJars("com.android.art:core1", "com.android.art:core2", "platform:framework"), | 
|  | dexpreopt.FixtureSetTestOnlyArtBootImageJars("com.android.art:core1", "com.android.art:core2", "platform:extra1"), | 
|  | android.FixtureAddTextFile("extra1/Android.bp", ` | 
|  | java_library { | 
|  | name: "extra1", | 
|  | srcs: ["extra1.java"], | 
|  | installable: true, | 
|  | } | 
|  | `), | 
|  | android.FixtureAddFile("extra1/extra1.java", nil), | 
|  | ) | 
|  |  | 
|  | var PrepareApexBootJarConfigs = FixtureConfigureApexBootJars( | 
|  | "com.android.foo:framework-foo", "com.android.bar:framework-bar") | 
|  |  | 
|  | var PrepareApexBootJarConfigsAndModules = android.GroupFixturePreparers( | 
|  | PrepareApexBootJarConfigs, | 
|  | PrepareApexBootJarModule("com.android.foo", "framework-foo"), | 
|  | PrepareApexBootJarModule("com.android.bar", "framework-bar"), | 
|  | ) | 
|  |  | 
|  | var ApexBootJarFragmentsForPlatformBootclasspath = fmt.Sprintf(` | 
|  | { | 
|  | apex: "%[1]s", | 
|  | module: "%[1]s-bootclasspath-fragment", | 
|  | }, | 
|  | { | 
|  | apex: "%[2]s", | 
|  | module: "%[2]s-bootclasspath-fragment", | 
|  | }, | 
|  | `, "com.android.foo", "com.android.bar") | 
|  |  | 
|  | var ApexBootJarDexJarPaths = []string{ | 
|  | "out/soong/.intermediates/packages/modules/com.android.bar/framework-bar/android_common_apex10000/aligned/framework-bar.jar", | 
|  | "out/soong/.intermediates/packages/modules/com.android.foo/framework-foo/android_common_apex10000/aligned/framework-foo.jar", | 
|  | } | 
|  |  | 
|  | func PrepareApexBootJarModule(apexName string, moduleName string) android.FixturePreparer { | 
|  | moduleSourceDir := fmt.Sprintf("packages/modules/%s", apexName) | 
|  | fragmentName := apexName + "-bootclasspath-fragment" | 
|  | imageNameProp := "" | 
|  | if apexName == "com.android.art" { | 
|  | fragmentName = "art-bootclasspath-fragment" | 
|  | imageNameProp = `image_name: "art",` | 
|  | } | 
|  |  | 
|  | return android.GroupFixturePreparers( | 
|  | android.FixtureAddTextFile(moduleSourceDir+"/Android.bp", fmt.Sprintf(` | 
|  | apex { | 
|  | name: "%[1]s", | 
|  | key: "%[1]s.key", | 
|  | bootclasspath_fragments: [ | 
|  | "%[3]s", | 
|  | ], | 
|  | updatable: false, | 
|  | } | 
|  |  | 
|  | apex_key { | 
|  | name: "%[1]s.key", | 
|  | public_key: "%[1]s.avbpubkey", | 
|  | private_key: "%[1]s.pem", | 
|  | } | 
|  |  | 
|  | bootclasspath_fragment { | 
|  | name: "%[3]s", | 
|  | %[4]s | 
|  | contents: ["%[2]s"], | 
|  | apex_available: ["%[1]s"], | 
|  | hidden_api: { | 
|  | split_packages: ["*"], | 
|  | }, | 
|  | } | 
|  |  | 
|  | java_library { | 
|  | name: "%[2]s", | 
|  | srcs: ["%[2]s.java"], | 
|  | system_modules: "none", | 
|  | sdk_version: "none", | 
|  | compile_dex: true, | 
|  | apex_available: ["%[1]s"], | 
|  | } | 
|  | `, apexName, moduleName, fragmentName, imageNameProp)), | 
|  | android.FixtureMergeMockFs(android.MockFS{ | 
|  | fmt.Sprintf("%s/apex_manifest.json", moduleSourceDir):          nil, | 
|  | fmt.Sprintf("%s/%s.avbpubkey", moduleSourceDir, apexName):      nil, | 
|  | fmt.Sprintf("%s/%s.pem", moduleSourceDir, apexName):            nil, | 
|  | fmt.Sprintf("system/sepolicy/apex/%s-file_contexts", apexName): nil, | 
|  | fmt.Sprintf("%s/%s.java", moduleSourceDir, moduleName):         nil, | 
|  | }), | 
|  | ) | 
|  | } | 
|  |  | 
|  | // normalizedInstall represents a android.RuleBuilderInstall that has been normalized to remove | 
|  | // test specific parts of the From path. | 
|  | type normalizedInstall struct { | 
|  | from string | 
|  | to   string | 
|  | } | 
|  |  | 
|  | // normalizeInstalls converts a slice of android.RuleBuilderInstall into a slice of | 
|  | // normalizedInstall to allow them to be compared using android.AssertDeepEquals. | 
|  | func normalizeInstalls(installs android.RuleBuilderInstalls) []normalizedInstall { | 
|  | var normalized []normalizedInstall | 
|  | for _, install := range installs { | 
|  | normalized = append(normalized, normalizedInstall{ | 
|  | from: install.From.RelativeToTop().String(), | 
|  | to:   install.To, | 
|  | }) | 
|  | } | 
|  | return normalized | 
|  | } | 
|  |  | 
|  | // assertInstallsEqual normalized the android.RuleBuilderInstalls and compares against the expected | 
|  | // normalizedInstalls. | 
|  | func assertInstallsEqual(t *testing.T, message string, expected []normalizedInstall, actual android.RuleBuilderInstalls) { | 
|  | t.Helper() | 
|  | normalizedActual := normalizeInstalls(actual) | 
|  | android.AssertDeepEquals(t, message, expected, normalizedActual) | 
|  | } | 
|  |  | 
|  | // expectedConfig encapsulates the expected properties that will be set in a bootImageConfig | 
|  | // | 
|  | // Each field <x> in here is compared against the corresponding field <x> in bootImageConfig. | 
|  | type expectedConfig struct { | 
|  | name                     string | 
|  | stem                     string | 
|  | dir                      string | 
|  | symbolsDir               string | 
|  | installDir               string | 
|  | profileInstallPathInApex string | 
|  | modules                  android.ConfiguredJarList | 
|  | dexPaths                 []string | 
|  | dexPathsDeps             []string | 
|  | zip                      string | 
|  | variants                 []*expectedVariant | 
|  |  | 
|  | // Mutated fields | 
|  | profileInstalls            []normalizedInstall | 
|  | profileLicenseMetadataFile string | 
|  | } | 
|  |  | 
|  | // expectedVariant encapsulates the expected properties that will be set in a bootImageVariant | 
|  | // | 
|  | // Each field <x> in here is compared against the corresponding field <x> in bootImageVariant | 
|  | // except for archType which is compared against the target.Arch.ArchType field in bootImageVariant. | 
|  | type expectedVariant struct { | 
|  | archType          android.ArchType | 
|  | dexLocations      []string | 
|  | dexLocationsDeps  []string | 
|  | imagePathOnHost   string | 
|  | imagePathOnDevice string | 
|  | imagesDeps        []string | 
|  | baseImages        []string | 
|  | baseImagesDeps    []string | 
|  |  | 
|  | // Mutated fields | 
|  | installs            []normalizedInstall | 
|  | vdexInstalls        []normalizedInstall | 
|  | unstrippedInstalls  []normalizedInstall | 
|  | licenseMetadataFile string | 
|  | } | 
|  |  | 
|  | // CheckArtBootImageConfig checks the status of the fields of the bootImageConfig and | 
|  | // bootImageVariant structures that are returned from artBootImageConfig. | 
|  | // | 
|  | // This is before any fields are mutated. | 
|  | func CheckArtBootImageConfig(t *testing.T, result *android.TestResult) { | 
|  | checkArtBootImageConfig(t, result, false, "") | 
|  | } | 
|  |  | 
|  | // getArtImageConfig gets the ART bootImageConfig that was created during the test. | 
|  | func getArtImageConfig(result *android.TestResult) *bootImageConfig { | 
|  | pathCtx := &android.TestPathContext{TestResult: result} | 
|  | imageConfig := genBootImageConfigs(pathCtx)["art"] | 
|  | return imageConfig | 
|  | } | 
|  |  | 
|  | // checkArtBootImageConfig checks the ART boot image. | 
|  | // | 
|  | // mutated is true if this is called after fields in the image have been mutated by the ART | 
|  | // bootclasspath_fragment and false otherwise. | 
|  | func checkArtBootImageConfig(t *testing.T, result *android.TestResult, mutated bool, expectedLicenseMetadataFile string) { | 
|  | imageConfig := getArtImageConfig(result) | 
|  |  | 
|  | expected := &expectedConfig{ | 
|  | name:                     "art", | 
|  | stem:                     "boot", | 
|  | dir:                      "out/soong/dexpreopt_arm64/dex_artjars", | 
|  | symbolsDir:               "out/soong/dexpreopt_arm64/dex_artjars_unstripped", | 
|  | installDir:               "apex/art_boot_images/javalib", | 
|  | profileInstallPathInApex: "etc/boot-image.prof", | 
|  | modules:                  android.CreateTestConfiguredJarList([]string{"com.android.art:core1", "com.android.art:core2", "platform:extra1"}), | 
|  | dexPaths:                 []string{"out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/extra1.jar"}, | 
|  | dexPathsDeps:             []string{"out/soong/dexpreopt_arm64/dex_artjars_input/core1.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/core2.jar", "out/soong/dexpreopt_arm64/dex_artjars_input/extra1.jar"}, | 
|  | zip:                      "out/soong/dexpreopt_arm64/dex_artjars/art.zip", | 
|  | variants: []*expectedVariant{ | 
|  | { | 
|  | archType:          android.Arm64, | 
|  | dexLocations:      []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar", "/system/framework/extra1.jar"}, | 
|  | dexLocationsDeps:  []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar", "/system/framework/extra1.jar"}, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", | 
|  | imagePathOnDevice: "/apex/art_boot_images/javalib/arm64/boot.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot-core2.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.art", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot-extra1.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot-extra1.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot-core2.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot-extra1.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-extra1.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm64/boot-extra1.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType:          android.Arm, | 
|  | dexLocations:      []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar", "/system/framework/extra1.jar"}, | 
|  | dexLocationsDeps:  []string{"/apex/com.android.art/javalib/core1.jar", "/apex/com.android.art/javalib/core2.jar", "/system/framework/extra1.jar"}, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", | 
|  | imagePathOnDevice: "/apex/art_boot_images/javalib/arm/boot.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot-core2.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.art", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot-extra1.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot-extra1.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot-core2.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot-extra1.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-extra1.oat", | 
|  | to:   "/apex/art_boot_images/javalib/arm/boot-extra1.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType:          android.X86_64, | 
|  | dexLocations:      []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar", "host/linux-x86/system/framework/extra1.jar"}, | 
|  | dexLocationsDeps:  []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar", "host/linux-x86/system/framework/extra1.jar"}, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", | 
|  | imagePathOnDevice: "/apex/art_boot_images/javalib/x86_64/boot.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot.art", | 
|  | }, { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot-core2.art", | 
|  | }, { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.art", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot-extra1.art", | 
|  | }, { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot-extra1.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot-core2.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot-extra1.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86_64/boot-extra1.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType:          android.X86, | 
|  | dexLocations:      []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar", "host/linux-x86/system/framework/extra1.jar"}, | 
|  | dexLocationsDeps:  []string{"host/linux-x86/apex/com.android.art/javalib/core1.jar", "host/linux-x86/apex/com.android.art/javalib/core2.jar", "host/linux-x86/system/framework/extra1.jar"}, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", | 
|  | imagePathOnDevice: "/apex/art_boot_images/javalib/x86/boot.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.art", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot.art", | 
|  | }, { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot-core2.art", | 
|  | }, { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.art", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot-extra1.art", | 
|  | }, { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot-extra1.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot-core2.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.vdex", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot-extra1.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.oat", | 
|  | to:   "/apex/art_boot_images/javalib/x86/boot-extra1.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | }, | 
|  | } | 
|  |  | 
|  | checkBootImageConfig(t, result, imageConfig, mutated, expected) | 
|  | } | 
|  |  | 
|  | // getFrameworkImageConfig gets the framework bootImageConfig that was created during the test. | 
|  | func getFrameworkImageConfig(result *android.TestResult) *bootImageConfig { | 
|  | pathCtx := &android.TestPathContext{TestResult: result} | 
|  | imageConfig := defaultBootImageConfig(pathCtx) | 
|  | return imageConfig | 
|  | } | 
|  |  | 
|  | // CheckFrameworkBootImageConfig checks the status of the fields of the bootImageConfig and | 
|  | // bootImageVariant structures that are returned from defaultBootImageConfig. | 
|  | // | 
|  | // This is before any fields are mutated. | 
|  | func CheckFrameworkBootImageConfig(t *testing.T, result *android.TestResult) { | 
|  | checkFrameworkBootImageConfig(t, result, false, "") | 
|  | } | 
|  |  | 
|  | // checkFrameworkBootImageConfig checks the framework boot image. | 
|  | // | 
|  | // mutated is true if this is called after fields in the image have been mutated by the | 
|  | // platform_bootclasspath and false otherwise. | 
|  | func checkFrameworkBootImageConfig(t *testing.T, result *android.TestResult, mutated bool, expectedLicenseMetadataFile string) { | 
|  | imageConfig := getFrameworkImageConfig(result) | 
|  |  | 
|  | expected := &expectedConfig{ | 
|  | name:                     "boot", | 
|  | stem:                     "boot", | 
|  | dir:                      "out/soong/dexpreopt_arm64/dex_bootjars", | 
|  | symbolsDir:               "out/soong/dexpreopt_arm64/dex_bootjars_unstripped", | 
|  | installDir:               "system/framework", | 
|  | profileInstallPathInApex: "", | 
|  | modules: android.CreateTestConfiguredJarList([]string{ | 
|  | "com.android.art:core1", | 
|  | "com.android.art:core2", | 
|  | "platform:framework", | 
|  | }), | 
|  | dexPaths: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/core1.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/core2.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar", | 
|  | }, | 
|  | dexPathsDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/core1.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/core2.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar", | 
|  | }, | 
|  | zip: "out/soong/dexpreopt_arm64/dex_bootjars/boot.zip", | 
|  | variants: []*expectedVariant{ | 
|  | { | 
|  | archType: android.Arm64, | 
|  | dexLocations: []string{ | 
|  | "/apex/com.android.art/javalib/core1.jar", | 
|  | "/apex/com.android.art/javalib/core2.jar", | 
|  | "/system/framework/framework.jar", | 
|  | }, | 
|  | dexLocationsDeps: []string{ | 
|  | "/apex/com.android.art/javalib/core1.jar", | 
|  | "/apex/com.android.art/javalib/core2.jar", | 
|  | "/system/framework/framework.jar", | 
|  | }, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art", | 
|  | imagePathOnDevice: "/system/framework/arm64/boot.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art", | 
|  | to:   "/system/framework/arm64/boot.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat", | 
|  | to:   "/system/framework/arm64/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art", | 
|  | to:   "/system/framework/arm64/boot-core2.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat", | 
|  | to:   "/system/framework/arm64/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art", | 
|  | to:   "/system/framework/arm64/boot-framework.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat", | 
|  | to:   "/system/framework/arm64/boot-framework.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex", | 
|  | to:   "/system/framework/arm64/boot.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex", | 
|  | to:   "/system/framework/arm64/boot-core2.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", | 
|  | to:   "/system/framework/arm64/boot-framework.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot.oat", | 
|  | to:   "/system/framework/arm64/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-core2.oat", | 
|  | to:   "/system/framework/arm64/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat", | 
|  | to:   "/system/framework/arm64/boot-framework.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType: android.Arm, | 
|  | dexLocations: []string{ | 
|  | "/apex/com.android.art/javalib/core1.jar", | 
|  | "/apex/com.android.art/javalib/core2.jar", | 
|  | "/system/framework/framework.jar", | 
|  | }, | 
|  | dexLocationsDeps: []string{ | 
|  | "/apex/com.android.art/javalib/core1.jar", | 
|  | "/apex/com.android.art/javalib/core2.jar", | 
|  | "/system/framework/framework.jar", | 
|  | }, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art", | 
|  | imagePathOnDevice: "/system/framework/arm/boot.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art", | 
|  | to:   "/system/framework/arm/boot.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat", | 
|  | to:   "/system/framework/arm/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art", | 
|  | to:   "/system/framework/arm/boot-core2.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat", | 
|  | to:   "/system/framework/arm/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art", | 
|  | to:   "/system/framework/arm/boot-framework.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat", | 
|  | to:   "/system/framework/arm/boot-framework.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex", | 
|  | to:   "/system/framework/arm/boot.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex", | 
|  | to:   "/system/framework/arm/boot-core2.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex", | 
|  | to:   "/system/framework/arm/boot-framework.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot.oat", | 
|  | to:   "/system/framework/arm/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-core2.oat", | 
|  | to:   "/system/framework/arm/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat", | 
|  | to:   "/system/framework/arm/boot-framework.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType: android.X86_64, | 
|  | dexLocations: []string{ | 
|  | "host/linux-x86/apex/com.android.art/javalib/core1.jar", | 
|  | "host/linux-x86/apex/com.android.art/javalib/core2.jar", | 
|  | "host/linux-x86/system/framework/framework.jar", | 
|  | }, | 
|  | dexLocationsDeps: []string{ | 
|  | "host/linux-x86/apex/com.android.art/javalib/core1.jar", | 
|  | "host/linux-x86/apex/com.android.art/javalib/core2.jar", | 
|  | "host/linux-x86/system/framework/framework.jar", | 
|  | }, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art", | 
|  | imagePathOnDevice: "/system/framework/x86_64/boot.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art", | 
|  | to:   "/system/framework/x86_64/boot.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat", | 
|  | to:   "/system/framework/x86_64/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art", | 
|  | to:   "/system/framework/x86_64/boot-core2.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat", | 
|  | to:   "/system/framework/x86_64/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", | 
|  | to:   "/system/framework/x86_64/boot-framework.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", | 
|  | to:   "/system/framework/x86_64/boot-framework.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex", | 
|  | to:   "/system/framework/x86_64/boot.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex", | 
|  | to:   "/system/framework/x86_64/boot-core2.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", | 
|  | to:   "/system/framework/x86_64/boot-framework.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot.oat", | 
|  | to:   "/system/framework/x86_64/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-core2.oat", | 
|  | to:   "/system/framework/x86_64/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat", | 
|  | to:   "/system/framework/x86_64/boot-framework.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType: android.X86, | 
|  | dexLocations: []string{ | 
|  | "host/linux-x86/apex/com.android.art/javalib/core1.jar", | 
|  | "host/linux-x86/apex/com.android.art/javalib/core2.jar", | 
|  | "host/linux-x86/system/framework/framework.jar", | 
|  | }, | 
|  | dexLocationsDeps: []string{ | 
|  | "host/linux-x86/apex/com.android.art/javalib/core1.jar", | 
|  | "host/linux-x86/apex/com.android.art/javalib/core2.jar", | 
|  | "host/linux-x86/system/framework/framework.jar", | 
|  | }, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art", | 
|  | imagePathOnDevice: "/system/framework/x86/boot.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art", | 
|  | to:   "/system/framework/x86/boot.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat", | 
|  | to:   "/system/framework/x86/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art", | 
|  | to:   "/system/framework/x86/boot-core2.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat", | 
|  | to:   "/system/framework/x86/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", | 
|  | to:   "/system/framework/x86/boot-framework.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", | 
|  | to:   "/system/framework/x86/boot-framework.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex", | 
|  | to:   "/system/framework/x86/boot.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex", | 
|  | to:   "/system/framework/x86/boot-core2.vdex", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", | 
|  | to:   "/system/framework/x86/boot-framework.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot.oat", | 
|  | to:   "/system/framework/x86/boot.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-core2.oat", | 
|  | to:   "/system/framework/x86/boot-core2.oat", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat", | 
|  | to:   "/system/framework/x86/boot-framework.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | }, | 
|  | profileInstalls: []normalizedInstall{ | 
|  | {from: "out/soong/.intermediates/default/java/dex_bootjars/android_common/boot/boot.prof", to: "/system/etc/boot-image.prof"}, | 
|  | {from: "out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof", to: "/system/etc/boot-image.bprof"}, | 
|  | }, | 
|  | profileLicenseMetadataFile: expectedLicenseMetadataFile, | 
|  | } | 
|  |  | 
|  | checkBootImageConfig(t, result, imageConfig, mutated, expected) | 
|  | } | 
|  |  | 
|  | // getMainlineImageConfig gets the framework bootImageConfig that was created during the test. | 
|  | func getMainlineImageConfig(result *android.TestResult) *bootImageConfig { | 
|  | pathCtx := &android.TestPathContext{TestResult: result} | 
|  | imageConfig := mainlineBootImageConfig(pathCtx) | 
|  | return imageConfig | 
|  | } | 
|  |  | 
|  | // CheckMainlineBootImageConfig checks the status of the fields of the bootImageConfig and | 
|  | // bootImageVariant structures that are returned from mainlineBootImageConfig. | 
|  | // | 
|  | // This is before any fields are mutated. | 
|  | func CheckMainlineBootImageConfig(t *testing.T, result *android.TestResult) { | 
|  | expectedLicenseMetadataFile := "" | 
|  | imageConfig := getMainlineImageConfig(result) | 
|  |  | 
|  | expected := &expectedConfig{ | 
|  | name:                     "mainline", | 
|  | stem:                     "boot", | 
|  | dir:                      "out/soong/dexpreopt_arm64/dex_mainlinejars", | 
|  | symbolsDir:               "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped", | 
|  | installDir:               "system/framework", | 
|  | profileInstallPathInApex: "", | 
|  | modules: android.CreateTestConfiguredJarList([]string{ | 
|  | "com.android.foo:framework-foo", | 
|  | "com.android.bar:framework-bar", | 
|  | }), | 
|  | dexPaths: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-foo.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-bar.jar", | 
|  | }, | 
|  | dexPathsDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/core1.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/core2.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-foo.jar", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars_input/framework-bar.jar", | 
|  | }, | 
|  | zip: "out/soong/dexpreopt_arm64/dex_mainlinejars/mainline.zip", | 
|  | variants: []*expectedVariant{ | 
|  | { | 
|  | archType: android.Arm64, | 
|  | dexLocations: []string{ | 
|  | "/apex/com.android.foo/javalib/framework-foo.jar", | 
|  | "/apex/com.android.bar/javalib/framework-bar.jar", | 
|  | }, | 
|  | dexLocationsDeps: []string{ | 
|  | "/apex/com.android.art/javalib/core1.jar", | 
|  | "/apex/com.android.art/javalib/core2.jar", | 
|  | "/system/framework/framework.jar", | 
|  | "/apex/com.android.foo/javalib/framework-foo.jar", | 
|  | "/apex/com.android.bar/javalib/framework-bar.jar", | 
|  | }, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", | 
|  | imagePathOnDevice: "/system/framework/arm64/boot-framework-foo.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex", | 
|  | }, | 
|  | baseImages: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art", | 
|  | }, | 
|  | baseImagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art", | 
|  | to:   "/system/framework/arm64/boot-framework-foo.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat", | 
|  | to:   "/system/framework/arm64/boot-framework-foo.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex", | 
|  | to:   "/system/framework/arm64/boot-framework-foo.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat", | 
|  | to:   "/system/framework/arm64/boot-framework-foo.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType: android.Arm, | 
|  | dexLocations: []string{ | 
|  | "/apex/com.android.foo/javalib/framework-foo.jar", | 
|  | "/apex/com.android.bar/javalib/framework-bar.jar", | 
|  | }, | 
|  | dexLocationsDeps: []string{ | 
|  | "/apex/com.android.art/javalib/core1.jar", | 
|  | "/apex/com.android.art/javalib/core2.jar", | 
|  | "/system/framework/framework.jar", | 
|  | "/apex/com.android.foo/javalib/framework-foo.jar", | 
|  | "/apex/com.android.bar/javalib/framework-bar.jar", | 
|  | }, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", | 
|  | imagePathOnDevice: "/system/framework/arm/boot-framework-foo.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex", | 
|  | }, | 
|  | baseImages: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art", | 
|  | }, | 
|  | baseImagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art", | 
|  | to:   "/system/framework/arm/boot-framework-foo.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat", | 
|  | to:   "/system/framework/arm/boot-framework-foo.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex", | 
|  | to:   "/system/framework/arm/boot-framework-foo.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat", | 
|  | to:   "/system/framework/arm/boot-framework-foo.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType: android.X86_64, | 
|  | dexLocations: []string{ | 
|  | "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", | 
|  | "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", | 
|  | }, | 
|  | dexLocationsDeps: []string{ | 
|  | "host/linux-x86/apex/com.android.art/javalib/core1.jar", | 
|  | "host/linux-x86/apex/com.android.art/javalib/core2.jar", | 
|  | "host/linux-x86/system/framework/framework.jar", | 
|  | "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", | 
|  | "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", | 
|  | }, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", | 
|  | imagePathOnDevice: "/system/framework/x86_64/boot-framework-foo.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex", | 
|  | }, | 
|  | baseImages: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art", | 
|  | }, | 
|  | baseImagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art", | 
|  | to:   "/system/framework/x86_64/boot-framework-foo.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", | 
|  | to:   "/system/framework/x86_64/boot-framework-foo.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex", | 
|  | to:   "/system/framework/x86_64/boot-framework-foo.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat", | 
|  | to:   "/system/framework/x86_64/boot-framework-foo.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | { | 
|  | archType: android.X86, | 
|  | dexLocations: []string{ | 
|  | "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", | 
|  | "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", | 
|  | }, | 
|  | dexLocationsDeps: []string{ | 
|  | "host/linux-x86/apex/com.android.art/javalib/core1.jar", | 
|  | "host/linux-x86/apex/com.android.art/javalib/core2.jar", | 
|  | "host/linux-x86/system/framework/framework.jar", | 
|  | "host/linux-x86/apex/com.android.foo/javalib/framework-foo.jar", | 
|  | "host/linux-x86/apex/com.android.bar/javalib/framework-bar.jar", | 
|  | }, | 
|  | imagePathOnHost:   "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", | 
|  | imagePathOnDevice: "/system/framework/x86/boot-framework-foo.art", | 
|  | imagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex", | 
|  | }, | 
|  | baseImages: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art", | 
|  | }, | 
|  | baseImagesDeps: []string{ | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat", | 
|  | "out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex", | 
|  | }, | 
|  | installs: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art", | 
|  | to:   "/system/framework/x86/boot-framework-foo.art", | 
|  | }, | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat", | 
|  | to:   "/system/framework/x86/boot-framework-foo.oat", | 
|  | }, | 
|  | }, | 
|  | vdexInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex", | 
|  | to:   "/system/framework/x86/boot-framework-foo.vdex", | 
|  | }, | 
|  | }, | 
|  | unstrippedInstalls: []normalizedInstall{ | 
|  | { | 
|  | from: "out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat", | 
|  | to:   "/system/framework/x86/boot-framework-foo.oat", | 
|  | }, | 
|  | }, | 
|  | licenseMetadataFile: expectedLicenseMetadataFile, | 
|  | }, | 
|  | }, | 
|  | profileInstalls:            []normalizedInstall{}, | 
|  | profileLicenseMetadataFile: expectedLicenseMetadataFile, | 
|  | } | 
|  |  | 
|  | checkBootImageConfig(t, result, imageConfig, false, expected) | 
|  | } | 
|  |  | 
|  | // clearMutatedFields clears fields in the expectedConfig that correspond to fields in the | 
|  | // bootImageConfig/bootImageVariant structs which are mutated outside the call to | 
|  | // genBootImageConfigs. | 
|  | // | 
|  | // This allows the resulting expectedConfig struct to be compared against the values of those boot | 
|  | // image structs immediately the call to genBootImageConfigs. If this is not called then the | 
|  | // expectedConfig struct will expect the boot image structs to have been mutated by the ART | 
|  | // bootclasspath_fragment and the platform_bootclasspath. | 
|  | func clearMutatedFields(expected *expectedConfig) { | 
|  | expected.profileInstalls = nil | 
|  | expected.profileLicenseMetadataFile = "" | 
|  | for _, variant := range expected.variants { | 
|  | variant.installs = nil | 
|  | variant.vdexInstalls = nil | 
|  | variant.unstrippedInstalls = nil | 
|  | variant.licenseMetadataFile = "" | 
|  | } | 
|  | } | 
|  |  | 
|  | // checkBootImageConfig checks a boot image against the expected contents. | 
|  | // | 
|  | // If mutated is false then this will clear any mutated fields in the expected contents back to the | 
|  | // zero value so that they will match the unmodified values in the boot image. | 
|  | // | 
|  | // It runs the checks in an image specific subtest of the current test. | 
|  | func checkBootImageConfig(t *testing.T, result *android.TestResult, imageConfig *bootImageConfig, mutated bool, expected *expectedConfig) { | 
|  | if !mutated { | 
|  | clearMutatedFields(expected) | 
|  | } | 
|  |  | 
|  | t.Run(imageConfig.name, func(t *testing.T) { | 
|  | nestedCheckBootImageConfig(t, result, imageConfig, mutated, expected) | 
|  | }) | 
|  | } | 
|  |  | 
|  | // nestedCheckBootImageConfig does the work of comparing the image against the expected values and | 
|  | // is run in an image specific subtest. | 
|  | func nestedCheckBootImageConfig(t *testing.T, result *android.TestResult, imageConfig *bootImageConfig, mutated bool, expected *expectedConfig) { | 
|  | android.AssertStringEquals(t, "name", expected.name, imageConfig.name) | 
|  | android.AssertStringEquals(t, "stem", expected.stem, imageConfig.stem) | 
|  | android.AssertPathRelativeToTopEquals(t, "dir", expected.dir, imageConfig.dir) | 
|  | android.AssertPathRelativeToTopEquals(t, "symbolsDir", expected.symbolsDir, imageConfig.symbolsDir) | 
|  | android.AssertStringEquals(t, "installDir", expected.installDir, imageConfig.installDir) | 
|  | android.AssertDeepEquals(t, "modules", expected.modules, imageConfig.modules) | 
|  | android.AssertPathsRelativeToTopEquals(t, "dexPaths", expected.dexPaths, imageConfig.dexPaths.Paths()) | 
|  | android.AssertPathsRelativeToTopEquals(t, "dexPathsDeps", expected.dexPathsDeps, imageConfig.dexPathsDeps.Paths()) | 
|  | // dexPathsByModule is just a different representation of the other information in the config. | 
|  | android.AssertPathRelativeToTopEquals(t, "zip", expected.zip, imageConfig.zip) | 
|  |  | 
|  | if !mutated { | 
|  | dexBootJarModule := result.ModuleForTests("dex_bootjars", "android_common") | 
|  | profileInstallInfo, _ := android.SingletonModuleProvider(result, dexBootJarModule.Module(), profileInstallInfoProvider) | 
|  | assertInstallsEqual(t, "profileInstalls", expected.profileInstalls, profileInstallInfo.profileInstalls) | 
|  | android.AssertStringEquals(t, "profileLicenseMetadataFile", expected.profileLicenseMetadataFile, profileInstallInfo.profileLicenseMetadataFile.RelativeToTop().String()) | 
|  | } | 
|  |  | 
|  | android.AssertIntEquals(t, "variant count", 4, len(imageConfig.variants)) | 
|  | for i, variant := range imageConfig.variants { | 
|  | expectedVariant := expected.variants[i] | 
|  | t.Run(variant.target.Arch.ArchType.String(), func(t *testing.T) { | 
|  | android.AssertDeepEquals(t, "archType", expectedVariant.archType, variant.target.Arch.ArchType) | 
|  | android.AssertDeepEquals(t, "dexLocations", expectedVariant.dexLocations, variant.dexLocations) | 
|  | android.AssertDeepEquals(t, "dexLocationsDeps", expectedVariant.dexLocationsDeps, variant.dexLocationsDeps) | 
|  | android.AssertPathRelativeToTopEquals(t, "imagePathOnHost", expectedVariant.imagePathOnHost, variant.imagePathOnHost) | 
|  | android.AssertStringEquals(t, "imagePathOnDevice", expectedVariant.imagePathOnDevice, variant.imagePathOnDevice) | 
|  | android.AssertPathsRelativeToTopEquals(t, "imagesDeps", expectedVariant.imagesDeps, variant.imagesDeps.Paths()) | 
|  | android.AssertPathsRelativeToTopEquals(t, "baseImages", expectedVariant.baseImages, variant.baseImages.Paths()) | 
|  | android.AssertPathsRelativeToTopEquals(t, "baseImagesDeps", expectedVariant.baseImagesDeps, variant.baseImagesDeps) | 
|  | assertInstallsEqual(t, "installs", expectedVariant.installs, variant.installs) | 
|  | assertInstallsEqual(t, "vdexInstalls", expectedVariant.vdexInstalls, variant.vdexInstalls) | 
|  | assertInstallsEqual(t, "unstrippedInstalls", expectedVariant.unstrippedInstalls, variant.unstrippedInstalls) | 
|  | android.AssertStringEquals(t, "licenseMetadataFile", expectedVariant.licenseMetadataFile, variant.licenseMetadataFile.RelativeToTop().String()) | 
|  | }) | 
|  | } | 
|  | } | 
|  |  | 
|  | // CheckMutatedArtBootImageConfig checks the mutated fields in the bootImageConfig/Variant for ART. | 
|  | func CheckMutatedArtBootImageConfig(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) { | 
|  | checkArtBootImageConfig(t, result, true, expectedLicenseMetadataFile) | 
|  |  | 
|  | // Check the dexpreopt make vars. Do it in here as it depends on the expected license metadata | 
|  | // file at the moment and it | 
|  | checkDexpreoptMakeVars(t, result, expectedLicenseMetadataFile) | 
|  | } | 
|  |  | 
|  | // CheckMutatedFrameworkBootImageConfig checks the mutated fields in the bootImageConfig/Variant for framework. | 
|  | func CheckMutatedFrameworkBootImageConfig(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) { | 
|  | checkFrameworkBootImageConfig(t, result, true, expectedLicenseMetadataFile) | 
|  | } | 
|  |  | 
|  | // checkDexpreoptMakeVars checks the DEXPREOPT_ prefixed make vars produced by dexpreoptBootJars | 
|  | // singleton. | 
|  | func checkDexpreoptMakeVars(t *testing.T, result *android.TestResult, expectedLicenseMetadataFile string) { | 
|  | vars := result.MakeVarsForTesting(func(variable android.MakeVarVariable) bool { | 
|  | return strings.HasPrefix(variable.Name(), "DEXPREOPT_") | 
|  | }) | 
|  |  | 
|  | out := &strings.Builder{} | 
|  | for _, v := range vars { | 
|  | fmt.Fprintf(out, "%s=%s\n", v.Name(), android.StringRelativeToTop(result.Config, v.Value())) | 
|  | } | 
|  | format := ` | 
|  | DEXPREOPT_BOOTCLASSPATH_DEX_FILES=out/soong/dexpreopt_arm64/dex_bootjars_input/core1.jar out/soong/dexpreopt_arm64/dex_bootjars_input/core2.jar out/soong/dexpreopt_arm64/dex_bootjars_input/framework.jar | 
|  | DEXPREOPT_BOOTCLASSPATH_DEX_LOCATIONS=/apex/com.android.art/javalib/core1.jar /apex/com.android.art/javalib/core2.jar /system/framework/framework.jar | 
|  | DEXPREOPT_BOOT_JARS_MODULES=com.android.art:core1:com.android.art:core2:platform:framework | 
|  | DEXPREOPT_GEN=out/host/linux-x86/bin/dexpreopt_gen | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art:/apex/art_boot_images/javalib/arm/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art:/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.art:/apex/art_boot_images/javalib/arm/boot-extra1.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.oat:/apex/art_boot_images/javalib/arm/boot-extra1.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art:/apex/art_boot_images/javalib/arm64/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art:/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.art:/apex/art_boot_images/javalib/arm64/boot-extra1.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.oat:/apex/art_boot_images/javalib/arm64/boot-extra1.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art:/apex/art_boot_images/javalib/x86/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art:/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.art:/apex/art_boot_images/javalib/x86/boot-extra1.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.oat:/apex/art_boot_images/javalib/x86/boot-extra1.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art:/apex/art_boot_images/javalib/x86_64/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art:/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.art:/apex/art_boot_images/javalib/x86_64/boot-extra1.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.oat:/apex/art_boot_images/javalib/x86_64/boot-extra1.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art:/system/framework/arm/boot.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat:/system/framework/arm/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art:/system/framework/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat:/system/framework/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art:/system/framework/arm/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art:/system/framework/arm64/boot.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat:/system/framework/arm64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art:/system/framework/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat:/system/framework/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art:/system/framework/arm64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art:/system/framework/x86/boot.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat:/system/framework/x86/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art:/system/framework/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat:/system/framework/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art:/system/framework/x86/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art:/system/framework/x86_64/boot.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat:/system/framework/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art:/system/framework/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat:/system/framework/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art:/system/framework/x86_64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art:/system/framework/arm/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art:/system/framework/arm64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art:/system/framework/x86/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat | 
|  | DEXPREOPT_IMAGE_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art:/system/framework/x86_64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat | 
|  | DEXPREOPT_IMAGE_DEPS_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.art out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.oat out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.art out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.oat out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.art out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.oat out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex | 
|  | DEXPREOPT_IMAGE_DEPS_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.oat out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm=%[1]s | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_art_arm64=%[1]s | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_art_host_x86=%[1]s | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_art_host_x86_64=%[1]s | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_boot_arm=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_boot_arm64=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_boot_host_x86=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_boot_host_x86_64=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_arm=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_arm64=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_host_x86=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_LICENSE_METADATA_mainline_host_x86_64=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEart=/apex/art_boot_images/javalib/boot.art | 
|  | DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEboot=/system/framework/boot.art | 
|  | DEXPREOPT_IMAGE_LOCATIONS_ON_DEVICEmainline=/system/framework/boot.art:/system/framework/boot-framework-foo.art | 
|  | DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTart=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/boot.art | 
|  | DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTboot=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot.art | 
|  | DEXPREOPT_IMAGE_LOCATIONS_ON_HOSTmainline=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/boot.art:out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/boot-framework-foo.art | 
|  | DEXPREOPT_IMAGE_NAMES=art boot mainline | 
|  | DEXPREOPT_IMAGE_PROFILE_BUILT_INSTALLED=out/soong/.intermediates/default/java/dex_bootjars/android_common/boot/boot.prof:/system/etc/boot-image.prof out/soong/dexpreopt_arm64/dex_bootjars/boot.bprof:/system/etc/boot-image.bprof | 
|  | DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA=out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot.oat:/apex/art_boot_images/javalib/arm/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-core2.oat:/apex/art_boot_images/javalib/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm/boot-extra1.oat:/apex/art_boot_images/javalib/arm/boot-extra1.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot.oat:/apex/art_boot_images/javalib/arm64/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-core2.oat:/apex/art_boot_images/javalib/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/android/apex/art_boot_images/javalib/arm64/boot-extra1.oat:/apex/art_boot_images/javalib/arm64/boot-extra1.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot.oat:/apex/art_boot_images/javalib/x86/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.oat:/apex/art_boot_images/javalib/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.oat:/apex/art_boot_images/javalib/x86/boot-extra1.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.oat:/apex/art_boot_images/javalib/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.oat:/apex/art_boot_images/javalib/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_artjars_unstripped/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.oat:/apex/art_boot_images/javalib/x86_64/boot-extra1.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot.oat:/system/framework/arm/boot.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-core2.oat:/system/framework/arm/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm/boot-framework.oat:/system/framework/arm/boot-framework.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot.oat:/system/framework/arm64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-core2.oat:/system/framework/arm64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/android/system/framework/arm64/boot-framework.oat:/system/framework/arm64/boot-framework.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot.oat:/system/framework/x86/boot.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-core2.oat:/system/framework/x86/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86/boot-framework.oat:/system/framework/x86/boot-framework.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot.oat:/system/framework/x86_64/boot.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-core2.oat:/system/framework/x86_64/boot-core2.oat out/soong/dexpreopt_arm64/dex_bootjars_unstripped/linux_glibc/system/framework/x86_64/boot-framework.oat:/system/framework/x86_64/boot-framework.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm/boot-framework-foo.oat:/system/framework/arm/boot-framework-foo.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/android/system/framework/arm64/boot-framework-foo.oat:/system/framework/arm64/boot-framework-foo.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86/boot-framework-foo.oat:/system/framework/x86/boot-framework-foo.oat | 
|  | DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars_unstripped/linux_glibc/system/framework/x86_64/boot-framework-foo.oat:/system/framework/x86_64/boot-framework-foo.oat | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.vdex:/apex/art_boot_images/javalib/arm/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-core2.vdex:/apex/art_boot_images/javalib/arm/boot-core2.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot-extra1.vdex:/apex/art_boot_images/javalib/arm/boot-extra1.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.vdex:/apex/art_boot_images/javalib/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-core2.vdex:/apex/art_boot_images/javalib/arm64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot-extra1.vdex:/apex/art_boot_images/javalib/arm64/boot-extra1.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.vdex:/apex/art_boot_images/javalib/x86/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-core2.vdex:/apex/art_boot_images/javalib/x86/boot-core2.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot-extra1.vdex:/apex/art_boot_images/javalib/x86/boot-extra1.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.vdex:/apex/art_boot_images/javalib/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-core2.vdex:/apex/art_boot_images/javalib/x86_64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot-extra1.vdex:/apex/art_boot_images/javalib/x86_64/boot-extra1.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.vdex:/system/framework/arm/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-core2.vdex:/system/framework/arm/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot-framework.vdex:/system/framework/arm/boot-framework.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.vdex:/system/framework/arm64/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-core2.vdex:/system/framework/arm64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot-framework.vdex:/system/framework/arm64/boot-framework.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.vdex:/system/framework/x86/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-core2.vdex:/system/framework/x86/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot-framework.vdex:/system/framework/x86/boot-framework.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.vdex:/system/framework/x86_64/boot.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-core2.vdex:/system/framework/x86_64/boot-core2.vdex out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot-framework.vdex:/system/framework/x86_64/boot-framework.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.vdex:/system/framework/arm/boot-framework-foo.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.vdex:/system/framework/arm64/boot-framework-foo.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.vdex:/system/framework/x86/boot-framework-foo.vdex | 
|  | DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.vdex:/system/framework/x86_64/boot-framework-foo.vdex | 
|  | DEXPREOPT_IMAGE_ZIP_art=out/soong/dexpreopt_arm64/dex_artjars/art.zip | 
|  | DEXPREOPT_IMAGE_ZIP_boot=out/soong/dexpreopt_arm64/dex_bootjars/boot.zip | 
|  | DEXPREOPT_IMAGE_ZIP_mainline=out/soong/dexpreopt_arm64/dex_mainlinejars/mainline.zip | 
|  | DEXPREOPT_IMAGE_art_arm=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm/boot.art | 
|  | DEXPREOPT_IMAGE_art_arm64=out/soong/dexpreopt_arm64/dex_artjars/android/apex/art_boot_images/javalib/arm64/boot.art | 
|  | DEXPREOPT_IMAGE_art_host_x86=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86/boot.art | 
|  | DEXPREOPT_IMAGE_art_host_x86_64=out/soong/dexpreopt_arm64/dex_artjars/linux_glibc/apex/art_boot_images/javalib/x86_64/boot.art | 
|  | DEXPREOPT_IMAGE_boot_arm=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm/boot.art | 
|  | DEXPREOPT_IMAGE_boot_arm64=out/soong/dexpreopt_arm64/dex_bootjars/android/system/framework/arm64/boot.art | 
|  | DEXPREOPT_IMAGE_boot_host_x86=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86/boot.art | 
|  | DEXPREOPT_IMAGE_boot_host_x86_64=out/soong/dexpreopt_arm64/dex_bootjars/linux_glibc/system/framework/x86_64/boot.art | 
|  | DEXPREOPT_IMAGE_mainline_arm=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm/boot-framework-foo.art | 
|  | DEXPREOPT_IMAGE_mainline_arm64=out/soong/dexpreopt_arm64/dex_mainlinejars/android/system/framework/arm64/boot-framework-foo.art | 
|  | DEXPREOPT_IMAGE_mainline_host_x86=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86/boot-framework-foo.art | 
|  | DEXPREOPT_IMAGE_mainline_host_x86_64=out/soong/dexpreopt_arm64/dex_mainlinejars/linux_glibc/system/framework/x86_64/boot-framework-foo.art | 
|  | ` | 
|  | expected := strings.TrimSpace(fmt.Sprintf(format, expectedLicenseMetadataFile)) | 
|  | actual := strings.TrimSpace(out.String()) | 
|  | android.AssertStringEquals(t, "vars", expected, actual) | 
|  | } |