blob: 5d419584ad65e1dbec95bb901d0d5841b21f5d4a [file] [log] [blame]
Paul Duffinf7f65da2021-03-10 15:00:46 +00001// Copyright (C) 2021 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package sdk
16
Paul Duffin4a1d4512021-03-18 10:12:26 +000017import (
Paul Duffin7c475152021-06-09 16:17:58 +010018 "fmt"
19 "path/filepath"
Paul Duffin8eb45732022-10-04 19:03:31 +010020 "strings"
Paul Duffin4a1d4512021-03-18 10:12:26 +000021 "testing"
22
23 "android/soong/android"
Paul Duffina57835e2021-04-19 13:23:06 +010024 "android/soong/java"
Paul Duffin4a1d4512021-03-18 10:12:26 +000025)
Paul Duffinf7f65da2021-03-10 15:00:46 +000026
Paul Duffin7c475152021-06-09 16:17:58 +010027// fixtureAddPlatformBootclasspathForBootclasspathFragment adds a platform_bootclasspath module that
28// references the bootclasspath fragment.
29func fixtureAddPlatformBootclasspathForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
Jiakai Zhangb8796202023-03-06 19:16:48 +000030 return fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, "")
31}
32
33// fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra is the same as above, but also adds extra fragments.
34func fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, extraFragments string) android.FixturePreparer {
Paul Duffin7c475152021-06-09 16:17:58 +010035 return android.GroupFixturePreparers(
36 // Add a platform_bootclasspath module.
37 android.FixtureAddTextFile("frameworks/base/boot/Android.bp", fmt.Sprintf(`
38 platform_bootclasspath {
39 name: "platform-bootclasspath",
40 fragments: [
41 {
42 apex: "%s",
43 module: "%s",
44 },
Jiakai Zhangb8796202023-03-06 19:16:48 +000045 %s
Paul Duffin7c475152021-06-09 16:17:58 +010046 ],
47 }
Jiakai Zhangb8796202023-03-06 19:16:48 +000048 `, apex, fragment, extraFragments)),
Paul Duffin7c475152021-06-09 16:17:58 +010049 android.FixtureAddFile("frameworks/base/config/boot-profile.txt", nil),
Jiakai Zhang49b1eb62021-11-26 18:09:27 +000050 android.FixtureAddFile("frameworks/base/config/boot-image-profile.txt", nil),
Paul Duffinc8ead412021-06-07 19:28:15 +010051 android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
Paul Duffin7c475152021-06-09 16:17:58 +010052 )
53}
54
55// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
56func fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
57 apexFile := fmt.Sprintf("%s.apex", apex)
58 dir := "prebuilts/apex"
59 return android.GroupFixturePreparers(
60 // A preparer to add a prebuilt apex to the test fixture.
61 android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
62 prebuilt_apex {
63 name: "%s",
64 src: "%s",
65 exported_bootclasspath_fragments: [
66 "%s",
67 ],
68 }
69 `, apex, apexFile, fragment)),
70 android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
71 )
72}
73
Paul Duffina57835e2021-04-19 13:23:06 +010074func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
75 result := android.GroupFixturePreparers(
76 prepareForSdkTestWithJava,
Jiakai Zhangb95998b2023-05-11 16:39:27 +010077 java.PrepareForTestWithDexpreopt,
Paul Duffina57835e2021-04-19 13:23:06 +010078 prepareForSdkTestWithApex,
79
80 // Some additional files needed for the art apex.
81 android.FixtureMergeMockFs(android.MockFS{
82 "com.android.art.avbpubkey": nil,
83 "com.android.art.pem": nil,
84 "system/sepolicy/apex/com.android.art-file_contexts": nil,
85 }),
Paul Duffin023dba02021-04-22 01:45:29 +010086
Paul Duffin7c475152021-06-09 16:17:58 +010087 // Add a platform_bootclasspath that depends on the fragment.
Jiakai Zhangb8796202023-03-06 19:16:48 +000088 fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(
Jiakai Zhangb69e8952023-07-11 14:31:22 +010089 "com.android.art", "art-bootclasspath-fragment", java.ApexBootJarFragmentsForPlatformBootclasspath),
Paul Duffin023dba02021-04-22 01:45:29 +010090
Paul Duffin8eb45732022-10-04 19:03:31 +010091 java.PrepareForBootImageConfigTest,
Jiakai Zhangb8796202023-03-06 19:16:48 +000092 java.PrepareApexBootJarConfigsAndModules,
Paul Duffina57835e2021-04-19 13:23:06 +010093 android.FixtureWithRootAndroidBp(`
94 sdk {
95 name: "mysdk",
Jiakai Zhangb69e8952023-07-11 14:31:22 +010096 bootclasspath_fragments: ["art-bootclasspath-fragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010097 }
98
99 apex {
100 name: "com.android.art",
101 key: "com.android.art.key",
102 bootclasspath_fragments: [
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100103 "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100104 ],
105 updatable: false,
106 }
107
108 bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100109 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100110 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100111 contents: ["core1", "core2"],
Paul Duffina57835e2021-04-19 13:23:06 +0100112 apex_available: ["com.android.art"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100113 hidden_api: {
114 split_packages: ["*"],
115 },
Paul Duffina57835e2021-04-19 13:23:06 +0100116 }
117
118 apex_key {
119 name: "com.android.art.key",
120 public_key: "com.android.art.avbpubkey",
121 private_key: "com.android.art.pem",
122 }
123
124 java_library {
Paul Duffin8eb45732022-10-04 19:03:31 +0100125 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100126 srcs: ["Test.java"],
127 system_modules: "none",
128 sdk_version: "none",
129 compile_dex: true,
130 apex_available: ["com.android.art"],
131 }
Paul Duffin8eb45732022-10-04 19:03:31 +0100132
133 java_library {
134 name: "core2",
135 srcs: ["Test.java"],
136 system_modules: "none",
137 sdk_version: "none",
138 compile_dex: true,
139 apex_available: ["com.android.art"],
140 }
141`),
Paul Duffina57835e2021-04-19 13:23:06 +0100142 ).RunTest(t)
143
Paul Duffin7c475152021-06-09 16:17:58 +0100144 // A preparer to update the test fixture used when processing an unpackage snapshot.
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100145 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "art-bootclasspath-fragment")
Paul Duffin023dba02021-04-22 01:45:29 +0100146
Paul Duffin8eb45732022-10-04 19:03:31 +0100147 // Check that source on its own configures the bootImageConfig correctly.
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100148 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
149 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100150
Paul Duffina57835e2021-04-19 13:23:06 +0100151 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000152 checkAndroidBpContents(`
Paul Duffina57835e2021-04-19 13:23:06 +0100153// This is auto-generated. DO NOT EDIT.
154
155prebuilt_bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100156 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100157 prefer: false,
158 visibility: ["//visibility:public"],
159 apex_available: ["com.android.art"],
160 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100161 contents: [
162 "core1",
163 "core2",
164 ],
Paul Duffinda286f42021-06-29 11:59:23 +0100165 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100166 annotation_flags: "hiddenapi/annotation-flags.csv",
167 metadata: "hiddenapi/metadata.csv",
168 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100169 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100170 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
171 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100172 },
Paul Duffina57835e2021-04-19 13:23:06 +0100173}
174
175java_import {
Paul Duffin8eb45732022-10-04 19:03:31 +0100176 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100177 prefer: false,
178 visibility: ["//visibility:public"],
179 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000180 jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
Paul Duffin8eb45732022-10-04 19:03:31 +0100181}
182
183java_import {
184 name: "core2",
185 prefer: false,
186 visibility: ["//visibility:public"],
187 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000188 jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100189}
190`),
Paul Duffina57835e2021-04-19 13:23:06 +0100191 checkAllCopyRules(`
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100192.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
193.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
194.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
195.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
196.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
197.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000198.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
199.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100200 `),
Paul Duffin7c475152021-06-09 16:17:58 +0100201 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100202
203 // Check the behavior of the snapshot without the source.
204 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin8eb45732022-10-04 19:03:31 +0100205 // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
206 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000207 append(
208 []string{
Spandan Das3576e762024-01-03 18:57:03 +0000209 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core1.jar",
210 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core2.jar",
Jiakai Zhangb8796202023-03-06 19:16:48 +0000211 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
212 },
213 java.ApexBootJarDexJarPaths...,
214 )...,
215 )
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100216 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
217 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffinc8ead412021-06-07 19:28:15 +0100218 }),
219
Paul Duffin7c475152021-06-09 16:17:58 +0100220 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100221
222 // Check the behavior of the snapshot when the source is preferred.
223 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100224 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
225 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100226 }),
227
Paul Duffin7c475152021-06-09 16:17:58 +0100228 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100229
230 // Check the behavior of the snapshot when it is preferred.
231 snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100232 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
233 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100234 }),
Paul Duffina57835e2021-04-19 13:23:06 +0100235 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100236
Paul Duffin8eb45732022-10-04 19:03:31 +0100237 // Make sure that the boot jars package check rule includes the dex jars created from the source.
238 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000239 append(
240 []string{
241 "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
242 "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
243 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
244 },
245 java.ApexBootJarDexJarPaths...,
246 )...,
247 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100248}
249
250// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
251// package check rule.
Paul Duffin8eb45732022-10-04 19:03:31 +0100252func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
253 t.Helper()
Paul Duffinc8ead412021-06-07 19:28:15 +0100254 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
255 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
256 command := bootJarsCheckRule.RuleParams.Command
Paul Duffin8eb45732022-10-04 19:03:31 +0100257 expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
Paul Duffinc8ead412021-06-07 19:28:15 +0100258 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100259}
260
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000261func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000262 result := android.GroupFixturePreparers(
263 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100264 java.PrepareForTestWithJavaDefaultModules,
265 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100266 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100267 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100268 prepareForSdkTestWithApex,
269
270 // Add a platform_bootclasspath that depends on the fragment.
271 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
272
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000273 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
274 variables.BuildFlags = map[string]string{
275 "RELEASE_HIDDEN_API_EXPORTABLE_STUBS": "true",
276 }
277 }),
278
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000279 android.FixtureWithRootAndroidBp(sdk+`
Paul Duffin7c475152021-06-09 16:17:58 +0100280 apex {
281 name: "myapex",
282 key: "myapex.key",
283 min_sdk_version: "2",
284 bootclasspath_fragments: ["mybootclasspathfragment"],
285 }
286
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100287 bootclasspath_fragment {
288 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100289 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100290 contents: [
291 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
292 "mybootlib",
293 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
294 "myothersdklibrary",
295 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100296 api: {
297 stub_libs: ["mysdklibrary"],
298 },
299 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100300 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100301 stub_libs: ["mycoreplatform"],
302 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100303 hidden_api: {
304 split_packages: ["*"],
305 },
Paul Duffina57835e2021-04-19 13:23:06 +0100306 }
307
308 java_library {
309 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100310 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100311 srcs: ["Test.java"],
312 system_modules: "none",
313 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100314 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100315 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100316 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000317 }
Paul Duffin895c7142021-04-25 13:40:15 +0100318
319 java_sdk_library {
320 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100321 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100322 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100323 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100324 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100325 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100326 }
327
328 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100329 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100330 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100331 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100332 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100333 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100334 min_sdk_version: "2",
335 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100336 }
337
338 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100339 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100340 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100341 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100342 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100343 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100344 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100345 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000346 `),
347 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000348
Paul Duffin7c475152021-06-09 16:17:58 +0100349 // A preparer to update the test fixture used when processing an unpackage snapshot.
350 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
351
Paul Duffin36474d32021-03-12 12:19:43 +0000352 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000353 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000354// This is auto-generated. DO NOT EDIT.
355
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100356prebuilt_bootclasspath_fragment {
357 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000358 prefer: false,
359 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100360 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100361 contents: [
362 "mybootlib",
363 "myothersdklibrary",
364 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100365 api: {
366 stub_libs: ["mysdklibrary"],
367 },
368 core_platform_api: {
369 stub_libs: ["mycoreplatform"],
370 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100371 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100372 annotation_flags: "hiddenapi/annotation-flags.csv",
373 metadata: "hiddenapi/metadata.csv",
374 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100375 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100376 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
377 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100378 },
Paul Duffina57835e2021-04-19 13:23:06 +0100379}
380
381java_import {
382 name: "mybootlib",
383 prefer: false,
384 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100385 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000386 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000387 min_sdk_version: "2",
Paul Duffin869de142021-07-15 14:14:41 +0100388 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000389}
Paul Duffin895c7142021-04-25 13:40:15 +0100390
391java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100392 name: "myothersdklibrary",
393 prefer: false,
394 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100395 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100396 shared_library: true,
397 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100398 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100399 public: {
400 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
401 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
402 current_api: "sdk_library/public/myothersdklibrary.txt",
403 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
404 sdk_version: "current",
405 },
406}
407
408java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100409 name: "mysdklibrary",
410 prefer: false,
411 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100412 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100413 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100414 public: {
415 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
416 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
417 current_api: "sdk_library/public/mysdklibrary.txt",
418 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
419 sdk_version: "current",
420 },
421}
422
423java_sdk_library_import {
424 name: "mycoreplatform",
425 prefer: false,
426 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100427 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100428 shared_library: true,
429 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100430 public: {
431 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
432 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
433 current_api: "sdk_library/public/mycoreplatform.txt",
434 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
435 sdk_version: "current",
436 },
437}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100438 `),
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000439 checkAllCopyRules(copyRules),
Paul Duffin7c475152021-06-09 16:17:58 +0100440 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100441 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
442 module := result.ModuleForTests("platform-bootclasspath", "android_common")
443 var rule android.TestingBuildParams
444 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
445 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
446 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
447 out/soong/hiddenapi/hiddenapi-stub-flags.txt
448 snapshot/hiddenapi/annotation-flags.csv
449 `, rule)
450
451 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
452 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
453 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
454 snapshot/hiddenapi/metadata.csv
455 `, rule)
456
457 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
458 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
459 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
460 snapshot/hiddenapi/index.csv
461 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100462
Paul Duffin8d007e92021-07-22 12:00:49 +0100463 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100464 android.AssertStringDoesContain(t, "verify-overlaps", rule.RuleParams.Command, " snapshot/hiddenapi/filtered-flags.csv:snapshot/hiddenapi/signature-patterns.csv ")
Paul Duffind061d402021-06-07 21:36:01 +0100465 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100466 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100467 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
468 module := result.ModuleForTests("platform-bootclasspath", "android_common")
469 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100470 android.AssertStringDoesContain(t, "verify-overlaps", rule.RuleParams.Command, " out/soong/.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv:out/soong/.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv ")
Paul Duffin8d007e92021-07-22 12:00:49 +0100471 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100472 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
473 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000474}
Paul Duffin04b4a192021-03-18 11:05:31 +0000475
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000476func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
477 t.Run("added-directly", func(t *testing.T) {
478 testSnapshotWithBootClasspathFragment_Contents(t, `
479 sdk {
480 name: "mysdk",
481 bootclasspath_fragments: ["mybootclasspathfragment"],
482 java_sdk_libs: [
483 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
484 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
485 // api.stub_libs property. However, it is specified here to ensure that duplicates are
486 // correctly deduped.
487 "mysdklibrary",
488 ],
489 }
490 `, `
491.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
492.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
493.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
494.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
495.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
496.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000497.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000498.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
499.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
500.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
501.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
502.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
503.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
504.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
505.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
506.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000507`)
508 })
509
510 copyBootclasspathFragmentFromApexVariantRules := `
511.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
512.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
513.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
514.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
515.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
516.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000517.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000518.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
519.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
520.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
521.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
522.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
523.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
524.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
525.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
526.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_removed.txt -> sdk_library/public/mycoreplatform-removed.txt
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000527`
528 t.Run("added-via-apex", func(t *testing.T) {
529 testSnapshotWithBootClasspathFragment_Contents(t, `
530 sdk {
531 name: "mysdk",
532 apexes: ["myapex"],
533 }
534 `, copyBootclasspathFragmentFromApexVariantRules)
535 })
536
537 t.Run("added-directly-and-indirectly", func(t *testing.T) {
538 testSnapshotWithBootClasspathFragment_Contents(t, `
539 sdk {
540 name: "mysdk",
541 apexes: ["myapex"],
542 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
543 // a bootclasspath_fragments module because it is used in the myapex's
544 // bootclasspath_fragments property. However, it is specified here to ensure that duplicates
545 // are correctly deduped.
546 bootclasspath_fragments: ["mybootclasspathfragment"],
547 java_sdk_libs: [
548 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
549 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
550 // api.stub_libs property. However, it is specified here to ensure that duplicates are
551 // correctly deduped.
552 "mysdklibrary",
553 ],
554 }
555 `, copyBootclasspathFragmentFromApexVariantRules)
556 })
557}
558
Paul Duffin51227d82021-05-18 12:54:27 +0100559// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
560// bootclasspath_fragment is correctly output to the sdk snapshot.
561func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
562 result := android.GroupFixturePreparers(
563 prepareForSdkTestWithJava,
564 java.PrepareForTestWithJavaDefaultModules,
565 java.PrepareForTestWithJavaSdkLibraryFiles,
566 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100567 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100568 prepareForSdkTestWithApex,
569
570 // Some additional files needed for the myotherapex.
571 android.FixtureMergeMockFs(android.MockFS{
572 "system/sepolicy/apex/myotherapex-file_contexts": nil,
573 "myotherapex/apex_manifest.json": nil,
574 "myotherapex/Test.java": nil,
575 }),
576
577 android.FixtureAddTextFile("myotherapex/Android.bp", `
578 apex {
579 name: "myotherapex",
580 key: "myapex.key",
581 min_sdk_version: "2",
582 bootclasspath_fragments: ["myotherbootclasspathfragment"],
583 }
584
585 bootclasspath_fragment {
586 name: "myotherbootclasspathfragment",
587 apex_available: ["myotherapex"],
588 contents: [
589 "myotherlib",
590 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100591 hidden_api: {
592 split_packages: ["*"],
593 },
Paul Duffin51227d82021-05-18 12:54:27 +0100594 }
595
596 java_library {
597 name: "myotherlib",
598 apex_available: ["myotherapex"],
599 srcs: ["Test.java"],
600 min_sdk_version: "2",
601 permitted_packages: ["myothersdklibrary"],
602 compile_dex: true,
603 }
604 `),
605
606 android.FixtureWithRootAndroidBp(`
607 sdk {
608 name: "mysdk",
609 bootclasspath_fragments: ["mybootclasspathfragment"],
610 }
611
612 bootclasspath_fragment {
613 name: "mybootclasspathfragment",
614 contents: [
615 "mysdklibrary",
616 ],
617 fragments: [
618 {
619 apex: "myotherapex",
620 module: "myotherbootclasspathfragment"
621 },
622 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100623 hidden_api: {
624 split_packages: ["*"],
625 },
Paul Duffin51227d82021-05-18 12:54:27 +0100626 }
627
628 java_sdk_library {
629 name: "mysdklibrary",
630 srcs: ["Test.java"],
631 shared_library: false,
632 public: {enabled: true},
633 min_sdk_version: "2",
634 }
635 `),
636 ).RunTest(t)
637
638 // A preparer to update the test fixture used when processing an unpackage snapshot.
639 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
640
641 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000642 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100643// This is auto-generated. DO NOT EDIT.
644
645prebuilt_bootclasspath_fragment {
646 name: "mybootclasspathfragment",
647 prefer: false,
648 visibility: ["//visibility:public"],
649 apex_available: ["//apex_available:platform"],
650 contents: ["mysdklibrary"],
651 fragments: [
652 {
653 apex: "myotherapex",
654 module: "myotherbootclasspathfragment",
655 },
656 ],
657 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100658 annotation_flags: "hiddenapi/annotation-flags.csv",
659 metadata: "hiddenapi/metadata.csv",
660 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100661 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100662 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
663 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100664 },
665}
666
667java_sdk_library_import {
668 name: "mysdklibrary",
669 prefer: false,
670 visibility: ["//visibility:public"],
671 apex_available: ["//apex_available:platform"],
672 shared_library: false,
673 public: {
674 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
675 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
676 current_api: "sdk_library/public/mysdklibrary.txt",
677 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
678 sdk_version: "current",
679 },
680}
681 `),
682 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
683 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
684 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
685 )
686}
687
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100688// Test that bootclasspath_fragment works with sdk.
689func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000690 android.GroupFixturePreparers(
691 prepareForSdkTestWithApex,
692 prepareForSdkTestWithJava,
Paul Duffin80e7f732022-11-25 12:31:31 +0000693 android.FixtureMergeMockFs(android.MockFS{
694 "java/mybootlib.jar": nil,
695 "hiddenapi/annotation-flags.csv": nil,
696 "hiddenapi/index.csv": nil,
697 "hiddenapi/metadata.csv": nil,
698 "hiddenapi/signature-patterns.csv": nil,
699 "hiddenapi/filtered-stub-flags.csv": nil,
700 "hiddenapi/filtered-flags.csv": nil,
701 }),
Paul Duffin04b4a192021-03-18 11:05:31 +0000702 android.FixtureWithRootAndroidBp(`
703 sdk {
704 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100705 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000706 }
707
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100708 bootclasspath_fragment {
709 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000710 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100711 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000712 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100713 hidden_api: {
714 split_packages: ["*"],
715 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000716 }
717
Paul Duffin8018e502021-05-21 19:28:09 +0100718 java_library {
719 name: "mybootlib",
720 apex_available: ["myapex"],
721 srcs: ["Test.java"],
722 system_modules: "none",
723 sdk_version: "none",
724 min_sdk_version: "1",
725 compile_dex: true,
726 }
727
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100728 prebuilt_bootclasspath_fragment {
Paul Duffin80e7f732022-11-25 12:31:31 +0000729 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000730 prefer: false,
731 visibility: ["//visibility:public"],
732 apex_available: [
733 "myapex",
734 ],
735 image_name: "art",
Paul Duffin80e7f732022-11-25 12:31:31 +0000736 contents: ["mybootlib"],
737 hidden_api: {
738 annotation_flags: "hiddenapi/annotation-flags.csv",
739 metadata: "hiddenapi/metadata.csv",
740 index: "hiddenapi/index.csv",
741 signature_patterns: "hiddenapi/signature-patterns.csv",
742 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
743 filtered_flags: "hiddenapi/filtered-flags.csv",
744 },
Paul Duffin8018e502021-05-21 19:28:09 +0100745 }
746
747 java_import {
Paul Duffin80e7f732022-11-25 12:31:31 +0000748 name: "mybootlib",
Paul Duffin8018e502021-05-21 19:28:09 +0100749 visibility: ["//visibility:public"],
750 apex_available: ["com.android.art"],
751 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000752 }
753 `),
754 ).RunTest(t)
755}
Paul Duffin7c955552021-04-19 13:23:53 +0100756
757func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
758 result := android.GroupFixturePreparers(
759 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100760 java.PrepareForTestWithJavaDefaultModules,
761 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000762 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
763 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100764 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100765
766 // Add a platform_bootclasspath that depends on the fragment.
767 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
768
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000769 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
770 variables.BuildFlags = map[string]string{
771 "RELEASE_HIDDEN_API_EXPORTABLE_STUBS": "true",
772 }
773 }),
774
Paul Duffin7c955552021-04-19 13:23:53 +0100775 android.MockFS{
776 "my-blocked.txt": nil,
777 "my-max-target-o-low-priority.txt": nil,
778 "my-max-target-p.txt": nil,
779 "my-max-target-q.txt": nil,
780 "my-max-target-r-low-priority.txt": nil,
781 "my-removed.txt": nil,
782 "my-unsupported-packages.txt": nil,
783 "my-unsupported.txt": nil,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000784 "my-new-max-target-q.txt": nil,
Paul Duffin7c955552021-04-19 13:23:53 +0100785 }.AddToFixture(),
786 android.FixtureWithRootAndroidBp(`
787 sdk {
788 name: "mysdk",
789 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100790 }
791
Paul Duffin475daaf2021-05-13 00:57:55 +0100792 apex {
793 name: "myapex",
794 key: "myapex.key",
795 min_sdk_version: "1",
796 bootclasspath_fragments: ["mybootclasspathfragment"],
797 }
798
Paul Duffin7c955552021-04-19 13:23:53 +0100799 bootclasspath_fragment {
800 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100801 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000802 contents: ["mybootlib", "mynewlibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100803 api: {
804 stub_libs: ["mysdklibrary"],
805 },
Paul Duffin7c955552021-04-19 13:23:53 +0100806 hidden_api: {
807 unsupported: [
808 "my-unsupported.txt",
809 ],
810 removed: [
811 "my-removed.txt",
812 ],
813 max_target_r_low_priority: [
814 "my-max-target-r-low-priority.txt",
815 ],
816 max_target_q: [
817 "my-max-target-q.txt",
818 ],
819 max_target_p: [
820 "my-max-target-p.txt",
821 ],
822 max_target_o_low_priority: [
823 "my-max-target-o-low-priority.txt",
824 ],
825 blocked: [
826 "my-blocked.txt",
827 ],
828 unsupported_packages: [
829 "my-unsupported-packages.txt",
830 ],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000831 split_packages: ["sdklibrary"],
832 package_prefixes: ["sdklibrary.all.mine"],
833 single_packages: ["sdklibrary.mine"],
Paul Duffin7c955552021-04-19 13:23:53 +0100834 },
835 }
836
837 java_library {
838 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100839 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100840 srcs: ["Test.java"],
841 system_modules: "none",
842 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100843 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100844 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100845 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100846 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100847
848 java_sdk_library {
849 name: "mysdklibrary",
850 srcs: ["Test.java"],
851 compile_dex: true,
852 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100853 permitted_packages: ["mysdklibrary"],
Spandan Das91455082023-03-02 04:41:35 +0000854 min_sdk_version: "current",
Paul Duffin475daaf2021-05-13 00:57:55 +0100855 }
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000856
857 java_sdk_library {
858 name: "mynewlibrary",
859 apex_available: ["myapex"],
860 srcs: ["Test.java"],
861 min_sdk_version: "10",
862 compile_dex: true,
863 public: {enabled: true},
864 permitted_packages: ["mysdklibrary"],
865 hidden_api: {
866 max_target_q: [
867 "my-new-max-target-q.txt",
868 ],
869 split_packages: ["sdklibrary", "newlibrary"],
870 package_prefixes: ["newlibrary.all.mine"],
871 single_packages: ["newlibrary.mine"],
872 },
873 }
Paul Duffin7c955552021-04-19 13:23:53 +0100874 `),
875 ).RunTest(t)
876
Paul Duffin7c475152021-06-09 16:17:58 +0100877 // A preparer to update the test fixture used when processing an unpackage snapshot.
878 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
879
Paul Duffin7c955552021-04-19 13:23:53 +0100880 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000881 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100882// This is auto-generated. DO NOT EDIT.
883
884prebuilt_bootclasspath_fragment {
885 name: "mybootclasspathfragment",
886 prefer: false,
887 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100888 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000889 contents: [
890 "mybootlib",
891 "mynewlibrary",
892 ],
Paul Duffin475daaf2021-05-13 00:57:55 +0100893 api: {
894 stub_libs: ["mysdklibrary"],
895 },
Paul Duffin7c955552021-04-19 13:23:53 +0100896 hidden_api: {
897 unsupported: ["hiddenapi/my-unsupported.txt"],
898 removed: ["hiddenapi/my-removed.txt"],
899 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000900 max_target_q: [
901 "hiddenapi/my-max-target-q.txt",
902 "hiddenapi/my-new-max-target-q.txt",
903 ],
Paul Duffin7c955552021-04-19 13:23:53 +0100904 max_target_p: ["hiddenapi/my-max-target-p.txt"],
905 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
906 blocked: ["hiddenapi/my-blocked.txt"],
907 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100908 annotation_flags: "hiddenapi/annotation-flags.csv",
909 metadata: "hiddenapi/metadata.csv",
910 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100911 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100912 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
913 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100914 },
915}
916
917java_import {
918 name: "mybootlib",
919 prefer: false,
920 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100921 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000922 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000923 min_sdk_version: "1",
Paul Duffin869de142021-07-15 14:14:41 +0100924 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100925}
Paul Duffin475daaf2021-05-13 00:57:55 +0100926
927java_sdk_library_import {
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000928 name: "mynewlibrary",
929 prefer: false,
930 visibility: ["//visibility:public"],
931 apex_available: ["myapex"],
932 shared_library: true,
933 compile_dex: true,
934 permitted_packages: ["mysdklibrary"],
935 public: {
936 jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
937 stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
938 current_api: "sdk_library/public/mynewlibrary.txt",
939 removed_api: "sdk_library/public/mynewlibrary-removed.txt",
940 sdk_version: "current",
941 },
942}
943
944java_sdk_library_import {
Paul Duffin475daaf2021-05-13 00:57:55 +0100945 name: "mysdklibrary",
946 prefer: false,
947 visibility: ["//visibility:public"],
948 apex_available: ["//apex_available:platform"],
949 shared_library: true,
950 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100951 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100952 public: {
953 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
954 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
955 current_api: "sdk_library/public/mysdklibrary.txt",
956 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
957 sdk_version: "current",
958 },
959}
Paul Duffin7c955552021-04-19 13:23:53 +0100960`),
961 checkAllCopyRules(`
962my-unsupported.txt -> hiddenapi/my-unsupported.txt
963my-removed.txt -> hiddenapi/my-removed.txt
964my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
965my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000966my-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
Paul Duffin7c955552021-04-19 13:23:53 +0100967my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
968my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
969my-blocked.txt -> hiddenapi/my-blocked.txt
970my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +0100971.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
972.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
973.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +0100974.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +0100975.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
976.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000977.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000978.intermediates/mynewlibrary.stubs.exportable/android_common/combined/mynewlibrary.stubs.exportable.jar -> sdk_library/public/mynewlibrary-stubs.jar
979.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
980.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
981.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
982.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
983.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin7c955552021-04-19 13:23:53 +0100984`),
Paul Duffin7c475152021-06-09 16:17:58 +0100985 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
986 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
987 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +0100988 )
989}
Paul Duffin1938dba2022-07-26 23:53:00 +0000990
991func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
992 expectedSdkSnapshot string,
993 expectedCopyRules string,
994 expectedStubFlagsInputs []string,
995 suffix string) {
996
997 result := android.GroupFixturePreparers(
998 prepareForSdkTestWithJava,
999 java.PrepareForTestWithJavaDefaultModules,
1000 java.PrepareForTestWithJavaSdkLibraryFiles,
1001 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1002 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1003 prepareForSdkTestWithApex,
1004
1005 // Add a platform_bootclasspath that depends on the fragment.
1006 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1007
1008 android.FixtureMergeEnv(map[string]string{
1009 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
1010 }),
1011
Jihoon Kangbd093452023-12-26 19:08:01 +00001012 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1013 variables.BuildFlags = map[string]string{
1014 "RELEASE_HIDDEN_API_EXPORTABLE_STUBS": "true",
1015 }
1016 }),
1017
Paul Duffin1938dba2022-07-26 23:53:00 +00001018 android.FixtureWithRootAndroidBp(`
1019 sdk {
1020 name: "mysdk",
1021 apexes: ["myapex"],
1022 }
1023
1024 apex {
1025 name: "myapex",
1026 key: "myapex.key",
1027 min_sdk_version: "S",
1028 bootclasspath_fragments: ["mybootclasspathfragment"],
1029 }
1030
1031 bootclasspath_fragment {
1032 name: "mybootclasspathfragment",
1033 apex_available: ["myapex"],
1034 contents: [
1035 "mysdklibrary",
1036 "mynewsdklibrary",
1037 ],
1038
1039 hidden_api: {
1040 split_packages: [],
1041 },
1042 }
1043
1044 java_sdk_library {
1045 name: "mysdklibrary",
1046 apex_available: ["myapex"],
1047 srcs: ["Test.java"],
1048 shared_library: false,
1049 public: {enabled: true},
1050 min_sdk_version: "S",
1051 }
1052
1053 java_sdk_library {
1054 name: "mynewsdklibrary",
1055 apex_available: ["myapex"],
1056 srcs: ["Test.java"],
1057 compile_dex: true,
1058 public: {enabled: true},
1059 min_sdk_version: "Tiramisu",
1060 permitted_packages: ["mynewsdklibrary"],
1061 }
1062 `),
1063 ).RunTest(t)
1064
1065 bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1066 rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
1067 android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", expectedStubFlagsInputs, rule.Implicits)
1068
1069 CheckSnapshot(t, result, "mysdk", "",
1070 checkAndroidBpContents(expectedSdkSnapshot),
1071 checkAllCopyRules(expectedCopyRules),
1072 )
1073}
1074
1075func TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1076 t.Run("target S build", func(t *testing.T) {
1077 expectedSnapshot := `
1078// This is auto-generated. DO NOT EDIT.
1079
1080prebuilt_bootclasspath_fragment {
1081 name: "mybootclasspathfragment",
1082 prefer: false,
1083 visibility: ["//visibility:public"],
1084 apex_available: ["myapex"],
1085 contents: ["mysdklibrary"],
1086 hidden_api: {
1087 annotation_flags: "hiddenapi/annotation-flags.csv",
1088 metadata: "hiddenapi/metadata.csv",
1089 index: "hiddenapi/index.csv",
1090 stub_flags: "hiddenapi/stub-flags.csv",
1091 all_flags: "hiddenapi/all-flags.csv",
1092 },
1093}
1094
1095java_sdk_library_import {
1096 name: "mysdklibrary",
1097 prefer: false,
1098 visibility: ["//visibility:public"],
1099 apex_available: ["myapex"],
1100 shared_library: false,
1101 public: {
1102 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1103 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1104 current_api: "sdk_library/public/mysdklibrary.txt",
1105 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1106 sdk_version: "current",
1107 },
1108}
1109`
1110 expectedCopyRules := `
1111.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1112.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1113.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1114.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1115.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001116.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1117.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1118.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
Paul Duffin1938dba2022-07-26 23:53:00 +00001119`
1120
1121 // On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1122 // of the snapshot.
1123 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001124 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001125 "out/soong/.intermediates/mysdklibrary/android_common/aligned/mysdklibrary.jar",
1126 }
1127
1128 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1129 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1130 })
1131
1132 t.Run("target-Tiramisu-build", func(t *testing.T) {
1133 expectedSnapshot := `
1134// This is auto-generated. DO NOT EDIT.
1135
1136prebuilt_bootclasspath_fragment {
1137 name: "mybootclasspathfragment",
1138 prefer: false,
1139 visibility: ["//visibility:public"],
1140 apex_available: ["myapex"],
1141 contents: [
1142 "mysdklibrary",
1143 "mynewsdklibrary",
1144 ],
1145 hidden_api: {
1146 annotation_flags: "hiddenapi/annotation-flags.csv",
1147 metadata: "hiddenapi/metadata.csv",
1148 index: "hiddenapi/index.csv",
1149 signature_patterns: "hiddenapi/signature-patterns.csv",
1150 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1151 filtered_flags: "hiddenapi/filtered-flags.csv",
1152 },
1153}
1154
1155java_sdk_library_import {
1156 name: "mysdklibrary",
1157 prefer: false,
1158 visibility: ["//visibility:public"],
1159 apex_available: ["myapex"],
1160 shared_library: false,
1161 public: {
1162 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1163 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1164 current_api: "sdk_library/public/mysdklibrary.txt",
1165 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1166 sdk_version: "current",
1167 },
1168}
1169
1170java_sdk_library_import {
1171 name: "mynewsdklibrary",
1172 prefer: false,
1173 visibility: ["//visibility:public"],
1174 apex_available: ["myapex"],
1175 shared_library: true,
1176 compile_dex: true,
1177 permitted_packages: ["mynewsdklibrary"],
1178 public: {
1179 jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1180 stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1181 current_api: "sdk_library/public/mynewsdklibrary.txt",
1182 removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1183 sdk_version: "current",
1184 },
1185}
1186`
1187 expectedCopyRules := `
1188.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1189.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1190.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1191.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1192.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1193.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001194.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1195.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1196.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1197.intermediates/mynewsdklibrary.stubs.exportable/android_common/combined/mynewsdklibrary.stubs.exportable.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
1198.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1199.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_removed.txt -> sdk_library/public/mynewsdklibrary-removed.txt
Paul Duffin1938dba2022-07-26 23:53:00 +00001200`
1201
1202 // On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1203 // they are both part of the snapshot.
1204 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001205 "out/soong/.intermediates/mynewsdklibrary.stubs.exportable/android_common/dex/mynewsdklibrary.stubs.exportable.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001206 "out/soong/.intermediates/mynewsdklibrary/android_common/aligned/mynewsdklibrary.jar",
Jihoon Kangbd093452023-12-26 19:08:01 +00001207 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001208 "out/soong/.intermediates/mysdklibrary/android_common/aligned/mysdklibrary.jar",
1209 }
1210
1211 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1212 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1213 })
1214}
Sam Delmerico35881362023-06-30 14:40:10 -04001215
1216func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) {
1217 result := android.GroupFixturePreparers(
1218 prepareForSdkTestWithJava,
1219 java.PrepareForTestWithJavaDefaultModules,
1220 java.PrepareForTestWithJavaSdkLibraryFiles,
1221 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1222 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1223 prepareForSdkTestWithApex,
1224 // Add a platform_bootclasspath that depends on the fragment.
1225 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1226 android.FixtureMergeEnv(map[string]string{
1227 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
1228 }),
1229 android.FixtureWithRootAndroidBp(`
1230 sdk {
1231 name: "mysdk",
1232 apexes: ["myapex"],
1233 }
1234 apex {
1235 name: "myapex",
1236 key: "myapex.key",
1237 min_sdk_version: "S",
1238 bootclasspath_fragments: ["mybootclasspathfragment"],
1239 }
1240 bootclasspath_fragment {
1241 name: "mybootclasspathfragment",
1242 apex_available: ["myapex"],
1243 contents: ["mysdklibrary", "mynewsdklibrary"],
1244 hidden_api: {
1245 split_packages: [],
1246 },
1247 }
1248 java_sdk_library {
1249 name: "mysdklibrary",
1250 apex_available: ["myapex"],
1251 srcs: ["Test.java"],
1252 shared_library: false,
1253 public: {enabled: true},
1254 min_sdk_version: "Tiramisu",
1255 }
1256 java_sdk_library {
1257 name: "mynewsdklibrary",
1258 apex_available: ["myapex"],
1259 srcs: ["Test.java"],
1260 compile_dex: true,
1261 public: {enabled: true},
1262 min_sdk_version: "Tiramisu",
1263 permitted_packages: ["mynewsdklibrary"],
1264 }
1265 `),
1266 ).RunTest(t)
1267
1268 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
1269}