blob: 9430d33f31ead8c652604131b1538304ec87fa28 [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 `),
Spandan Dasa326b322024-09-19 21:02:52 +0000207 snapshotTestPreparer(checkSnapshotWithoutSource, android.GroupFixturePreparers(
208 preparerForSnapshot,
209 // Flag ART prebuilts
210 android.FixtureMergeMockFs(android.MockFS{
211 "apex_contributions/Android.bp": []byte(`
212 apex_contributions {
213 name: "prebuilt_art_contributions",
214 contents: ["prebuilt_com.android.art"],
215 api_domain: "com.android.art",
216 }
217 `)}),
218 android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ART", "prebuilt_art_contributions"),
219 )),
Paul Duffinc8ead412021-06-07 19:28:15 +0100220
221 // Check the behavior of the snapshot without the source.
222 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin8eb45732022-10-04 19:03:31 +0100223 // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
224 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000225 append(
226 []string{
Spandan Das3576e762024-01-03 18:57:03 +0000227 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core1.jar",
228 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core2.jar",
Jiakai Zhangb8796202023-03-06 19:16:48 +0000229 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
230 },
231 java.ApexBootJarDexJarPaths...,
232 )...,
233 )
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100234 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
235 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffinc8ead412021-06-07 19:28:15 +0100236 }),
237
Paul Duffin7c475152021-06-09 16:17:58 +0100238 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100239
240 // Check the behavior of the snapshot when the source is preferred.
241 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100242 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
243 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100244 }),
245
Paul Duffin7c475152021-06-09 16:17:58 +0100246 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100247
248 // Check the behavior of the snapshot when it is preferred.
249 snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100250 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
251 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100252 }),
Paul Duffina57835e2021-04-19 13:23:06 +0100253 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100254
Paul Duffin8eb45732022-10-04 19:03:31 +0100255 // Make sure that the boot jars package check rule includes the dex jars created from the source.
256 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000257 append(
258 []string{
259 "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
260 "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
261 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
262 },
263 java.ApexBootJarDexJarPaths...,
264 )...,
265 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100266}
267
268// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
269// package check rule.
Paul Duffin8eb45732022-10-04 19:03:31 +0100270func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
271 t.Helper()
Paul Duffinc8ead412021-06-07 19:28:15 +0100272 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
273 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
274 command := bootJarsCheckRule.RuleParams.Command
Paul Duffin8eb45732022-10-04 19:03:31 +0100275 expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
Paul Duffinc8ead412021-06-07 19:28:15 +0100276 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100277}
278
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000279func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000280 result := android.GroupFixturePreparers(
281 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100282 java.PrepareForTestWithJavaDefaultModules,
283 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100284 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100285 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100286 prepareForSdkTestWithApex,
287
288 // Add a platform_bootclasspath that depends on the fragment.
289 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
290
Colin Crossa66b4632024-08-08 15:50:47 -0700291 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Spandan Das81fe4d12024-05-15 18:43:47 +0000292 // Make sure that we have atleast one platform library so that we can check the monolithic hiddenapi
293 // file creation.
294 java.FixtureConfigureBootJars("platform:foo"),
295 android.FixtureModifyMockFS(func(fs android.MockFS) {
296 fs["platform/Android.bp"] = []byte(`
297 java_library {
298 name: "foo",
299 srcs: ["Test.java"],
300 compile_dex: true,
301 }
302 `)
303 fs["platform/Test.java"] = nil
304 }),
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000305
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000306 android.FixtureWithRootAndroidBp(sdk+`
Paul Duffin7c475152021-06-09 16:17:58 +0100307 apex {
308 name: "myapex",
309 key: "myapex.key",
310 min_sdk_version: "2",
311 bootclasspath_fragments: ["mybootclasspathfragment"],
312 }
313
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100314 bootclasspath_fragment {
315 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100316 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100317 contents: [
318 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
319 "mybootlib",
320 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
321 "myothersdklibrary",
322 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100323 api: {
324 stub_libs: ["mysdklibrary"],
325 },
326 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100327 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100328 stub_libs: ["mycoreplatform"],
329 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100330 hidden_api: {
331 split_packages: ["*"],
332 },
Paul Duffina57835e2021-04-19 13:23:06 +0100333 }
334
335 java_library {
336 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100337 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100338 srcs: ["Test.java"],
339 system_modules: "none",
340 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100341 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100342 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100343 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000344 }
Paul Duffin895c7142021-04-25 13:40:15 +0100345
346 java_sdk_library {
347 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100348 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100349 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100350 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100351 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100352 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000353 sdk_version: "current",
Paul Duffin895c7142021-04-25 13:40:15 +0100354 }
355
356 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100357 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100358 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100359 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100360 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100361 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100362 min_sdk_version: "2",
363 permitted_packages: ["myothersdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000364 sdk_version: "current",
Paul Duffina10bd3c2021-05-12 13:46:54 +0100365 }
366
367 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100368 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100369 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100370 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100371 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100372 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100373 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000374 sdk_version: "current",
Paul Duffin895c7142021-04-25 13:40:15 +0100375 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000376 `),
377 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000378
Paul Duffin7c475152021-06-09 16:17:58 +0100379 // A preparer to update the test fixture used when processing an unpackage snapshot.
380 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
381
Paul Duffin36474d32021-03-12 12:19:43 +0000382 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000383 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000384// This is auto-generated. DO NOT EDIT.
385
Spandan Dasa5e26d32024-03-06 14:04:36 +0000386apex_contributions_defaults {
387 name: "mysdk.contributions",
388 contents: [
389 "prebuilt_myothersdklibrary",
390 "prebuilt_mysdklibrary",
391 "prebuilt_mycoreplatform",
392 ],
393}
394
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100395prebuilt_bootclasspath_fragment {
396 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000397 prefer: false,
398 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100399 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100400 contents: [
401 "mybootlib",
402 "myothersdklibrary",
403 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100404 api: {
405 stub_libs: ["mysdklibrary"],
406 },
407 core_platform_api: {
408 stub_libs: ["mycoreplatform"],
409 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100410 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100411 annotation_flags: "hiddenapi/annotation-flags.csv",
412 metadata: "hiddenapi/metadata.csv",
413 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100414 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100415 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
416 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100417 },
Paul Duffina57835e2021-04-19 13:23:06 +0100418}
419
420java_import {
421 name: "mybootlib",
422 prefer: false,
423 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100424 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000425 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000426 min_sdk_version: "2",
Paul Duffin869de142021-07-15 14:14:41 +0100427 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000428}
Paul Duffin895c7142021-04-25 13:40:15 +0100429
430java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100431 name: "myothersdklibrary",
432 prefer: false,
433 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100434 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100435 shared_library: true,
436 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100437 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100438 public: {
439 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
440 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
441 current_api: "sdk_library/public/myothersdklibrary.txt",
442 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
443 sdk_version: "current",
444 },
445}
446
447java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100448 name: "mysdklibrary",
449 prefer: false,
450 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100451 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100452 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100453 public: {
454 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
455 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
456 current_api: "sdk_library/public/mysdklibrary.txt",
457 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
458 sdk_version: "current",
459 },
460}
461
462java_sdk_library_import {
463 name: "mycoreplatform",
464 prefer: false,
465 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100466 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100467 shared_library: true,
468 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100469 public: {
470 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
471 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
472 current_api: "sdk_library/public/mycoreplatform.txt",
473 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
474 sdk_version: "current",
475 },
476}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100477 `),
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000478 checkAllCopyRules(copyRules),
Paul Duffin7c475152021-06-09 16:17:58 +0100479 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100480 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
481 module := result.ModuleForTests("platform-bootclasspath", "android_common")
482 var rule android.TestingBuildParams
483 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
484 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
485 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
486 out/soong/hiddenapi/hiddenapi-stub-flags.txt
487 snapshot/hiddenapi/annotation-flags.csv
488 `, rule)
489
490 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
491 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
492 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
493 snapshot/hiddenapi/metadata.csv
494 `, rule)
495
496 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
497 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
498 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
499 snapshot/hiddenapi/index.csv
500 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100501
Paul Duffin8d007e92021-07-22 12:00:49 +0100502 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100503 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 +0100504 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100505 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100506 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
507 module := result.ModuleForTests("platform-bootclasspath", "android_common")
508 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100509 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 +0100510 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100511 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
512 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000513}
Paul Duffin04b4a192021-03-18 11:05:31 +0000514
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000515func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
516 t.Run("added-directly", func(t *testing.T) {
517 testSnapshotWithBootClasspathFragment_Contents(t, `
518 sdk {
519 name: "mysdk",
520 bootclasspath_fragments: ["mybootclasspathfragment"],
521 java_sdk_libs: [
522 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
523 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
524 // api.stub_libs property. However, it is specified here to ensure that duplicates are
525 // correctly deduped.
526 "mysdklibrary",
527 ],
528 }
529 `, `
530.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
531.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
532.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
533.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
534.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
535.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000536.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000537.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
538.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
539.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
540.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
541.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
542.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
543.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
544.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
545.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 +0000546`)
547 })
548
549 copyBootclasspathFragmentFromApexVariantRules := `
550.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
551.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
552.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
553.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
554.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
555.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000556.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000557.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
558.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
559.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
560.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
561.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
562.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
563.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
564.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
565.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 +0000566`
567 t.Run("added-via-apex", func(t *testing.T) {
568 testSnapshotWithBootClasspathFragment_Contents(t, `
569 sdk {
570 name: "mysdk",
571 apexes: ["myapex"],
572 }
573 `, copyBootclasspathFragmentFromApexVariantRules)
574 })
575
576 t.Run("added-directly-and-indirectly", func(t *testing.T) {
577 testSnapshotWithBootClasspathFragment_Contents(t, `
578 sdk {
579 name: "mysdk",
580 apexes: ["myapex"],
581 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
582 // a bootclasspath_fragments module because it is used in the myapex's
583 // bootclasspath_fragments property. However, it is specified here to ensure that duplicates
584 // are correctly deduped.
585 bootclasspath_fragments: ["mybootclasspathfragment"],
586 java_sdk_libs: [
587 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
588 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
589 // api.stub_libs property. However, it is specified here to ensure that duplicates are
590 // correctly deduped.
591 "mysdklibrary",
592 ],
593 }
594 `, copyBootclasspathFragmentFromApexVariantRules)
595 })
596}
597
Paul Duffin51227d82021-05-18 12:54:27 +0100598// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
599// bootclasspath_fragment is correctly output to the sdk snapshot.
600func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
601 result := android.GroupFixturePreparers(
602 prepareForSdkTestWithJava,
603 java.PrepareForTestWithJavaDefaultModules,
604 java.PrepareForTestWithJavaSdkLibraryFiles,
605 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100606 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100607 prepareForSdkTestWithApex,
608
609 // Some additional files needed for the myotherapex.
610 android.FixtureMergeMockFs(android.MockFS{
611 "system/sepolicy/apex/myotherapex-file_contexts": nil,
612 "myotherapex/apex_manifest.json": nil,
613 "myotherapex/Test.java": nil,
614 }),
615
616 android.FixtureAddTextFile("myotherapex/Android.bp", `
617 apex {
618 name: "myotherapex",
619 key: "myapex.key",
620 min_sdk_version: "2",
621 bootclasspath_fragments: ["myotherbootclasspathfragment"],
622 }
623
624 bootclasspath_fragment {
625 name: "myotherbootclasspathfragment",
626 apex_available: ["myotherapex"],
627 contents: [
628 "myotherlib",
629 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100630 hidden_api: {
631 split_packages: ["*"],
632 },
Paul Duffin51227d82021-05-18 12:54:27 +0100633 }
634
635 java_library {
636 name: "myotherlib",
637 apex_available: ["myotherapex"],
638 srcs: ["Test.java"],
639 min_sdk_version: "2",
640 permitted_packages: ["myothersdklibrary"],
641 compile_dex: true,
Jihoon Kang85bc1932024-07-01 17:04:46 +0000642 sdk_version: "current",
Paul Duffin51227d82021-05-18 12:54:27 +0100643 }
644 `),
645
646 android.FixtureWithRootAndroidBp(`
647 sdk {
648 name: "mysdk",
649 bootclasspath_fragments: ["mybootclasspathfragment"],
650 }
651
652 bootclasspath_fragment {
653 name: "mybootclasspathfragment",
654 contents: [
655 "mysdklibrary",
656 ],
657 fragments: [
658 {
659 apex: "myotherapex",
660 module: "myotherbootclasspathfragment"
661 },
662 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100663 hidden_api: {
664 split_packages: ["*"],
665 },
Paul Duffin51227d82021-05-18 12:54:27 +0100666 }
667
668 java_sdk_library {
669 name: "mysdklibrary",
670 srcs: ["Test.java"],
671 shared_library: false,
672 public: {enabled: true},
673 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000674 sdk_version: "current",
Paul Duffin51227d82021-05-18 12:54:27 +0100675 }
676 `),
677 ).RunTest(t)
678
679 // A preparer to update the test fixture used when processing an unpackage snapshot.
680 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
681
682 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000683 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100684// This is auto-generated. DO NOT EDIT.
685
Spandan Dasa5e26d32024-03-06 14:04:36 +0000686apex_contributions_defaults {
687 name: "mysdk.contributions",
688 contents: ["prebuilt_mysdklibrary"],
689}
690
Paul Duffin51227d82021-05-18 12:54:27 +0100691prebuilt_bootclasspath_fragment {
692 name: "mybootclasspathfragment",
693 prefer: false,
694 visibility: ["//visibility:public"],
695 apex_available: ["//apex_available:platform"],
696 contents: ["mysdklibrary"],
697 fragments: [
698 {
699 apex: "myotherapex",
700 module: "myotherbootclasspathfragment",
701 },
702 ],
703 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100704 annotation_flags: "hiddenapi/annotation-flags.csv",
705 metadata: "hiddenapi/metadata.csv",
706 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100707 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100708 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
709 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100710 },
711}
712
713java_sdk_library_import {
714 name: "mysdklibrary",
715 prefer: false,
716 visibility: ["//visibility:public"],
717 apex_available: ["//apex_available:platform"],
718 shared_library: false,
719 public: {
720 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
721 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
722 current_api: "sdk_library/public/mysdklibrary.txt",
723 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
724 sdk_version: "current",
725 },
726}
727 `),
728 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
729 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
730 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
731 )
732}
733
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100734// Test that bootclasspath_fragment works with sdk.
735func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000736 android.GroupFixturePreparers(
737 prepareForSdkTestWithApex,
738 prepareForSdkTestWithJava,
Paul Duffin80e7f732022-11-25 12:31:31 +0000739 android.FixtureMergeMockFs(android.MockFS{
740 "java/mybootlib.jar": nil,
741 "hiddenapi/annotation-flags.csv": nil,
742 "hiddenapi/index.csv": nil,
743 "hiddenapi/metadata.csv": nil,
744 "hiddenapi/signature-patterns.csv": nil,
745 "hiddenapi/filtered-stub-flags.csv": nil,
746 "hiddenapi/filtered-flags.csv": nil,
747 }),
Paul Duffin04b4a192021-03-18 11:05:31 +0000748 android.FixtureWithRootAndroidBp(`
749 sdk {
750 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100751 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000752 }
753
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100754 bootclasspath_fragment {
755 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000756 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100757 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000758 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100759 hidden_api: {
760 split_packages: ["*"],
761 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000762 }
763
Paul Duffin8018e502021-05-21 19:28:09 +0100764 java_library {
765 name: "mybootlib",
766 apex_available: ["myapex"],
767 srcs: ["Test.java"],
768 system_modules: "none",
769 sdk_version: "none",
770 min_sdk_version: "1",
771 compile_dex: true,
772 }
773
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100774 prebuilt_bootclasspath_fragment {
Paul Duffin80e7f732022-11-25 12:31:31 +0000775 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000776 prefer: false,
777 visibility: ["//visibility:public"],
778 apex_available: [
779 "myapex",
780 ],
781 image_name: "art",
Paul Duffin80e7f732022-11-25 12:31:31 +0000782 contents: ["mybootlib"],
783 hidden_api: {
784 annotation_flags: "hiddenapi/annotation-flags.csv",
785 metadata: "hiddenapi/metadata.csv",
786 index: "hiddenapi/index.csv",
787 signature_patterns: "hiddenapi/signature-patterns.csv",
788 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
789 filtered_flags: "hiddenapi/filtered-flags.csv",
790 },
Paul Duffin8018e502021-05-21 19:28:09 +0100791 }
792
793 java_import {
Paul Duffin80e7f732022-11-25 12:31:31 +0000794 name: "mybootlib",
Paul Duffin8018e502021-05-21 19:28:09 +0100795 visibility: ["//visibility:public"],
796 apex_available: ["com.android.art"],
797 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000798 }
799 `),
800 ).RunTest(t)
801}
Paul Duffin7c955552021-04-19 13:23:53 +0100802
803func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
804 result := android.GroupFixturePreparers(
805 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100806 java.PrepareForTestWithJavaDefaultModules,
807 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000808 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
809 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100810 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100811
812 // Add a platform_bootclasspath that depends on the fragment.
813 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
814
Colin Crossa66b4632024-08-08 15:50:47 -0700815 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000816
Paul Duffin7c955552021-04-19 13:23:53 +0100817 android.MockFS{
818 "my-blocked.txt": nil,
819 "my-max-target-o-low-priority.txt": nil,
820 "my-max-target-p.txt": nil,
821 "my-max-target-q.txt": nil,
822 "my-max-target-r-low-priority.txt": nil,
823 "my-removed.txt": nil,
824 "my-unsupported-packages.txt": nil,
825 "my-unsupported.txt": nil,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000826 "my-new-max-target-q.txt": nil,
Paul Duffin7c955552021-04-19 13:23:53 +0100827 }.AddToFixture(),
828 android.FixtureWithRootAndroidBp(`
829 sdk {
830 name: "mysdk",
831 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100832 }
833
Paul Duffin475daaf2021-05-13 00:57:55 +0100834 apex {
835 name: "myapex",
836 key: "myapex.key",
837 min_sdk_version: "1",
838 bootclasspath_fragments: ["mybootclasspathfragment"],
839 }
840
Paul Duffin7c955552021-04-19 13:23:53 +0100841 bootclasspath_fragment {
842 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100843 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000844 contents: ["mybootlib", "mynewlibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100845 api: {
846 stub_libs: ["mysdklibrary"],
847 },
Paul Duffin7c955552021-04-19 13:23:53 +0100848 hidden_api: {
849 unsupported: [
850 "my-unsupported.txt",
851 ],
852 removed: [
853 "my-removed.txt",
854 ],
855 max_target_r_low_priority: [
856 "my-max-target-r-low-priority.txt",
857 ],
858 max_target_q: [
859 "my-max-target-q.txt",
860 ],
861 max_target_p: [
862 "my-max-target-p.txt",
863 ],
864 max_target_o_low_priority: [
865 "my-max-target-o-low-priority.txt",
866 ],
867 blocked: [
868 "my-blocked.txt",
869 ],
870 unsupported_packages: [
871 "my-unsupported-packages.txt",
872 ],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000873 split_packages: ["sdklibrary"],
874 package_prefixes: ["sdklibrary.all.mine"],
875 single_packages: ["sdklibrary.mine"],
Paul Duffin7c955552021-04-19 13:23:53 +0100876 },
877 }
878
879 java_library {
880 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100881 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100882 srcs: ["Test.java"],
883 system_modules: "none",
884 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100885 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100886 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100887 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100888 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100889
890 java_sdk_library {
891 name: "mysdklibrary",
892 srcs: ["Test.java"],
893 compile_dex: true,
894 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100895 permitted_packages: ["mysdklibrary"],
Spandan Das91455082023-03-02 04:41:35 +0000896 min_sdk_version: "current",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000897 sdk_version: "current",
Paul Duffin475daaf2021-05-13 00:57:55 +0100898 }
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000899
900 java_sdk_library {
901 name: "mynewlibrary",
902 apex_available: ["myapex"],
903 srcs: ["Test.java"],
904 min_sdk_version: "10",
905 compile_dex: true,
906 public: {enabled: true},
907 permitted_packages: ["mysdklibrary"],
908 hidden_api: {
909 max_target_q: [
910 "my-new-max-target-q.txt",
911 ],
912 split_packages: ["sdklibrary", "newlibrary"],
913 package_prefixes: ["newlibrary.all.mine"],
914 single_packages: ["newlibrary.mine"],
915 },
Jihoon Kang85bc1932024-07-01 17:04:46 +0000916 sdk_version: "current",
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000917 }
Paul Duffin7c955552021-04-19 13:23:53 +0100918 `),
919 ).RunTest(t)
920
Paul Duffin7c475152021-06-09 16:17:58 +0100921 // A preparer to update the test fixture used when processing an unpackage snapshot.
922 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
923
Paul Duffin7c955552021-04-19 13:23:53 +0100924 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000925 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100926// This is auto-generated. DO NOT EDIT.
927
Spandan Dasa5e26d32024-03-06 14:04:36 +0000928apex_contributions_defaults {
929 name: "mysdk.contributions",
930 contents: [
931 "prebuilt_mynewlibrary",
932 "prebuilt_mysdklibrary",
933 ],
934}
935
Paul Duffin7c955552021-04-19 13:23:53 +0100936prebuilt_bootclasspath_fragment {
937 name: "mybootclasspathfragment",
938 prefer: false,
939 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100940 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000941 contents: [
942 "mybootlib",
943 "mynewlibrary",
944 ],
Paul Duffin475daaf2021-05-13 00:57:55 +0100945 api: {
946 stub_libs: ["mysdklibrary"],
947 },
Paul Duffin7c955552021-04-19 13:23:53 +0100948 hidden_api: {
949 unsupported: ["hiddenapi/my-unsupported.txt"],
950 removed: ["hiddenapi/my-removed.txt"],
951 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000952 max_target_q: [
953 "hiddenapi/my-max-target-q.txt",
954 "hiddenapi/my-new-max-target-q.txt",
955 ],
Paul Duffin7c955552021-04-19 13:23:53 +0100956 max_target_p: ["hiddenapi/my-max-target-p.txt"],
957 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
958 blocked: ["hiddenapi/my-blocked.txt"],
959 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100960 annotation_flags: "hiddenapi/annotation-flags.csv",
961 metadata: "hiddenapi/metadata.csv",
962 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100963 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100964 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
965 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100966 },
967}
968
969java_import {
970 name: "mybootlib",
971 prefer: false,
972 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100973 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000974 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000975 min_sdk_version: "1",
Paul Duffin869de142021-07-15 14:14:41 +0100976 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100977}
Paul Duffin475daaf2021-05-13 00:57:55 +0100978
979java_sdk_library_import {
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000980 name: "mynewlibrary",
981 prefer: false,
982 visibility: ["//visibility:public"],
983 apex_available: ["myapex"],
984 shared_library: true,
985 compile_dex: true,
986 permitted_packages: ["mysdklibrary"],
987 public: {
988 jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
989 stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
990 current_api: "sdk_library/public/mynewlibrary.txt",
991 removed_api: "sdk_library/public/mynewlibrary-removed.txt",
992 sdk_version: "current",
993 },
994}
995
996java_sdk_library_import {
Paul Duffin475daaf2021-05-13 00:57:55 +0100997 name: "mysdklibrary",
998 prefer: false,
999 visibility: ["//visibility:public"],
1000 apex_available: ["//apex_available:platform"],
1001 shared_library: true,
1002 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +01001003 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +01001004 public: {
1005 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1006 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1007 current_api: "sdk_library/public/mysdklibrary.txt",
1008 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1009 sdk_version: "current",
1010 },
1011}
Paul Duffin7c955552021-04-19 13:23:53 +01001012`),
1013 checkAllCopyRules(`
1014my-unsupported.txt -> hiddenapi/my-unsupported.txt
1015my-removed.txt -> hiddenapi/my-removed.txt
1016my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
1017my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
Paul Duffin3f1ae0b2022-07-27 16:27:42 +00001018my-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
Paul Duffin7c955552021-04-19 13:23:53 +01001019my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
1020my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
1021my-blocked.txt -> hiddenapi/my-blocked.txt
1022my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +01001023.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1024.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1025.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +01001026.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +01001027.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1028.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +00001029.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001030.intermediates/mynewlibrary.stubs.exportable/android_common/combined/mynewlibrary.stubs.exportable.jar -> sdk_library/public/mynewlibrary-stubs.jar
1031.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
1032.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
1033.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1034.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1035.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 +01001036`),
Paul Duffin7c475152021-06-09 16:17:58 +01001037 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
1038 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
1039 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +01001040 )
1041}
Paul Duffin1938dba2022-07-26 23:53:00 +00001042
1043func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
1044 expectedSdkSnapshot string,
1045 expectedCopyRules string,
1046 expectedStubFlagsInputs []string,
1047 suffix string) {
1048
1049 result := android.GroupFixturePreparers(
1050 prepareForSdkTestWithJava,
1051 java.PrepareForTestWithJavaDefaultModules,
1052 java.PrepareForTestWithJavaSdkLibraryFiles,
1053 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1054 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1055 prepareForSdkTestWithApex,
1056
1057 // Add a platform_bootclasspath that depends on the fragment.
1058 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1059
1060 android.FixtureMergeEnv(map[string]string{
1061 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
1062 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001063 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1064 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1065 }),
Paul Duffin1938dba2022-07-26 23:53:00 +00001066
Colin Crossa66b4632024-08-08 15:50:47 -07001067 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kangbd093452023-12-26 19:08:01 +00001068
Paul Duffin1938dba2022-07-26 23:53:00 +00001069 android.FixtureWithRootAndroidBp(`
1070 sdk {
1071 name: "mysdk",
1072 apexes: ["myapex"],
1073 }
1074
1075 apex {
1076 name: "myapex",
1077 key: "myapex.key",
1078 min_sdk_version: "S",
1079 bootclasspath_fragments: ["mybootclasspathfragment"],
1080 }
1081
1082 bootclasspath_fragment {
1083 name: "mybootclasspathfragment",
1084 apex_available: ["myapex"],
1085 contents: [
1086 "mysdklibrary",
1087 "mynewsdklibrary",
1088 ],
1089
1090 hidden_api: {
1091 split_packages: [],
1092 },
1093 }
1094
1095 java_sdk_library {
1096 name: "mysdklibrary",
1097 apex_available: ["myapex"],
1098 srcs: ["Test.java"],
1099 shared_library: false,
1100 public: {enabled: true},
1101 min_sdk_version: "S",
Jihoon Kang85bc1932024-07-01 17:04:46 +00001102 sdk_version: "current",
Paul Duffin1938dba2022-07-26 23:53:00 +00001103 }
1104
1105 java_sdk_library {
1106 name: "mynewsdklibrary",
1107 apex_available: ["myapex"],
1108 srcs: ["Test.java"],
1109 compile_dex: true,
1110 public: {enabled: true},
1111 min_sdk_version: "Tiramisu",
1112 permitted_packages: ["mynewsdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +00001113 sdk_version: "current",
Paul Duffin1938dba2022-07-26 23:53:00 +00001114 }
1115 `),
1116 ).RunTest(t)
1117
1118 bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1119 rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
Jihoon Kanga3a05462024-04-05 00:36:44 +00001120 android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", android.SortedUniqueStrings(expectedStubFlagsInputs), android.SortedUniquePaths(rule.Implicits))
Paul Duffin1938dba2022-07-26 23:53:00 +00001121
1122 CheckSnapshot(t, result, "mysdk", "",
1123 checkAndroidBpContents(expectedSdkSnapshot),
1124 checkAllCopyRules(expectedCopyRules),
1125 )
1126}
1127
1128func TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1129 t.Run("target S build", func(t *testing.T) {
1130 expectedSnapshot := `
1131// This is auto-generated. DO NOT EDIT.
1132
1133prebuilt_bootclasspath_fragment {
1134 name: "mybootclasspathfragment",
1135 prefer: false,
1136 visibility: ["//visibility:public"],
1137 apex_available: ["myapex"],
1138 contents: ["mysdklibrary"],
1139 hidden_api: {
1140 annotation_flags: "hiddenapi/annotation-flags.csv",
1141 metadata: "hiddenapi/metadata.csv",
1142 index: "hiddenapi/index.csv",
1143 stub_flags: "hiddenapi/stub-flags.csv",
1144 all_flags: "hiddenapi/all-flags.csv",
1145 },
1146}
1147
1148java_sdk_library_import {
1149 name: "mysdklibrary",
1150 prefer: false,
1151 visibility: ["//visibility:public"],
1152 apex_available: ["myapex"],
1153 shared_library: false,
1154 public: {
1155 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1156 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1157 current_api: "sdk_library/public/mysdklibrary.txt",
1158 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1159 sdk_version: "current",
1160 },
1161}
1162`
1163 expectedCopyRules := `
1164.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1165.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1166.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1167.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1168.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001169.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1170.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1171.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 +00001172`
1173
1174 // On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1175 // of the snapshot.
1176 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001177 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001178 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001179 }
1180
1181 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1182 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1183 })
1184
1185 t.Run("target-Tiramisu-build", func(t *testing.T) {
1186 expectedSnapshot := `
1187// This is auto-generated. DO NOT EDIT.
1188
1189prebuilt_bootclasspath_fragment {
1190 name: "mybootclasspathfragment",
1191 prefer: false,
1192 visibility: ["//visibility:public"],
1193 apex_available: ["myapex"],
1194 contents: [
1195 "mysdklibrary",
1196 "mynewsdklibrary",
1197 ],
1198 hidden_api: {
1199 annotation_flags: "hiddenapi/annotation-flags.csv",
1200 metadata: "hiddenapi/metadata.csv",
1201 index: "hiddenapi/index.csv",
1202 signature_patterns: "hiddenapi/signature-patterns.csv",
1203 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1204 filtered_flags: "hiddenapi/filtered-flags.csv",
1205 },
1206}
1207
1208java_sdk_library_import {
1209 name: "mysdklibrary",
1210 prefer: false,
1211 visibility: ["//visibility:public"],
1212 apex_available: ["myapex"],
1213 shared_library: false,
1214 public: {
1215 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1216 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1217 current_api: "sdk_library/public/mysdklibrary.txt",
1218 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1219 sdk_version: "current",
1220 },
1221}
1222
1223java_sdk_library_import {
1224 name: "mynewsdklibrary",
1225 prefer: false,
1226 visibility: ["//visibility:public"],
1227 apex_available: ["myapex"],
1228 shared_library: true,
1229 compile_dex: true,
1230 permitted_packages: ["mynewsdklibrary"],
1231 public: {
1232 jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1233 stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1234 current_api: "sdk_library/public/mynewsdklibrary.txt",
1235 removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1236 sdk_version: "current",
1237 },
1238}
1239`
1240 expectedCopyRules := `
1241.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1242.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1243.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1244.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1245.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1246.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001247.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1248.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1249.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1250.intermediates/mynewsdklibrary.stubs.exportable/android_common/combined/mynewsdklibrary.stubs.exportable.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
1251.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1252.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 +00001253`
1254
1255 // On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1256 // they are both part of the snapshot.
1257 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001258 "out/soong/.intermediates/mynewsdklibrary.stubs.exportable/android_common/dex/mynewsdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001259 "out/soong/.intermediates/mynewsdklibrary.impl/android_common/aligned/mynewsdklibrary.jar",
Jihoon Kangbd093452023-12-26 19:08:01 +00001260 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001261 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001262 }
1263
1264 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1265 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1266 })
1267}
Sam Delmerico35881362023-06-30 14:40:10 -04001268
1269func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) {
1270 result := android.GroupFixturePreparers(
1271 prepareForSdkTestWithJava,
1272 java.PrepareForTestWithJavaDefaultModules,
1273 java.PrepareForTestWithJavaSdkLibraryFiles,
1274 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1275 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1276 prepareForSdkTestWithApex,
1277 // Add a platform_bootclasspath that depends on the fragment.
1278 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1279 android.FixtureMergeEnv(map[string]string{
1280 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
1281 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001282 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1283 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1284 }),
Sam Delmerico35881362023-06-30 14:40:10 -04001285 android.FixtureWithRootAndroidBp(`
1286 sdk {
1287 name: "mysdk",
1288 apexes: ["myapex"],
1289 }
1290 apex {
1291 name: "myapex",
1292 key: "myapex.key",
1293 min_sdk_version: "S",
1294 bootclasspath_fragments: ["mybootclasspathfragment"],
1295 }
1296 bootclasspath_fragment {
1297 name: "mybootclasspathfragment",
1298 apex_available: ["myapex"],
1299 contents: ["mysdklibrary", "mynewsdklibrary"],
1300 hidden_api: {
1301 split_packages: [],
1302 },
1303 }
1304 java_sdk_library {
1305 name: "mysdklibrary",
1306 apex_available: ["myapex"],
1307 srcs: ["Test.java"],
1308 shared_library: false,
1309 public: {enabled: true},
1310 min_sdk_version: "Tiramisu",
Jihoon Kang85bc1932024-07-01 17:04:46 +00001311 sdk_version: "current",
Sam Delmerico35881362023-06-30 14:40:10 -04001312 }
1313 java_sdk_library {
1314 name: "mynewsdklibrary",
1315 apex_available: ["myapex"],
1316 srcs: ["Test.java"],
1317 compile_dex: true,
1318 public: {enabled: true},
1319 min_sdk_version: "Tiramisu",
1320 permitted_packages: ["mynewsdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +00001321 sdk_version: "current",
Sam Delmerico35881362023-06-30 14:40:10 -04001322 }
1323 `),
1324 ).RunTest(t)
1325
1326 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
1327}