blob: 34e11f0daf46794bb811452b03b006ca0b1991bf [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)),
Islam Elbanna5351cf22024-09-24 15:36:14 +000049 android.FixtureAddFile("frameworks/base/boot/boot-profile.txt", nil),
50 android.FixtureAddFile("frameworks/base/boot/boot-image-profile.txt", nil),
51 android.FixtureAddFile("art/build/boot/boot-image-profile.txt", nil),
Paul Duffinc8ead412021-06-07 19:28:15 +010052 android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
Paul Duffin7c475152021-06-09 16:17:58 +010053 )
54}
55
56// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
57func fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
58 apexFile := fmt.Sprintf("%s.apex", apex)
59 dir := "prebuilts/apex"
60 return android.GroupFixturePreparers(
61 // A preparer to add a prebuilt apex to the test fixture.
62 android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
63 prebuilt_apex {
64 name: "%s",
65 src: "%s",
66 exported_bootclasspath_fragments: [
67 "%s",
68 ],
69 }
70 `, apex, apexFile, fragment)),
71 android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
72 )
73}
74
Paul Duffina57835e2021-04-19 13:23:06 +010075func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
76 result := android.GroupFixturePreparers(
77 prepareForSdkTestWithJava,
Jiakai Zhangb95998b2023-05-11 16:39:27 +010078 java.PrepareForTestWithDexpreopt,
Paul Duffina57835e2021-04-19 13:23:06 +010079 prepareForSdkTestWithApex,
80
81 // Some additional files needed for the art apex.
82 android.FixtureMergeMockFs(android.MockFS{
83 "com.android.art.avbpubkey": nil,
84 "com.android.art.pem": nil,
85 "system/sepolicy/apex/com.android.art-file_contexts": nil,
86 }),
Paul Duffin023dba02021-04-22 01:45:29 +010087
Paul Duffin7c475152021-06-09 16:17:58 +010088 // Add a platform_bootclasspath that depends on the fragment.
Jiakai Zhangb8796202023-03-06 19:16:48 +000089 fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(
Jiakai Zhangb69e8952023-07-11 14:31:22 +010090 "com.android.art", "art-bootclasspath-fragment", java.ApexBootJarFragmentsForPlatformBootclasspath),
Paul Duffin023dba02021-04-22 01:45:29 +010091
Paul Duffin8eb45732022-10-04 19:03:31 +010092 java.PrepareForBootImageConfigTest,
Jiakai Zhangb8796202023-03-06 19:16:48 +000093 java.PrepareApexBootJarConfigsAndModules,
Paul Duffina57835e2021-04-19 13:23:06 +010094 android.FixtureWithRootAndroidBp(`
95 sdk {
96 name: "mysdk",
Jiakai Zhangb69e8952023-07-11 14:31:22 +010097 bootclasspath_fragments: ["art-bootclasspath-fragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010098 }
99
100 apex {
101 name: "com.android.art",
102 key: "com.android.art.key",
103 bootclasspath_fragments: [
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100104 "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100105 ],
106 updatable: false,
107 }
108
109 bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100110 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100111 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100112 contents: ["core1", "core2"],
Paul Duffina57835e2021-04-19 13:23:06 +0100113 apex_available: ["com.android.art"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100114 hidden_api: {
115 split_packages: ["*"],
116 },
Paul Duffina57835e2021-04-19 13:23:06 +0100117 }
118
119 apex_key {
120 name: "com.android.art.key",
121 public_key: "com.android.art.avbpubkey",
122 private_key: "com.android.art.pem",
123 }
124
125 java_library {
Paul Duffin8eb45732022-10-04 19:03:31 +0100126 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100127 srcs: ["Test.java"],
128 system_modules: "none",
129 sdk_version: "none",
130 compile_dex: true,
131 apex_available: ["com.android.art"],
132 }
Paul Duffin8eb45732022-10-04 19:03:31 +0100133
134 java_library {
135 name: "core2",
136 srcs: ["Test.java"],
137 system_modules: "none",
138 sdk_version: "none",
139 compile_dex: true,
140 apex_available: ["com.android.art"],
141 }
142`),
Paul Duffina57835e2021-04-19 13:23:06 +0100143 ).RunTest(t)
144
Paul Duffin7c475152021-06-09 16:17:58 +0100145 // A preparer to update the test fixture used when processing an unpackage snapshot.
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100146 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "art-bootclasspath-fragment")
Paul Duffin023dba02021-04-22 01:45:29 +0100147
Paul Duffin8eb45732022-10-04 19:03:31 +0100148 // Check that source on its own configures the bootImageConfig correctly.
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100149 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
150 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100151
Paul Duffina57835e2021-04-19 13:23:06 +0100152 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000153 checkAndroidBpContents(`
Paul Duffina57835e2021-04-19 13:23:06 +0100154// This is auto-generated. DO NOT EDIT.
155
Spandan Dasa5e26d32024-03-06 14:04:36 +0000156apex_contributions_defaults {
157 name: "mysdk.contributions",
158 contents: [],
159}
160
Paul Duffina57835e2021-04-19 13:23:06 +0100161prebuilt_bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100162 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100163 prefer: false,
164 visibility: ["//visibility:public"],
165 apex_available: ["com.android.art"],
166 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100167 contents: [
168 "core1",
169 "core2",
170 ],
Paul Duffinda286f42021-06-29 11:59:23 +0100171 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100172 annotation_flags: "hiddenapi/annotation-flags.csv",
173 metadata: "hiddenapi/metadata.csv",
174 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100175 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100176 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
177 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100178 },
Paul Duffina57835e2021-04-19 13:23:06 +0100179}
180
181java_import {
Paul Duffin8eb45732022-10-04 19:03:31 +0100182 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100183 prefer: false,
184 visibility: ["//visibility:public"],
185 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000186 jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
Paul Duffin8eb45732022-10-04 19:03:31 +0100187}
188
189java_import {
190 name: "core2",
191 prefer: false,
192 visibility: ["//visibility:public"],
193 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000194 jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100195}
Spandan Dasa5e26d32024-03-06 14:04:36 +0000196
Paul Duffina57835e2021-04-19 13:23:06 +0100197`),
Paul Duffina57835e2021-04-19 13:23:06 +0100198 checkAllCopyRules(`
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100199.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
200.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
201.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
202.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
203.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
204.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000205.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
206.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100207 `),
Spandan Dasa326b322024-09-19 21:02:52 +0000208 snapshotTestPreparer(checkSnapshotWithoutSource, android.GroupFixturePreparers(
209 preparerForSnapshot,
210 // Flag ART prebuilts
211 android.FixtureMergeMockFs(android.MockFS{
212 "apex_contributions/Android.bp": []byte(`
213 apex_contributions {
214 name: "prebuilt_art_contributions",
215 contents: ["prebuilt_com.android.art"],
216 api_domain: "com.android.art",
217 }
218 `)}),
219 android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ART", "prebuilt_art_contributions"),
220 )),
Paul Duffinc8ead412021-06-07 19:28:15 +0100221
222 // Check the behavior of the snapshot without the source.
223 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin8eb45732022-10-04 19:03:31 +0100224 // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
225 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000226 append(
227 []string{
Spandan Das52c01a12024-09-20 01:09:48 +0000228 "out/soong/.intermediates/prebuilts/apex/com.android.art/android_common_com.android.art/deapexer/javalib/core1.jar",
229 "out/soong/.intermediates/prebuilts/apex/com.android.art/android_common_com.android.art/deapexer/javalib/core2.jar",
Jiakai Zhangb8796202023-03-06 19:16:48 +0000230 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
231 },
232 java.ApexBootJarDexJarPaths...,
233 )...,
234 )
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100235 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
236 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffinc8ead412021-06-07 19:28:15 +0100237 }),
238
Paul Duffin7c475152021-06-09 16:17:58 +0100239 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100240
241 // Check the behavior of the snapshot when the source is preferred.
242 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100243 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
244 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100245 }),
246
Paul Duffin7c475152021-06-09 16:17:58 +0100247 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100248
249 // Check the behavior of the snapshot when it is preferred.
250 snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100251 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
252 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100253 }),
Paul Duffina57835e2021-04-19 13:23:06 +0100254 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100255
Paul Duffin8eb45732022-10-04 19:03:31 +0100256 // Make sure that the boot jars package check rule includes the dex jars created from the source.
257 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000258 append(
259 []string{
260 "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
261 "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
262 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
263 },
264 java.ApexBootJarDexJarPaths...,
265 )...,
266 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100267}
268
269// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
270// package check rule.
Paul Duffin8eb45732022-10-04 19:03:31 +0100271func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
272 t.Helper()
Paul Duffinc8ead412021-06-07 19:28:15 +0100273 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
274 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
275 command := bootJarsCheckRule.RuleParams.Command
Paul Duffin8eb45732022-10-04 19:03:31 +0100276 expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
Paul Duffinc8ead412021-06-07 19:28:15 +0100277 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100278}
279
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000280func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000281 result := android.GroupFixturePreparers(
282 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100283 java.PrepareForTestWithJavaDefaultModules,
284 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100285 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100286 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100287 prepareForSdkTestWithApex,
288
289 // Add a platform_bootclasspath that depends on the fragment.
290 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
291
Colin Crossa66b4632024-08-08 15:50:47 -0700292 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Spandan Das81fe4d12024-05-15 18:43:47 +0000293 // Make sure that we have atleast one platform library so that we can check the monolithic hiddenapi
294 // file creation.
295 java.FixtureConfigureBootJars("platform:foo"),
296 android.FixtureModifyMockFS(func(fs android.MockFS) {
297 fs["platform/Android.bp"] = []byte(`
298 java_library {
299 name: "foo",
300 srcs: ["Test.java"],
301 compile_dex: true,
302 }
303 `)
304 fs["platform/Test.java"] = nil
305 }),
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000306
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000307 android.FixtureWithRootAndroidBp(sdk+`
Paul Duffin7c475152021-06-09 16:17:58 +0100308 apex {
309 name: "myapex",
310 key: "myapex.key",
311 min_sdk_version: "2",
312 bootclasspath_fragments: ["mybootclasspathfragment"],
313 }
314
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100315 bootclasspath_fragment {
316 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100317 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100318 contents: [
319 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
320 "mybootlib",
321 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
322 "myothersdklibrary",
323 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100324 api: {
325 stub_libs: ["mysdklibrary"],
326 },
327 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100328 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100329 stub_libs: ["mycoreplatform"],
330 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100331 hidden_api: {
332 split_packages: ["*"],
333 },
Paul Duffina57835e2021-04-19 13:23:06 +0100334 }
335
336 java_library {
337 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100338 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100339 srcs: ["Test.java"],
340 system_modules: "none",
341 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100342 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100343 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100344 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000345 }
Paul Duffin895c7142021-04-25 13:40:15 +0100346
347 java_sdk_library {
348 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100349 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100350 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100351 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100352 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100353 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000354 sdk_version: "current",
Paul Duffin895c7142021-04-25 13:40:15 +0100355 }
356
357 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100358 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100359 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100360 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100361 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100362 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100363 min_sdk_version: "2",
364 permitted_packages: ["myothersdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000365 sdk_version: "current",
Paul Duffina10bd3c2021-05-12 13:46:54 +0100366 }
367
368 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100369 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100370 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100371 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100372 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100373 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100374 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000375 sdk_version: "current",
Paul Duffin895c7142021-04-25 13:40:15 +0100376 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000377 `),
378 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000379
Paul Duffin7c475152021-06-09 16:17:58 +0100380 // A preparer to update the test fixture used when processing an unpackage snapshot.
381 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
382
Paul Duffin36474d32021-03-12 12:19:43 +0000383 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000384 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000385// This is auto-generated. DO NOT EDIT.
386
Spandan Dasa5e26d32024-03-06 14:04:36 +0000387apex_contributions_defaults {
388 name: "mysdk.contributions",
389 contents: [
390 "prebuilt_myothersdklibrary",
391 "prebuilt_mysdklibrary",
392 "prebuilt_mycoreplatform",
393 ],
394}
395
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100396prebuilt_bootclasspath_fragment {
397 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000398 prefer: false,
399 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100400 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100401 contents: [
402 "mybootlib",
403 "myothersdklibrary",
404 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100405 api: {
406 stub_libs: ["mysdklibrary"],
407 },
408 core_platform_api: {
409 stub_libs: ["mycoreplatform"],
410 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100411 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100412 annotation_flags: "hiddenapi/annotation-flags.csv",
413 metadata: "hiddenapi/metadata.csv",
414 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100415 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100416 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
417 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100418 },
Paul Duffina57835e2021-04-19 13:23:06 +0100419}
420
421java_import {
422 name: "mybootlib",
423 prefer: false,
424 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100425 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000426 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000427 min_sdk_version: "2",
Paul Duffin869de142021-07-15 14:14:41 +0100428 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000429}
Paul Duffin895c7142021-04-25 13:40:15 +0100430
431java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100432 name: "myothersdklibrary",
433 prefer: false,
434 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100435 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100436 shared_library: true,
437 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100438 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100439 public: {
440 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
441 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
442 current_api: "sdk_library/public/myothersdklibrary.txt",
443 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
444 sdk_version: "current",
445 },
446}
447
448java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100449 name: "mysdklibrary",
450 prefer: false,
451 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100452 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100453 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100454 public: {
455 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
456 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
457 current_api: "sdk_library/public/mysdklibrary.txt",
458 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
459 sdk_version: "current",
460 },
461}
462
463java_sdk_library_import {
464 name: "mycoreplatform",
465 prefer: false,
466 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100467 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100468 shared_library: true,
469 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100470 public: {
471 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
472 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
473 current_api: "sdk_library/public/mycoreplatform.txt",
474 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
475 sdk_version: "current",
476 },
477}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100478 `),
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000479 checkAllCopyRules(copyRules),
Paul Duffin7c475152021-06-09 16:17:58 +0100480 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100481 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
482 module := result.ModuleForTests("platform-bootclasspath", "android_common")
483 var rule android.TestingBuildParams
484 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
485 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
486 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
487 out/soong/hiddenapi/hiddenapi-stub-flags.txt
488 snapshot/hiddenapi/annotation-flags.csv
489 `, rule)
490
491 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
492 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
493 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
494 snapshot/hiddenapi/metadata.csv
495 `, rule)
496
497 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
498 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
499 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
500 snapshot/hiddenapi/index.csv
501 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100502
Paul Duffin8d007e92021-07-22 12:00:49 +0100503 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100504 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 +0100505 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100506 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100507 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
508 module := result.ModuleForTests("platform-bootclasspath", "android_common")
509 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100510 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 +0100511 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100512 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
513 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000514}
Paul Duffin04b4a192021-03-18 11:05:31 +0000515
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000516func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
517 t.Run("added-directly", func(t *testing.T) {
518 testSnapshotWithBootClasspathFragment_Contents(t, `
519 sdk {
520 name: "mysdk",
521 bootclasspath_fragments: ["mybootclasspathfragment"],
522 java_sdk_libs: [
523 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
524 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
525 // api.stub_libs property. However, it is specified here to ensure that duplicates are
526 // correctly deduped.
527 "mysdklibrary",
528 ],
529 }
530 `, `
531.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
532.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
533.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
534.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
535.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
536.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000537.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000538.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
539.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
540.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
541.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
542.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
543.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
544.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
545.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
546.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 +0000547`)
548 })
549
550 copyBootclasspathFragmentFromApexVariantRules := `
551.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
552.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
553.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
554.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
555.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
556.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000557.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000558.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
559.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
560.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
561.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
562.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
563.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
564.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
565.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
566.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 +0000567`
568 t.Run("added-via-apex", func(t *testing.T) {
569 testSnapshotWithBootClasspathFragment_Contents(t, `
570 sdk {
571 name: "mysdk",
572 apexes: ["myapex"],
573 }
574 `, copyBootclasspathFragmentFromApexVariantRules)
575 })
576
577 t.Run("added-directly-and-indirectly", func(t *testing.T) {
578 testSnapshotWithBootClasspathFragment_Contents(t, `
579 sdk {
580 name: "mysdk",
581 apexes: ["myapex"],
582 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
583 // a bootclasspath_fragments module because it is used in the myapex's
584 // bootclasspath_fragments property. However, it is specified here to ensure that duplicates
585 // are correctly deduped.
586 bootclasspath_fragments: ["mybootclasspathfragment"],
587 java_sdk_libs: [
588 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
589 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
590 // api.stub_libs property. However, it is specified here to ensure that duplicates are
591 // correctly deduped.
592 "mysdklibrary",
593 ],
594 }
595 `, copyBootclasspathFragmentFromApexVariantRules)
596 })
597}
598
Paul Duffin51227d82021-05-18 12:54:27 +0100599// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
600// bootclasspath_fragment is correctly output to the sdk snapshot.
601func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
602 result := android.GroupFixturePreparers(
603 prepareForSdkTestWithJava,
604 java.PrepareForTestWithJavaDefaultModules,
605 java.PrepareForTestWithJavaSdkLibraryFiles,
606 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100607 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100608 prepareForSdkTestWithApex,
609
610 // Some additional files needed for the myotherapex.
611 android.FixtureMergeMockFs(android.MockFS{
612 "system/sepolicy/apex/myotherapex-file_contexts": nil,
613 "myotherapex/apex_manifest.json": nil,
614 "myotherapex/Test.java": nil,
615 }),
616
617 android.FixtureAddTextFile("myotherapex/Android.bp", `
618 apex {
619 name: "myotherapex",
620 key: "myapex.key",
621 min_sdk_version: "2",
622 bootclasspath_fragments: ["myotherbootclasspathfragment"],
623 }
624
625 bootclasspath_fragment {
626 name: "myotherbootclasspathfragment",
627 apex_available: ["myotherapex"],
628 contents: [
629 "myotherlib",
630 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100631 hidden_api: {
632 split_packages: ["*"],
633 },
Paul Duffin51227d82021-05-18 12:54:27 +0100634 }
635
636 java_library {
637 name: "myotherlib",
638 apex_available: ["myotherapex"],
639 srcs: ["Test.java"],
640 min_sdk_version: "2",
641 permitted_packages: ["myothersdklibrary"],
642 compile_dex: true,
Jihoon Kang85bc1932024-07-01 17:04:46 +0000643 sdk_version: "current",
Paul Duffin51227d82021-05-18 12:54:27 +0100644 }
645 `),
646
647 android.FixtureWithRootAndroidBp(`
648 sdk {
649 name: "mysdk",
650 bootclasspath_fragments: ["mybootclasspathfragment"],
651 }
652
653 bootclasspath_fragment {
654 name: "mybootclasspathfragment",
655 contents: [
656 "mysdklibrary",
657 ],
658 fragments: [
659 {
660 apex: "myotherapex",
661 module: "myotherbootclasspathfragment"
662 },
663 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100664 hidden_api: {
665 split_packages: ["*"],
666 },
Paul Duffin51227d82021-05-18 12:54:27 +0100667 }
668
669 java_sdk_library {
670 name: "mysdklibrary",
671 srcs: ["Test.java"],
672 shared_library: false,
673 public: {enabled: true},
674 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000675 sdk_version: "current",
Paul Duffin51227d82021-05-18 12:54:27 +0100676 }
677 `),
678 ).RunTest(t)
679
680 // A preparer to update the test fixture used when processing an unpackage snapshot.
681 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
682
683 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000684 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100685// This is auto-generated. DO NOT EDIT.
686
Spandan Dasa5e26d32024-03-06 14:04:36 +0000687apex_contributions_defaults {
688 name: "mysdk.contributions",
689 contents: ["prebuilt_mysdklibrary"],
690}
691
Paul Duffin51227d82021-05-18 12:54:27 +0100692prebuilt_bootclasspath_fragment {
693 name: "mybootclasspathfragment",
694 prefer: false,
695 visibility: ["//visibility:public"],
696 apex_available: ["//apex_available:platform"],
697 contents: ["mysdklibrary"],
698 fragments: [
699 {
700 apex: "myotherapex",
701 module: "myotherbootclasspathfragment",
702 },
703 ],
704 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100705 annotation_flags: "hiddenapi/annotation-flags.csv",
706 metadata: "hiddenapi/metadata.csv",
707 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100708 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100709 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
710 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100711 },
712}
713
714java_sdk_library_import {
715 name: "mysdklibrary",
716 prefer: false,
717 visibility: ["//visibility:public"],
718 apex_available: ["//apex_available:platform"],
719 shared_library: false,
720 public: {
721 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
722 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
723 current_api: "sdk_library/public/mysdklibrary.txt",
724 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
725 sdk_version: "current",
726 },
727}
728 `),
729 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
730 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
731 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
732 )
733}
734
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100735// Test that bootclasspath_fragment works with sdk.
736func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000737 android.GroupFixturePreparers(
738 prepareForSdkTestWithApex,
739 prepareForSdkTestWithJava,
Paul Duffin80e7f732022-11-25 12:31:31 +0000740 android.FixtureMergeMockFs(android.MockFS{
741 "java/mybootlib.jar": nil,
742 "hiddenapi/annotation-flags.csv": nil,
743 "hiddenapi/index.csv": nil,
744 "hiddenapi/metadata.csv": nil,
745 "hiddenapi/signature-patterns.csv": nil,
746 "hiddenapi/filtered-stub-flags.csv": nil,
747 "hiddenapi/filtered-flags.csv": nil,
748 }),
Paul Duffin04b4a192021-03-18 11:05:31 +0000749 android.FixtureWithRootAndroidBp(`
750 sdk {
751 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100752 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000753 }
754
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100755 bootclasspath_fragment {
756 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000757 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100758 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000759 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100760 hidden_api: {
761 split_packages: ["*"],
762 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000763 }
764
Paul Duffin8018e502021-05-21 19:28:09 +0100765 java_library {
766 name: "mybootlib",
767 apex_available: ["myapex"],
768 srcs: ["Test.java"],
769 system_modules: "none",
770 sdk_version: "none",
771 min_sdk_version: "1",
772 compile_dex: true,
773 }
774
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100775 prebuilt_bootclasspath_fragment {
Paul Duffin80e7f732022-11-25 12:31:31 +0000776 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000777 prefer: false,
778 visibility: ["//visibility:public"],
779 apex_available: [
780 "myapex",
781 ],
782 image_name: "art",
Paul Duffin80e7f732022-11-25 12:31:31 +0000783 contents: ["mybootlib"],
784 hidden_api: {
785 annotation_flags: "hiddenapi/annotation-flags.csv",
786 metadata: "hiddenapi/metadata.csv",
787 index: "hiddenapi/index.csv",
788 signature_patterns: "hiddenapi/signature-patterns.csv",
789 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
790 filtered_flags: "hiddenapi/filtered-flags.csv",
791 },
Paul Duffin8018e502021-05-21 19:28:09 +0100792 }
793
794 java_import {
Paul Duffin80e7f732022-11-25 12:31:31 +0000795 name: "mybootlib",
Paul Duffin8018e502021-05-21 19:28:09 +0100796 visibility: ["//visibility:public"],
797 apex_available: ["com.android.art"],
798 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000799 }
800 `),
801 ).RunTest(t)
802}
Paul Duffin7c955552021-04-19 13:23:53 +0100803
804func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
805 result := android.GroupFixturePreparers(
806 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100807 java.PrepareForTestWithJavaDefaultModules,
808 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000809 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
810 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100811 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100812
813 // Add a platform_bootclasspath that depends on the fragment.
814 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
815
Colin Crossa66b4632024-08-08 15:50:47 -0700816 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000817
Paul Duffin7c955552021-04-19 13:23:53 +0100818 android.MockFS{
819 "my-blocked.txt": nil,
820 "my-max-target-o-low-priority.txt": nil,
821 "my-max-target-p.txt": nil,
822 "my-max-target-q.txt": nil,
823 "my-max-target-r-low-priority.txt": nil,
824 "my-removed.txt": nil,
825 "my-unsupported-packages.txt": nil,
826 "my-unsupported.txt": nil,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000827 "my-new-max-target-q.txt": nil,
Paul Duffin7c955552021-04-19 13:23:53 +0100828 }.AddToFixture(),
829 android.FixtureWithRootAndroidBp(`
830 sdk {
831 name: "mysdk",
832 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100833 }
834
Paul Duffin475daaf2021-05-13 00:57:55 +0100835 apex {
836 name: "myapex",
837 key: "myapex.key",
838 min_sdk_version: "1",
839 bootclasspath_fragments: ["mybootclasspathfragment"],
840 }
841
Paul Duffin7c955552021-04-19 13:23:53 +0100842 bootclasspath_fragment {
843 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100844 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000845 contents: ["mybootlib", "mynewlibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100846 api: {
847 stub_libs: ["mysdklibrary"],
848 },
Paul Duffin7c955552021-04-19 13:23:53 +0100849 hidden_api: {
850 unsupported: [
851 "my-unsupported.txt",
852 ],
853 removed: [
854 "my-removed.txt",
855 ],
856 max_target_r_low_priority: [
857 "my-max-target-r-low-priority.txt",
858 ],
859 max_target_q: [
860 "my-max-target-q.txt",
861 ],
862 max_target_p: [
863 "my-max-target-p.txt",
864 ],
865 max_target_o_low_priority: [
866 "my-max-target-o-low-priority.txt",
867 ],
868 blocked: [
869 "my-blocked.txt",
870 ],
871 unsupported_packages: [
872 "my-unsupported-packages.txt",
873 ],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000874 split_packages: ["sdklibrary"],
875 package_prefixes: ["sdklibrary.all.mine"],
876 single_packages: ["sdklibrary.mine"],
Paul Duffin7c955552021-04-19 13:23:53 +0100877 },
878 }
879
880 java_library {
881 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100882 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100883 srcs: ["Test.java"],
884 system_modules: "none",
885 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100886 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100887 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100888 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100889 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100890
891 java_sdk_library {
892 name: "mysdklibrary",
893 srcs: ["Test.java"],
894 compile_dex: true,
895 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100896 permitted_packages: ["mysdklibrary"],
Spandan Das91455082023-03-02 04:41:35 +0000897 min_sdk_version: "current",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000898 sdk_version: "current",
Paul Duffin475daaf2021-05-13 00:57:55 +0100899 }
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000900
901 java_sdk_library {
902 name: "mynewlibrary",
903 apex_available: ["myapex"],
904 srcs: ["Test.java"],
905 min_sdk_version: "10",
906 compile_dex: true,
907 public: {enabled: true},
908 permitted_packages: ["mysdklibrary"],
909 hidden_api: {
910 max_target_q: [
911 "my-new-max-target-q.txt",
912 ],
913 split_packages: ["sdklibrary", "newlibrary"],
914 package_prefixes: ["newlibrary.all.mine"],
915 single_packages: ["newlibrary.mine"],
916 },
Jihoon Kang85bc1932024-07-01 17:04:46 +0000917 sdk_version: "current",
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000918 }
Paul Duffin7c955552021-04-19 13:23:53 +0100919 `),
920 ).RunTest(t)
921
Paul Duffin7c475152021-06-09 16:17:58 +0100922 // A preparer to update the test fixture used when processing an unpackage snapshot.
923 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
924
Paul Duffin7c955552021-04-19 13:23:53 +0100925 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000926 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100927// This is auto-generated. DO NOT EDIT.
928
Spandan Dasa5e26d32024-03-06 14:04:36 +0000929apex_contributions_defaults {
930 name: "mysdk.contributions",
931 contents: [
932 "prebuilt_mynewlibrary",
933 "prebuilt_mysdklibrary",
934 ],
935}
936
Paul Duffin7c955552021-04-19 13:23:53 +0100937prebuilt_bootclasspath_fragment {
938 name: "mybootclasspathfragment",
939 prefer: false,
940 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100941 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000942 contents: [
943 "mybootlib",
944 "mynewlibrary",
945 ],
Paul Duffin475daaf2021-05-13 00:57:55 +0100946 api: {
947 stub_libs: ["mysdklibrary"],
948 },
Paul Duffin7c955552021-04-19 13:23:53 +0100949 hidden_api: {
950 unsupported: ["hiddenapi/my-unsupported.txt"],
951 removed: ["hiddenapi/my-removed.txt"],
952 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000953 max_target_q: [
954 "hiddenapi/my-max-target-q.txt",
955 "hiddenapi/my-new-max-target-q.txt",
956 ],
Paul Duffin7c955552021-04-19 13:23:53 +0100957 max_target_p: ["hiddenapi/my-max-target-p.txt"],
958 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
959 blocked: ["hiddenapi/my-blocked.txt"],
960 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100961 annotation_flags: "hiddenapi/annotation-flags.csv",
962 metadata: "hiddenapi/metadata.csv",
963 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100964 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100965 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
966 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100967 },
968}
969
970java_import {
971 name: "mybootlib",
972 prefer: false,
973 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100974 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000975 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000976 min_sdk_version: "1",
Paul Duffin869de142021-07-15 14:14:41 +0100977 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100978}
Paul Duffin475daaf2021-05-13 00:57:55 +0100979
980java_sdk_library_import {
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000981 name: "mynewlibrary",
982 prefer: false,
983 visibility: ["//visibility:public"],
984 apex_available: ["myapex"],
985 shared_library: true,
986 compile_dex: true,
987 permitted_packages: ["mysdklibrary"],
988 public: {
989 jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
990 stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
991 current_api: "sdk_library/public/mynewlibrary.txt",
992 removed_api: "sdk_library/public/mynewlibrary-removed.txt",
993 sdk_version: "current",
994 },
995}
996
997java_sdk_library_import {
Paul Duffin475daaf2021-05-13 00:57:55 +0100998 name: "mysdklibrary",
999 prefer: false,
1000 visibility: ["//visibility:public"],
1001 apex_available: ["//apex_available:platform"],
1002 shared_library: true,
1003 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +01001004 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +01001005 public: {
1006 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1007 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1008 current_api: "sdk_library/public/mysdklibrary.txt",
1009 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1010 sdk_version: "current",
1011 },
1012}
Paul Duffin7c955552021-04-19 13:23:53 +01001013`),
1014 checkAllCopyRules(`
1015my-unsupported.txt -> hiddenapi/my-unsupported.txt
1016my-removed.txt -> hiddenapi/my-removed.txt
1017my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
1018my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
Paul Duffin3f1ae0b2022-07-27 16:27:42 +00001019my-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
Paul Duffin7c955552021-04-19 13:23:53 +01001020my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
1021my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
1022my-blocked.txt -> hiddenapi/my-blocked.txt
1023my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +01001024.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1025.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1026.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +01001027.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +01001028.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1029.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +00001030.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001031.intermediates/mynewlibrary.stubs.exportable/android_common/combined/mynewlibrary.stubs.exportable.jar -> sdk_library/public/mynewlibrary-stubs.jar
1032.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
1033.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
1034.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1035.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1036.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 +01001037`),
Paul Duffin7c475152021-06-09 16:17:58 +01001038 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
1039 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
1040 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +01001041 )
1042}
Paul Duffin1938dba2022-07-26 23:53:00 +00001043
1044func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
1045 expectedSdkSnapshot string,
1046 expectedCopyRules string,
1047 expectedStubFlagsInputs []string,
1048 suffix string) {
1049
1050 result := android.GroupFixturePreparers(
1051 prepareForSdkTestWithJava,
1052 java.PrepareForTestWithJavaDefaultModules,
1053 java.PrepareForTestWithJavaSdkLibraryFiles,
1054 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1055 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1056 prepareForSdkTestWithApex,
1057
1058 // Add a platform_bootclasspath that depends on the fragment.
1059 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1060
1061 android.FixtureMergeEnv(map[string]string{
1062 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
1063 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001064 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1065 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1066 }),
Paul Duffin1938dba2022-07-26 23:53:00 +00001067
Colin Crossa66b4632024-08-08 15:50:47 -07001068 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kangbd093452023-12-26 19:08:01 +00001069
Paul Duffin1938dba2022-07-26 23:53:00 +00001070 android.FixtureWithRootAndroidBp(`
1071 sdk {
1072 name: "mysdk",
1073 apexes: ["myapex"],
1074 }
1075
1076 apex {
1077 name: "myapex",
1078 key: "myapex.key",
1079 min_sdk_version: "S",
1080 bootclasspath_fragments: ["mybootclasspathfragment"],
1081 }
1082
1083 bootclasspath_fragment {
1084 name: "mybootclasspathfragment",
1085 apex_available: ["myapex"],
1086 contents: [
1087 "mysdklibrary",
1088 "mynewsdklibrary",
1089 ],
1090
1091 hidden_api: {
1092 split_packages: [],
1093 },
1094 }
1095
1096 java_sdk_library {
1097 name: "mysdklibrary",
1098 apex_available: ["myapex"],
1099 srcs: ["Test.java"],
1100 shared_library: false,
1101 public: {enabled: true},
1102 min_sdk_version: "S",
Jihoon Kang85bc1932024-07-01 17:04:46 +00001103 sdk_version: "current",
Paul Duffin1938dba2022-07-26 23:53:00 +00001104 }
1105
1106 java_sdk_library {
1107 name: "mynewsdklibrary",
1108 apex_available: ["myapex"],
1109 srcs: ["Test.java"],
1110 compile_dex: true,
1111 public: {enabled: true},
1112 min_sdk_version: "Tiramisu",
1113 permitted_packages: ["mynewsdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +00001114 sdk_version: "current",
Paul Duffin1938dba2022-07-26 23:53:00 +00001115 }
1116 `),
1117 ).RunTest(t)
1118
1119 bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1120 rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
Jihoon Kanga3a05462024-04-05 00:36:44 +00001121 android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", android.SortedUniqueStrings(expectedStubFlagsInputs), android.SortedUniquePaths(rule.Implicits))
Paul Duffin1938dba2022-07-26 23:53:00 +00001122
1123 CheckSnapshot(t, result, "mysdk", "",
1124 checkAndroidBpContents(expectedSdkSnapshot),
1125 checkAllCopyRules(expectedCopyRules),
1126 )
1127}
1128
1129func TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1130 t.Run("target S build", func(t *testing.T) {
1131 expectedSnapshot := `
1132// This is auto-generated. DO NOT EDIT.
1133
1134prebuilt_bootclasspath_fragment {
1135 name: "mybootclasspathfragment",
1136 prefer: false,
1137 visibility: ["//visibility:public"],
1138 apex_available: ["myapex"],
1139 contents: ["mysdklibrary"],
1140 hidden_api: {
1141 annotation_flags: "hiddenapi/annotation-flags.csv",
1142 metadata: "hiddenapi/metadata.csv",
1143 index: "hiddenapi/index.csv",
1144 stub_flags: "hiddenapi/stub-flags.csv",
1145 all_flags: "hiddenapi/all-flags.csv",
1146 },
1147}
1148
1149java_sdk_library_import {
1150 name: "mysdklibrary",
1151 prefer: false,
1152 visibility: ["//visibility:public"],
1153 apex_available: ["myapex"],
1154 shared_library: false,
1155 public: {
1156 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1157 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1158 current_api: "sdk_library/public/mysdklibrary.txt",
1159 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1160 sdk_version: "current",
1161 },
1162}
1163`
1164 expectedCopyRules := `
1165.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1166.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1167.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1168.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1169.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001170.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1171.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1172.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 +00001173`
1174
1175 // On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1176 // of the snapshot.
1177 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001178 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001179 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001180 }
1181
1182 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1183 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1184 })
1185
1186 t.Run("target-Tiramisu-build", func(t *testing.T) {
1187 expectedSnapshot := `
1188// This is auto-generated. DO NOT EDIT.
1189
1190prebuilt_bootclasspath_fragment {
1191 name: "mybootclasspathfragment",
1192 prefer: false,
1193 visibility: ["//visibility:public"],
1194 apex_available: ["myapex"],
1195 contents: [
1196 "mysdklibrary",
1197 "mynewsdklibrary",
1198 ],
1199 hidden_api: {
1200 annotation_flags: "hiddenapi/annotation-flags.csv",
1201 metadata: "hiddenapi/metadata.csv",
1202 index: "hiddenapi/index.csv",
1203 signature_patterns: "hiddenapi/signature-patterns.csv",
1204 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1205 filtered_flags: "hiddenapi/filtered-flags.csv",
1206 },
1207}
1208
1209java_sdk_library_import {
1210 name: "mysdklibrary",
1211 prefer: false,
1212 visibility: ["//visibility:public"],
1213 apex_available: ["myapex"],
1214 shared_library: false,
1215 public: {
1216 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1217 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1218 current_api: "sdk_library/public/mysdklibrary.txt",
1219 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1220 sdk_version: "current",
1221 },
1222}
1223
1224java_sdk_library_import {
1225 name: "mynewsdklibrary",
1226 prefer: false,
1227 visibility: ["//visibility:public"],
1228 apex_available: ["myapex"],
1229 shared_library: true,
1230 compile_dex: true,
1231 permitted_packages: ["mynewsdklibrary"],
1232 public: {
1233 jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1234 stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1235 current_api: "sdk_library/public/mynewsdklibrary.txt",
1236 removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1237 sdk_version: "current",
1238 },
1239}
1240`
1241 expectedCopyRules := `
1242.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1243.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1244.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1245.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1246.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1247.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001248.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1249.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1250.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1251.intermediates/mynewsdklibrary.stubs.exportable/android_common/combined/mynewsdklibrary.stubs.exportable.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
1252.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1253.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 +00001254`
1255
1256 // On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1257 // they are both part of the snapshot.
1258 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001259 "out/soong/.intermediates/mynewsdklibrary.stubs.exportable/android_common/dex/mynewsdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001260 "out/soong/.intermediates/mynewsdklibrary.impl/android_common/aligned/mynewsdklibrary.jar",
Jihoon Kangbd093452023-12-26 19:08:01 +00001261 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001262 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001263 }
1264
1265 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1266 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1267 })
1268}
Sam Delmerico35881362023-06-30 14:40:10 -04001269
1270func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) {
1271 result := android.GroupFixturePreparers(
1272 prepareForSdkTestWithJava,
1273 java.PrepareForTestWithJavaDefaultModules,
1274 java.PrepareForTestWithJavaSdkLibraryFiles,
1275 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1276 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1277 prepareForSdkTestWithApex,
1278 // Add a platform_bootclasspath that depends on the fragment.
1279 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1280 android.FixtureMergeEnv(map[string]string{
1281 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
1282 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001283 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1284 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1285 }),
Sam Delmerico35881362023-06-30 14:40:10 -04001286 android.FixtureWithRootAndroidBp(`
1287 sdk {
1288 name: "mysdk",
1289 apexes: ["myapex"],
1290 }
1291 apex {
1292 name: "myapex",
1293 key: "myapex.key",
1294 min_sdk_version: "S",
1295 bootclasspath_fragments: ["mybootclasspathfragment"],
1296 }
1297 bootclasspath_fragment {
1298 name: "mybootclasspathfragment",
1299 apex_available: ["myapex"],
1300 contents: ["mysdklibrary", "mynewsdklibrary"],
1301 hidden_api: {
1302 split_packages: [],
1303 },
1304 }
1305 java_sdk_library {
1306 name: "mysdklibrary",
1307 apex_available: ["myapex"],
1308 srcs: ["Test.java"],
1309 shared_library: false,
1310 public: {enabled: true},
1311 min_sdk_version: "Tiramisu",
Jihoon Kang85bc1932024-07-01 17:04:46 +00001312 sdk_version: "current",
Sam Delmerico35881362023-06-30 14:40:10 -04001313 }
1314 java_sdk_library {
1315 name: "mynewsdklibrary",
1316 apex_available: ["myapex"],
1317 srcs: ["Test.java"],
1318 compile_dex: true,
1319 public: {enabled: true},
1320 min_sdk_version: "Tiramisu",
1321 permitted_packages: ["mynewsdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +00001322 sdk_version: "current",
Sam Delmerico35881362023-06-30 14:40:10 -04001323 }
1324 `),
1325 ).RunTest(t)
1326
1327 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
1328}