blob: 6e2512262f7c49889d78a0e47472ae64ae9bb596 [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
Spandan Dasa5e26d32024-03-06 14:04:36 +0000155apex_contributions_defaults {
156 name: "mysdk.contributions",
157 contents: [],
158}
159
Paul Duffina57835e2021-04-19 13:23:06 +0100160prebuilt_bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100161 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100162 prefer: false,
163 visibility: ["//visibility:public"],
164 apex_available: ["com.android.art"],
165 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100166 contents: [
167 "core1",
168 "core2",
169 ],
Paul Duffinda286f42021-06-29 11:59:23 +0100170 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100171 annotation_flags: "hiddenapi/annotation-flags.csv",
172 metadata: "hiddenapi/metadata.csv",
173 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100174 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100175 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
176 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100177 },
Paul Duffina57835e2021-04-19 13:23:06 +0100178}
179
180java_import {
Paul Duffin8eb45732022-10-04 19:03:31 +0100181 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100182 prefer: false,
183 visibility: ["//visibility:public"],
184 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000185 jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
Paul Duffin8eb45732022-10-04 19:03:31 +0100186}
187
188java_import {
189 name: "core2",
190 prefer: false,
191 visibility: ["//visibility:public"],
192 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000193 jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100194}
Spandan Dasa5e26d32024-03-06 14:04:36 +0000195
Paul Duffina57835e2021-04-19 13:23:06 +0100196`),
Paul Duffina57835e2021-04-19 13:23:06 +0100197 checkAllCopyRules(`
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100198.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
199.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
200.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
201.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
202.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
203.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000204.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
205.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100206 `),
Paul Duffin7c475152021-06-09 16:17:58 +0100207 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100208
209 // Check the behavior of the snapshot without the source.
210 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin8eb45732022-10-04 19:03:31 +0100211 // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
212 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000213 append(
214 []string{
Spandan Das3576e762024-01-03 18:57:03 +0000215 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core1.jar",
216 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core2.jar",
Jiakai Zhangb8796202023-03-06 19:16:48 +0000217 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
218 },
219 java.ApexBootJarDexJarPaths...,
220 )...,
221 )
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100222 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
223 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffinc8ead412021-06-07 19:28:15 +0100224 }),
225
Paul Duffin7c475152021-06-09 16:17:58 +0100226 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100227
228 // Check the behavior of the snapshot when the source is preferred.
229 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100230 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
231 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100232 }),
233
Paul Duffin7c475152021-06-09 16:17:58 +0100234 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100235
236 // Check the behavior of the snapshot when it is preferred.
237 snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100238 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
239 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100240 }),
Paul Duffina57835e2021-04-19 13:23:06 +0100241 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100242
Paul Duffin8eb45732022-10-04 19:03:31 +0100243 // Make sure that the boot jars package check rule includes the dex jars created from the source.
244 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000245 append(
246 []string{
247 "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
248 "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
249 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
250 },
251 java.ApexBootJarDexJarPaths...,
252 )...,
253 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100254}
255
256// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
257// package check rule.
Paul Duffin8eb45732022-10-04 19:03:31 +0100258func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
259 t.Helper()
Paul Duffinc8ead412021-06-07 19:28:15 +0100260 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
261 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
262 command := bootJarsCheckRule.RuleParams.Command
Paul Duffin8eb45732022-10-04 19:03:31 +0100263 expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
Paul Duffinc8ead412021-06-07 19:28:15 +0100264 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100265}
266
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000267func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000268 result := android.GroupFixturePreparers(
269 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100270 java.PrepareForTestWithJavaDefaultModules,
271 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100272 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100273 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100274 prepareForSdkTestWithApex,
275
276 // Add a platform_bootclasspath that depends on the fragment.
277 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
278
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000279 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
280 variables.BuildFlags = map[string]string{
281 "RELEASE_HIDDEN_API_EXPORTABLE_STUBS": "true",
282 }
283 }),
284
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000285 android.FixtureWithRootAndroidBp(sdk+`
Paul Duffin7c475152021-06-09 16:17:58 +0100286 apex {
287 name: "myapex",
288 key: "myapex.key",
289 min_sdk_version: "2",
290 bootclasspath_fragments: ["mybootclasspathfragment"],
291 }
292
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100293 bootclasspath_fragment {
294 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100295 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100296 contents: [
297 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
298 "mybootlib",
299 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
300 "myothersdklibrary",
301 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100302 api: {
303 stub_libs: ["mysdklibrary"],
304 },
305 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100306 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100307 stub_libs: ["mycoreplatform"],
308 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100309 hidden_api: {
310 split_packages: ["*"],
311 },
Paul Duffina57835e2021-04-19 13:23:06 +0100312 }
313
314 java_library {
315 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100316 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100317 srcs: ["Test.java"],
318 system_modules: "none",
319 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100320 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100321 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100322 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000323 }
Paul Duffin895c7142021-04-25 13:40:15 +0100324
325 java_sdk_library {
326 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100327 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100328 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100329 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100330 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100331 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100332 }
333
334 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100335 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100336 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100337 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100338 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100339 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100340 min_sdk_version: "2",
341 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100342 }
343
344 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100345 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100346 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100347 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100348 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100349 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100350 min_sdk_version: "2",
Paul Duffin895c7142021-04-25 13:40:15 +0100351 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000352 `),
353 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000354
Paul Duffin7c475152021-06-09 16:17:58 +0100355 // A preparer to update the test fixture used when processing an unpackage snapshot.
356 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
357
Paul Duffin36474d32021-03-12 12:19:43 +0000358 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000359 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000360// This is auto-generated. DO NOT EDIT.
361
Spandan Dasa5e26d32024-03-06 14:04:36 +0000362apex_contributions_defaults {
363 name: "mysdk.contributions",
364 contents: [
365 "prebuilt_myothersdklibrary",
366 "prebuilt_mysdklibrary",
367 "prebuilt_mycoreplatform",
368 ],
369}
370
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100371prebuilt_bootclasspath_fragment {
372 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000373 prefer: false,
374 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100375 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100376 contents: [
377 "mybootlib",
378 "myothersdklibrary",
379 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100380 api: {
381 stub_libs: ["mysdklibrary"],
382 },
383 core_platform_api: {
384 stub_libs: ["mycoreplatform"],
385 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100386 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100387 annotation_flags: "hiddenapi/annotation-flags.csv",
388 metadata: "hiddenapi/metadata.csv",
389 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100390 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100391 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
392 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100393 },
Paul Duffina57835e2021-04-19 13:23:06 +0100394}
395
396java_import {
397 name: "mybootlib",
398 prefer: false,
399 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100400 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000401 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000402 min_sdk_version: "2",
Paul Duffin869de142021-07-15 14:14:41 +0100403 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000404}
Paul Duffin895c7142021-04-25 13:40:15 +0100405
406java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100407 name: "myothersdklibrary",
408 prefer: false,
409 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100410 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100411 shared_library: true,
412 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100413 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100414 public: {
415 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
416 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
417 current_api: "sdk_library/public/myothersdklibrary.txt",
418 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
419 sdk_version: "current",
420 },
421}
422
423java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100424 name: "mysdklibrary",
425 prefer: false,
426 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100427 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100428 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100429 public: {
430 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
431 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
432 current_api: "sdk_library/public/mysdklibrary.txt",
433 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
434 sdk_version: "current",
435 },
436}
437
438java_sdk_library_import {
439 name: "mycoreplatform",
440 prefer: false,
441 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100442 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100443 shared_library: true,
444 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100445 public: {
446 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
447 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
448 current_api: "sdk_library/public/mycoreplatform.txt",
449 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
450 sdk_version: "current",
451 },
452}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100453 `),
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000454 checkAllCopyRules(copyRules),
Paul Duffin7c475152021-06-09 16:17:58 +0100455 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100456 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
457 module := result.ModuleForTests("platform-bootclasspath", "android_common")
458 var rule android.TestingBuildParams
459 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
460 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
461 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
462 out/soong/hiddenapi/hiddenapi-stub-flags.txt
463 snapshot/hiddenapi/annotation-flags.csv
464 `, rule)
465
466 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
467 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
468 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
469 snapshot/hiddenapi/metadata.csv
470 `, rule)
471
472 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
473 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
474 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
475 snapshot/hiddenapi/index.csv
476 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100477
Paul Duffin8d007e92021-07-22 12:00:49 +0100478 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100479 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 +0100480 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100481 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100482 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
483 module := result.ModuleForTests("platform-bootclasspath", "android_common")
484 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100485 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 +0100486 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100487 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
488 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000489}
Paul Duffin04b4a192021-03-18 11:05:31 +0000490
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000491func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
492 t.Run("added-directly", func(t *testing.T) {
493 testSnapshotWithBootClasspathFragment_Contents(t, `
494 sdk {
495 name: "mysdk",
496 bootclasspath_fragments: ["mybootclasspathfragment"],
497 java_sdk_libs: [
498 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
499 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
500 // api.stub_libs property. However, it is specified here to ensure that duplicates are
501 // correctly deduped.
502 "mysdklibrary",
503 ],
504 }
505 `, `
506.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
507.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
508.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
509.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
510.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
511.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000512.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000513.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
514.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
515.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
516.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
517.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
518.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
519.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
520.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
521.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 +0000522`)
523 })
524
525 copyBootclasspathFragmentFromApexVariantRules := `
526.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
527.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
528.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
529.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
530.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
531.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000532.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000533.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
534.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
535.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
536.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
537.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
538.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
539.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
540.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
541.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 +0000542`
543 t.Run("added-via-apex", func(t *testing.T) {
544 testSnapshotWithBootClasspathFragment_Contents(t, `
545 sdk {
546 name: "mysdk",
547 apexes: ["myapex"],
548 }
549 `, copyBootclasspathFragmentFromApexVariantRules)
550 })
551
552 t.Run("added-directly-and-indirectly", func(t *testing.T) {
553 testSnapshotWithBootClasspathFragment_Contents(t, `
554 sdk {
555 name: "mysdk",
556 apexes: ["myapex"],
557 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
558 // a bootclasspath_fragments module because it is used in the myapex's
559 // bootclasspath_fragments property. However, it is specified here to ensure that duplicates
560 // are correctly deduped.
561 bootclasspath_fragments: ["mybootclasspathfragment"],
562 java_sdk_libs: [
563 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
564 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
565 // api.stub_libs property. However, it is specified here to ensure that duplicates are
566 // correctly deduped.
567 "mysdklibrary",
568 ],
569 }
570 `, copyBootclasspathFragmentFromApexVariantRules)
571 })
572}
573
Paul Duffin51227d82021-05-18 12:54:27 +0100574// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
575// bootclasspath_fragment is correctly output to the sdk snapshot.
576func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
577 result := android.GroupFixturePreparers(
578 prepareForSdkTestWithJava,
579 java.PrepareForTestWithJavaDefaultModules,
580 java.PrepareForTestWithJavaSdkLibraryFiles,
581 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100582 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100583 prepareForSdkTestWithApex,
584
585 // Some additional files needed for the myotherapex.
586 android.FixtureMergeMockFs(android.MockFS{
587 "system/sepolicy/apex/myotherapex-file_contexts": nil,
588 "myotherapex/apex_manifest.json": nil,
589 "myotherapex/Test.java": nil,
590 }),
591
592 android.FixtureAddTextFile("myotherapex/Android.bp", `
593 apex {
594 name: "myotherapex",
595 key: "myapex.key",
596 min_sdk_version: "2",
597 bootclasspath_fragments: ["myotherbootclasspathfragment"],
598 }
599
600 bootclasspath_fragment {
601 name: "myotherbootclasspathfragment",
602 apex_available: ["myotherapex"],
603 contents: [
604 "myotherlib",
605 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100606 hidden_api: {
607 split_packages: ["*"],
608 },
Paul Duffin51227d82021-05-18 12:54:27 +0100609 }
610
611 java_library {
612 name: "myotherlib",
613 apex_available: ["myotherapex"],
614 srcs: ["Test.java"],
615 min_sdk_version: "2",
616 permitted_packages: ["myothersdklibrary"],
617 compile_dex: true,
618 }
619 `),
620
621 android.FixtureWithRootAndroidBp(`
622 sdk {
623 name: "mysdk",
624 bootclasspath_fragments: ["mybootclasspathfragment"],
625 }
626
627 bootclasspath_fragment {
628 name: "mybootclasspathfragment",
629 contents: [
630 "mysdklibrary",
631 ],
632 fragments: [
633 {
634 apex: "myotherapex",
635 module: "myotherbootclasspathfragment"
636 },
637 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100638 hidden_api: {
639 split_packages: ["*"],
640 },
Paul Duffin51227d82021-05-18 12:54:27 +0100641 }
642
643 java_sdk_library {
644 name: "mysdklibrary",
645 srcs: ["Test.java"],
646 shared_library: false,
647 public: {enabled: true},
648 min_sdk_version: "2",
649 }
650 `),
651 ).RunTest(t)
652
653 // A preparer to update the test fixture used when processing an unpackage snapshot.
654 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
655
656 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000657 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100658// This is auto-generated. DO NOT EDIT.
659
Spandan Dasa5e26d32024-03-06 14:04:36 +0000660apex_contributions_defaults {
661 name: "mysdk.contributions",
662 contents: ["prebuilt_mysdklibrary"],
663}
664
Paul Duffin51227d82021-05-18 12:54:27 +0100665prebuilt_bootclasspath_fragment {
666 name: "mybootclasspathfragment",
667 prefer: false,
668 visibility: ["//visibility:public"],
669 apex_available: ["//apex_available:platform"],
670 contents: ["mysdklibrary"],
671 fragments: [
672 {
673 apex: "myotherapex",
674 module: "myotherbootclasspathfragment",
675 },
676 ],
677 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100678 annotation_flags: "hiddenapi/annotation-flags.csv",
679 metadata: "hiddenapi/metadata.csv",
680 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100681 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100682 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
683 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100684 },
685}
686
687java_sdk_library_import {
688 name: "mysdklibrary",
689 prefer: false,
690 visibility: ["//visibility:public"],
691 apex_available: ["//apex_available:platform"],
692 shared_library: false,
693 public: {
694 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
695 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
696 current_api: "sdk_library/public/mysdklibrary.txt",
697 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
698 sdk_version: "current",
699 },
700}
701 `),
702 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
703 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
704 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
705 )
706}
707
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100708// Test that bootclasspath_fragment works with sdk.
709func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000710 android.GroupFixturePreparers(
711 prepareForSdkTestWithApex,
712 prepareForSdkTestWithJava,
Paul Duffin80e7f732022-11-25 12:31:31 +0000713 android.FixtureMergeMockFs(android.MockFS{
714 "java/mybootlib.jar": nil,
715 "hiddenapi/annotation-flags.csv": nil,
716 "hiddenapi/index.csv": nil,
717 "hiddenapi/metadata.csv": nil,
718 "hiddenapi/signature-patterns.csv": nil,
719 "hiddenapi/filtered-stub-flags.csv": nil,
720 "hiddenapi/filtered-flags.csv": nil,
721 }),
Paul Duffin04b4a192021-03-18 11:05:31 +0000722 android.FixtureWithRootAndroidBp(`
723 sdk {
724 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100725 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000726 }
727
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100728 bootclasspath_fragment {
729 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000730 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100731 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000732 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100733 hidden_api: {
734 split_packages: ["*"],
735 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000736 }
737
Paul Duffin8018e502021-05-21 19:28:09 +0100738 java_library {
739 name: "mybootlib",
740 apex_available: ["myapex"],
741 srcs: ["Test.java"],
742 system_modules: "none",
743 sdk_version: "none",
744 min_sdk_version: "1",
745 compile_dex: true,
746 }
747
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100748 prebuilt_bootclasspath_fragment {
Paul Duffin80e7f732022-11-25 12:31:31 +0000749 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000750 prefer: false,
751 visibility: ["//visibility:public"],
752 apex_available: [
753 "myapex",
754 ],
755 image_name: "art",
Paul Duffin80e7f732022-11-25 12:31:31 +0000756 contents: ["mybootlib"],
757 hidden_api: {
758 annotation_flags: "hiddenapi/annotation-flags.csv",
759 metadata: "hiddenapi/metadata.csv",
760 index: "hiddenapi/index.csv",
761 signature_patterns: "hiddenapi/signature-patterns.csv",
762 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
763 filtered_flags: "hiddenapi/filtered-flags.csv",
764 },
Paul Duffin8018e502021-05-21 19:28:09 +0100765 }
766
767 java_import {
Paul Duffin80e7f732022-11-25 12:31:31 +0000768 name: "mybootlib",
Paul Duffin8018e502021-05-21 19:28:09 +0100769 visibility: ["//visibility:public"],
770 apex_available: ["com.android.art"],
771 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000772 }
773 `),
774 ).RunTest(t)
775}
Paul Duffin7c955552021-04-19 13:23:53 +0100776
777func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
778 result := android.GroupFixturePreparers(
779 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100780 java.PrepareForTestWithJavaDefaultModules,
781 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000782 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
783 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100784 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100785
786 // Add a platform_bootclasspath that depends on the fragment.
787 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
788
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000789 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
790 variables.BuildFlags = map[string]string{
791 "RELEASE_HIDDEN_API_EXPORTABLE_STUBS": "true",
792 }
793 }),
794
Paul Duffin7c955552021-04-19 13:23:53 +0100795 android.MockFS{
796 "my-blocked.txt": nil,
797 "my-max-target-o-low-priority.txt": nil,
798 "my-max-target-p.txt": nil,
799 "my-max-target-q.txt": nil,
800 "my-max-target-r-low-priority.txt": nil,
801 "my-removed.txt": nil,
802 "my-unsupported-packages.txt": nil,
803 "my-unsupported.txt": nil,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000804 "my-new-max-target-q.txt": nil,
Paul Duffin7c955552021-04-19 13:23:53 +0100805 }.AddToFixture(),
806 android.FixtureWithRootAndroidBp(`
807 sdk {
808 name: "mysdk",
809 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100810 }
811
Paul Duffin475daaf2021-05-13 00:57:55 +0100812 apex {
813 name: "myapex",
814 key: "myapex.key",
815 min_sdk_version: "1",
816 bootclasspath_fragments: ["mybootclasspathfragment"],
817 }
818
Paul Duffin7c955552021-04-19 13:23:53 +0100819 bootclasspath_fragment {
820 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100821 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000822 contents: ["mybootlib", "mynewlibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100823 api: {
824 stub_libs: ["mysdklibrary"],
825 },
Paul Duffin7c955552021-04-19 13:23:53 +0100826 hidden_api: {
827 unsupported: [
828 "my-unsupported.txt",
829 ],
830 removed: [
831 "my-removed.txt",
832 ],
833 max_target_r_low_priority: [
834 "my-max-target-r-low-priority.txt",
835 ],
836 max_target_q: [
837 "my-max-target-q.txt",
838 ],
839 max_target_p: [
840 "my-max-target-p.txt",
841 ],
842 max_target_o_low_priority: [
843 "my-max-target-o-low-priority.txt",
844 ],
845 blocked: [
846 "my-blocked.txt",
847 ],
848 unsupported_packages: [
849 "my-unsupported-packages.txt",
850 ],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000851 split_packages: ["sdklibrary"],
852 package_prefixes: ["sdklibrary.all.mine"],
853 single_packages: ["sdklibrary.mine"],
Paul Duffin7c955552021-04-19 13:23:53 +0100854 },
855 }
856
857 java_library {
858 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100859 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100860 srcs: ["Test.java"],
861 system_modules: "none",
862 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100863 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100864 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100865 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100866 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100867
868 java_sdk_library {
869 name: "mysdklibrary",
870 srcs: ["Test.java"],
871 compile_dex: true,
872 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100873 permitted_packages: ["mysdklibrary"],
Spandan Das91455082023-03-02 04:41:35 +0000874 min_sdk_version: "current",
Paul Duffin475daaf2021-05-13 00:57:55 +0100875 }
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000876
877 java_sdk_library {
878 name: "mynewlibrary",
879 apex_available: ["myapex"],
880 srcs: ["Test.java"],
881 min_sdk_version: "10",
882 compile_dex: true,
883 public: {enabled: true},
884 permitted_packages: ["mysdklibrary"],
885 hidden_api: {
886 max_target_q: [
887 "my-new-max-target-q.txt",
888 ],
889 split_packages: ["sdklibrary", "newlibrary"],
890 package_prefixes: ["newlibrary.all.mine"],
891 single_packages: ["newlibrary.mine"],
892 },
893 }
Paul Duffin7c955552021-04-19 13:23:53 +0100894 `),
895 ).RunTest(t)
896
Paul Duffin7c475152021-06-09 16:17:58 +0100897 // A preparer to update the test fixture used when processing an unpackage snapshot.
898 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
899
Paul Duffin7c955552021-04-19 13:23:53 +0100900 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000901 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100902// This is auto-generated. DO NOT EDIT.
903
Spandan Dasa5e26d32024-03-06 14:04:36 +0000904apex_contributions_defaults {
905 name: "mysdk.contributions",
906 contents: [
907 "prebuilt_mynewlibrary",
908 "prebuilt_mysdklibrary",
909 ],
910}
911
Paul Duffin7c955552021-04-19 13:23:53 +0100912prebuilt_bootclasspath_fragment {
913 name: "mybootclasspathfragment",
914 prefer: false,
915 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100916 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000917 contents: [
918 "mybootlib",
919 "mynewlibrary",
920 ],
Paul Duffin475daaf2021-05-13 00:57:55 +0100921 api: {
922 stub_libs: ["mysdklibrary"],
923 },
Paul Duffin7c955552021-04-19 13:23:53 +0100924 hidden_api: {
925 unsupported: ["hiddenapi/my-unsupported.txt"],
926 removed: ["hiddenapi/my-removed.txt"],
927 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000928 max_target_q: [
929 "hiddenapi/my-max-target-q.txt",
930 "hiddenapi/my-new-max-target-q.txt",
931 ],
Paul Duffin7c955552021-04-19 13:23:53 +0100932 max_target_p: ["hiddenapi/my-max-target-p.txt"],
933 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
934 blocked: ["hiddenapi/my-blocked.txt"],
935 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100936 annotation_flags: "hiddenapi/annotation-flags.csv",
937 metadata: "hiddenapi/metadata.csv",
938 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100939 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100940 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
941 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100942 },
943}
944
945java_import {
946 name: "mybootlib",
947 prefer: false,
948 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100949 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000950 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000951 min_sdk_version: "1",
Paul Duffin869de142021-07-15 14:14:41 +0100952 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100953}
Paul Duffin475daaf2021-05-13 00:57:55 +0100954
955java_sdk_library_import {
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000956 name: "mynewlibrary",
957 prefer: false,
958 visibility: ["//visibility:public"],
959 apex_available: ["myapex"],
960 shared_library: true,
961 compile_dex: true,
962 permitted_packages: ["mysdklibrary"],
963 public: {
964 jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
965 stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
966 current_api: "sdk_library/public/mynewlibrary.txt",
967 removed_api: "sdk_library/public/mynewlibrary-removed.txt",
968 sdk_version: "current",
969 },
970}
971
972java_sdk_library_import {
Paul Duffin475daaf2021-05-13 00:57:55 +0100973 name: "mysdklibrary",
974 prefer: false,
975 visibility: ["//visibility:public"],
976 apex_available: ["//apex_available:platform"],
977 shared_library: true,
978 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100979 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100980 public: {
981 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
982 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
983 current_api: "sdk_library/public/mysdklibrary.txt",
984 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
985 sdk_version: "current",
986 },
987}
Paul Duffin7c955552021-04-19 13:23:53 +0100988`),
989 checkAllCopyRules(`
990my-unsupported.txt -> hiddenapi/my-unsupported.txt
991my-removed.txt -> hiddenapi/my-removed.txt
992my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
993my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000994my-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
Paul Duffin7c955552021-04-19 13:23:53 +0100995my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
996my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
997my-blocked.txt -> hiddenapi/my-blocked.txt
998my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +0100999.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1000.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1001.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +01001002.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +01001003.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1004.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +00001005.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001006.intermediates/mynewlibrary.stubs.exportable/android_common/combined/mynewlibrary.stubs.exportable.jar -> sdk_library/public/mynewlibrary-stubs.jar
1007.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
1008.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
1009.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1010.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1011.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 +01001012`),
Paul Duffin7c475152021-06-09 16:17:58 +01001013 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
1014 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
1015 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +01001016 )
1017}
Paul Duffin1938dba2022-07-26 23:53:00 +00001018
1019func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
1020 expectedSdkSnapshot string,
1021 expectedCopyRules string,
1022 expectedStubFlagsInputs []string,
1023 suffix string) {
1024
1025 result := android.GroupFixturePreparers(
1026 prepareForSdkTestWithJava,
1027 java.PrepareForTestWithJavaDefaultModules,
1028 java.PrepareForTestWithJavaSdkLibraryFiles,
1029 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1030 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1031 prepareForSdkTestWithApex,
1032
1033 // Add a platform_bootclasspath that depends on the fragment.
1034 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1035
1036 android.FixtureMergeEnv(map[string]string{
1037 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
1038 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001039 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1040 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1041 }),
Paul Duffin1938dba2022-07-26 23:53:00 +00001042
Jihoon Kangbd093452023-12-26 19:08:01 +00001043 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1044 variables.BuildFlags = map[string]string{
1045 "RELEASE_HIDDEN_API_EXPORTABLE_STUBS": "true",
1046 }
1047 }),
1048
Paul Duffin1938dba2022-07-26 23:53:00 +00001049 android.FixtureWithRootAndroidBp(`
1050 sdk {
1051 name: "mysdk",
1052 apexes: ["myapex"],
1053 }
1054
1055 apex {
1056 name: "myapex",
1057 key: "myapex.key",
1058 min_sdk_version: "S",
1059 bootclasspath_fragments: ["mybootclasspathfragment"],
1060 }
1061
1062 bootclasspath_fragment {
1063 name: "mybootclasspathfragment",
1064 apex_available: ["myapex"],
1065 contents: [
1066 "mysdklibrary",
1067 "mynewsdklibrary",
1068 ],
1069
1070 hidden_api: {
1071 split_packages: [],
1072 },
1073 }
1074
1075 java_sdk_library {
1076 name: "mysdklibrary",
1077 apex_available: ["myapex"],
1078 srcs: ["Test.java"],
1079 shared_library: false,
1080 public: {enabled: true},
1081 min_sdk_version: "S",
1082 }
1083
1084 java_sdk_library {
1085 name: "mynewsdklibrary",
1086 apex_available: ["myapex"],
1087 srcs: ["Test.java"],
1088 compile_dex: true,
1089 public: {enabled: true},
1090 min_sdk_version: "Tiramisu",
1091 permitted_packages: ["mynewsdklibrary"],
1092 }
1093 `),
1094 ).RunTest(t)
1095
1096 bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1097 rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
Jihoon Kanga3a05462024-04-05 00:36:44 +00001098 android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", android.SortedUniqueStrings(expectedStubFlagsInputs), android.SortedUniquePaths(rule.Implicits))
Paul Duffin1938dba2022-07-26 23:53:00 +00001099
1100 CheckSnapshot(t, result, "mysdk", "",
1101 checkAndroidBpContents(expectedSdkSnapshot),
1102 checkAllCopyRules(expectedCopyRules),
1103 )
1104}
1105
1106func TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1107 t.Run("target S build", func(t *testing.T) {
1108 expectedSnapshot := `
1109// This is auto-generated. DO NOT EDIT.
1110
1111prebuilt_bootclasspath_fragment {
1112 name: "mybootclasspathfragment",
1113 prefer: false,
1114 visibility: ["//visibility:public"],
1115 apex_available: ["myapex"],
1116 contents: ["mysdklibrary"],
1117 hidden_api: {
1118 annotation_flags: "hiddenapi/annotation-flags.csv",
1119 metadata: "hiddenapi/metadata.csv",
1120 index: "hiddenapi/index.csv",
1121 stub_flags: "hiddenapi/stub-flags.csv",
1122 all_flags: "hiddenapi/all-flags.csv",
1123 },
1124}
1125
1126java_sdk_library_import {
1127 name: "mysdklibrary",
1128 prefer: false,
1129 visibility: ["//visibility:public"],
1130 apex_available: ["myapex"],
1131 shared_library: false,
1132 public: {
1133 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1134 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1135 current_api: "sdk_library/public/mysdklibrary.txt",
1136 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1137 sdk_version: "current",
1138 },
1139}
1140`
1141 expectedCopyRules := `
1142.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1143.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1144.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1145.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1146.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001147.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1148.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1149.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 +00001150`
1151
1152 // On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1153 // of the snapshot.
1154 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001155 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001156 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001157 }
1158
1159 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1160 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1161 })
1162
1163 t.Run("target-Tiramisu-build", func(t *testing.T) {
1164 expectedSnapshot := `
1165// This is auto-generated. DO NOT EDIT.
1166
1167prebuilt_bootclasspath_fragment {
1168 name: "mybootclasspathfragment",
1169 prefer: false,
1170 visibility: ["//visibility:public"],
1171 apex_available: ["myapex"],
1172 contents: [
1173 "mysdklibrary",
1174 "mynewsdklibrary",
1175 ],
1176 hidden_api: {
1177 annotation_flags: "hiddenapi/annotation-flags.csv",
1178 metadata: "hiddenapi/metadata.csv",
1179 index: "hiddenapi/index.csv",
1180 signature_patterns: "hiddenapi/signature-patterns.csv",
1181 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1182 filtered_flags: "hiddenapi/filtered-flags.csv",
1183 },
1184}
1185
1186java_sdk_library_import {
1187 name: "mysdklibrary",
1188 prefer: false,
1189 visibility: ["//visibility:public"],
1190 apex_available: ["myapex"],
1191 shared_library: false,
1192 public: {
1193 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1194 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1195 current_api: "sdk_library/public/mysdklibrary.txt",
1196 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1197 sdk_version: "current",
1198 },
1199}
1200
1201java_sdk_library_import {
1202 name: "mynewsdklibrary",
1203 prefer: false,
1204 visibility: ["//visibility:public"],
1205 apex_available: ["myapex"],
1206 shared_library: true,
1207 compile_dex: true,
1208 permitted_packages: ["mynewsdklibrary"],
1209 public: {
1210 jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1211 stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1212 current_api: "sdk_library/public/mynewsdklibrary.txt",
1213 removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1214 sdk_version: "current",
1215 },
1216}
1217`
1218 expectedCopyRules := `
1219.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1220.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1221.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1222.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1223.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1224.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001225.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1226.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1227.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1228.intermediates/mynewsdklibrary.stubs.exportable/android_common/combined/mynewsdklibrary.stubs.exportable.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
1229.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1230.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 +00001231`
1232
1233 // On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1234 // they are both part of the snapshot.
1235 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001236 "out/soong/.intermediates/mynewsdklibrary.stubs.exportable/android_common/dex/mynewsdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001237 "out/soong/.intermediates/mynewsdklibrary.impl/android_common/aligned/mynewsdklibrary.jar",
Jihoon Kangbd093452023-12-26 19:08:01 +00001238 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001239 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001240 }
1241
1242 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1243 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1244 })
1245}
Sam Delmerico35881362023-06-30 14:40:10 -04001246
1247func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) {
1248 result := android.GroupFixturePreparers(
1249 prepareForSdkTestWithJava,
1250 java.PrepareForTestWithJavaDefaultModules,
1251 java.PrepareForTestWithJavaSdkLibraryFiles,
1252 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1253 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1254 prepareForSdkTestWithApex,
1255 // Add a platform_bootclasspath that depends on the fragment.
1256 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1257 android.FixtureMergeEnv(map[string]string{
1258 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
1259 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001260 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1261 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1262 }),
Sam Delmerico35881362023-06-30 14:40:10 -04001263 android.FixtureWithRootAndroidBp(`
1264 sdk {
1265 name: "mysdk",
1266 apexes: ["myapex"],
1267 }
1268 apex {
1269 name: "myapex",
1270 key: "myapex.key",
1271 min_sdk_version: "S",
1272 bootclasspath_fragments: ["mybootclasspathfragment"],
1273 }
1274 bootclasspath_fragment {
1275 name: "mybootclasspathfragment",
1276 apex_available: ["myapex"],
1277 contents: ["mysdklibrary", "mynewsdklibrary"],
1278 hidden_api: {
1279 split_packages: [],
1280 },
1281 }
1282 java_sdk_library {
1283 name: "mysdklibrary",
1284 apex_available: ["myapex"],
1285 srcs: ["Test.java"],
1286 shared_library: false,
1287 public: {enabled: true},
1288 min_sdk_version: "Tiramisu",
1289 }
1290 java_sdk_library {
1291 name: "mynewsdklibrary",
1292 apex_available: ["myapex"],
1293 srcs: ["Test.java"],
1294 compile_dex: true,
1295 public: {enabled: true},
1296 min_sdk_version: "Tiramisu",
1297 permitted_packages: ["mynewsdklibrary"],
1298 }
1299 `),
1300 ).RunTest(t)
1301
1302 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
1303}