blob: 8b994eb64b17d4f852288bcdb692531c913518b0 [file] [log] [blame]
Paul Duffinf7f65da2021-03-10 15:00:46 +00001// Copyright (C) 2021 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package sdk
16
Paul Duffin4a1d4512021-03-18 10:12:26 +000017import (
Paul Duffin7c475152021-06-09 16:17:58 +010018 "fmt"
19 "path/filepath"
Paul Duffin8eb45732022-10-04 19:03:31 +010020 "strings"
Paul Duffin4a1d4512021-03-18 10:12:26 +000021 "testing"
22
23 "android/soong/android"
Paul Duffina57835e2021-04-19 13:23:06 +010024 "android/soong/java"
Paul Duffin4a1d4512021-03-18 10:12:26 +000025)
Paul Duffinf7f65da2021-03-10 15:00:46 +000026
Paul Duffin7c475152021-06-09 16:17:58 +010027// fixtureAddPlatformBootclasspathForBootclasspathFragment adds a platform_bootclasspath module that
28// references the bootclasspath fragment.
29func fixtureAddPlatformBootclasspathForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
Jiakai Zhangb8796202023-03-06 19:16:48 +000030 return fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, "")
31}
32
33// fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra is the same as above, but also adds extra fragments.
34func fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(apex, fragment, extraFragments string) android.FixturePreparer {
Paul Duffin7c475152021-06-09 16:17:58 +010035 return android.GroupFixturePreparers(
36 // Add a platform_bootclasspath module.
37 android.FixtureAddTextFile("frameworks/base/boot/Android.bp", fmt.Sprintf(`
38 platform_bootclasspath {
39 name: "platform-bootclasspath",
40 fragments: [
41 {
42 apex: "%s",
43 module: "%s",
44 },
Jiakai Zhangb8796202023-03-06 19:16:48 +000045 %s
Paul Duffin7c475152021-06-09 16:17:58 +010046 ],
47 }
Jiakai Zhangb8796202023-03-06 19:16:48 +000048 `, apex, fragment, extraFragments)),
Paul Duffin7c475152021-06-09 16:17:58 +010049 android.FixtureAddFile("frameworks/base/config/boot-profile.txt", nil),
Jiakai Zhang49b1eb62021-11-26 18:09:27 +000050 android.FixtureAddFile("frameworks/base/config/boot-image-profile.txt", nil),
Paul Duffinc8ead412021-06-07 19:28:15 +010051 android.FixtureAddFile("build/soong/scripts/check_boot_jars/package_allowed_list.txt", nil),
Paul Duffin7c475152021-06-09 16:17:58 +010052 )
53}
54
55// fixtureAddPrebuiltApexForBootclasspathFragment adds a prebuilt_apex that exports the fragment.
56func fixtureAddPrebuiltApexForBootclasspathFragment(apex, fragment string) android.FixturePreparer {
57 apexFile := fmt.Sprintf("%s.apex", apex)
58 dir := "prebuilts/apex"
59 return android.GroupFixturePreparers(
60 // A preparer to add a prebuilt apex to the test fixture.
61 android.FixtureAddTextFile(filepath.Join(dir, "Android.bp"), fmt.Sprintf(`
62 prebuilt_apex {
63 name: "%s",
64 src: "%s",
65 exported_bootclasspath_fragments: [
66 "%s",
67 ],
68 }
69 `, apex, apexFile, fragment)),
70 android.FixtureAddFile(filepath.Join(dir, apexFile), nil),
71 )
72}
73
Paul Duffina57835e2021-04-19 13:23:06 +010074func TestSnapshotWithBootclasspathFragment_ImageName(t *testing.T) {
75 result := android.GroupFixturePreparers(
76 prepareForSdkTestWithJava,
Jiakai Zhangb95998b2023-05-11 16:39:27 +010077 java.PrepareForTestWithDexpreopt,
Paul Duffina57835e2021-04-19 13:23:06 +010078 prepareForSdkTestWithApex,
79
80 // Some additional files needed for the art apex.
81 android.FixtureMergeMockFs(android.MockFS{
82 "com.android.art.avbpubkey": nil,
83 "com.android.art.pem": nil,
84 "system/sepolicy/apex/com.android.art-file_contexts": nil,
85 }),
Paul Duffin023dba02021-04-22 01:45:29 +010086
Paul Duffin7c475152021-06-09 16:17:58 +010087 // Add a platform_bootclasspath that depends on the fragment.
Jiakai Zhangb8796202023-03-06 19:16:48 +000088 fixtureAddPlatformBootclasspathForBootclasspathFragmentWithExtra(
Jiakai Zhangb69e8952023-07-11 14:31:22 +010089 "com.android.art", "art-bootclasspath-fragment", java.ApexBootJarFragmentsForPlatformBootclasspath),
Paul Duffin023dba02021-04-22 01:45:29 +010090
Paul Duffin8eb45732022-10-04 19:03:31 +010091 java.PrepareForBootImageConfigTest,
Jiakai Zhangb8796202023-03-06 19:16:48 +000092 java.PrepareApexBootJarConfigsAndModules,
Paul Duffina57835e2021-04-19 13:23:06 +010093 android.FixtureWithRootAndroidBp(`
94 sdk {
95 name: "mysdk",
Jiakai Zhangb69e8952023-07-11 14:31:22 +010096 bootclasspath_fragments: ["art-bootclasspath-fragment"],
Paul Duffina57835e2021-04-19 13:23:06 +010097 }
98
99 apex {
100 name: "com.android.art",
101 key: "com.android.art.key",
102 bootclasspath_fragments: [
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100103 "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100104 ],
105 updatable: false,
106 }
107
108 bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100109 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100110 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100111 contents: ["core1", "core2"],
Paul Duffina57835e2021-04-19 13:23:06 +0100112 apex_available: ["com.android.art"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100113 hidden_api: {
114 split_packages: ["*"],
115 },
Paul Duffina57835e2021-04-19 13:23:06 +0100116 }
117
118 apex_key {
119 name: "com.android.art.key",
120 public_key: "com.android.art.avbpubkey",
121 private_key: "com.android.art.pem",
122 }
123
124 java_library {
Paul Duffin8eb45732022-10-04 19:03:31 +0100125 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100126 srcs: ["Test.java"],
127 system_modules: "none",
128 sdk_version: "none",
129 compile_dex: true,
130 apex_available: ["com.android.art"],
131 }
Paul Duffin8eb45732022-10-04 19:03:31 +0100132
133 java_library {
134 name: "core2",
135 srcs: ["Test.java"],
136 system_modules: "none",
137 sdk_version: "none",
138 compile_dex: true,
139 apex_available: ["com.android.art"],
140 }
141`),
Paul Duffina57835e2021-04-19 13:23:06 +0100142 ).RunTest(t)
143
Paul Duffin7c475152021-06-09 16:17:58 +0100144 // A preparer to update the test fixture used when processing an unpackage snapshot.
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100145 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("com.android.art", "art-bootclasspath-fragment")
Paul Duffin023dba02021-04-22 01:45:29 +0100146
Paul Duffin8eb45732022-10-04 19:03:31 +0100147 // Check that source on its own configures the bootImageConfig correctly.
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100148 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
149 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100150
Paul Duffina57835e2021-04-19 13:23:06 +0100151 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000152 checkAndroidBpContents(`
Paul Duffina57835e2021-04-19 13:23:06 +0100153// This is auto-generated. DO NOT EDIT.
154
Spandan Dasa5e26d32024-03-06 14:04:36 +0000155apex_contributions_defaults {
156 name: "mysdk.contributions",
157 contents: [],
158}
159
Paul Duffina57835e2021-04-19 13:23:06 +0100160prebuilt_bootclasspath_fragment {
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100161 name: "art-bootclasspath-fragment",
Paul Duffina57835e2021-04-19 13:23:06 +0100162 prefer: false,
163 visibility: ["//visibility:public"],
164 apex_available: ["com.android.art"],
165 image_name: "art",
Paul Duffin8eb45732022-10-04 19:03:31 +0100166 contents: [
167 "core1",
168 "core2",
169 ],
Paul Duffinda286f42021-06-29 11:59:23 +0100170 hidden_api: {
Paul Duffinda286f42021-06-29 11:59:23 +0100171 annotation_flags: "hiddenapi/annotation-flags.csv",
172 metadata: "hiddenapi/metadata.csv",
173 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100174 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100175 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
176 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffinda286f42021-06-29 11:59:23 +0100177 },
Paul Duffina57835e2021-04-19 13:23:06 +0100178}
179
180java_import {
Paul Duffin8eb45732022-10-04 19:03:31 +0100181 name: "core1",
Paul Duffina57835e2021-04-19 13:23:06 +0100182 prefer: false,
183 visibility: ["//visibility:public"],
184 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000185 jars: ["java_boot_libs/snapshot/jars/are/invalid/core1.jar"],
Paul Duffin8eb45732022-10-04 19:03:31 +0100186}
187
188java_import {
189 name: "core2",
190 prefer: false,
191 visibility: ["//visibility:public"],
192 apex_available: ["com.android.art"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000193 jars: ["java_boot_libs/snapshot/jars/are/invalid/core2.jar"],
Paul Duffina57835e2021-04-19 13:23:06 +0100194}
Spandan Dasa5e26d32024-03-06 14:04:36 +0000195
Paul Duffina57835e2021-04-19 13:23:06 +0100196`),
Paul Duffina57835e2021-04-19 13:23:06 +0100197 checkAllCopyRules(`
Jiakai Zhangb69e8952023-07-11 14:31:22 +0100198.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
199.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
200.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
201.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
202.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
203.intermediates/art-bootclasspath-fragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000204.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core1.jar
205.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/core2.jar
Paul Duffinda286f42021-06-29 11:59:23 +0100206 `),
Paul Duffin7c475152021-06-09 16:17:58 +0100207 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffinc8ead412021-06-07 19:28:15 +0100208
209 // Check the behavior of the snapshot without the source.
210 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
Paul Duffin8eb45732022-10-04 19:03:31 +0100211 // Make sure that the boot jars package check rule includes the dex jars retrieved from the prebuilt apex.
212 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000213 append(
214 []string{
Spandan Das3576e762024-01-03 18:57:03 +0000215 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core1.jar",
216 "out/soong/.intermediates/prebuilts/apex/prebuilt_com.android.art.deapexer/android_common/deapexer/javalib/core2.jar",
Jiakai Zhangb8796202023-03-06 19:16:48 +0000217 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
218 },
219 java.ApexBootJarDexJarPaths...,
220 )...,
221 )
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100222 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
223 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffinc8ead412021-06-07 19:28:15 +0100224 }),
225
Paul Duffin7c475152021-06-09 16:17:58 +0100226 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100227
228 // Check the behavior of the snapshot when the source is preferred.
229 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100230 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
231 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100232 }),
233
Paul Duffin7c475152021-06-09 16:17:58 +0100234 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin8eb45732022-10-04 19:03:31 +0100235
236 // Check the behavior of the snapshot when it is preferred.
237 snapshotTestChecker(checkSnapshotPreferredWithSource, func(t *testing.T, result *android.TestResult) {
Jiakai Zhangcb13b5d2023-07-13 11:03:38 +0100238 java.CheckMutatedArtBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
239 java.CheckMutatedFrameworkBootImageConfig(t, result, "out/soong/.intermediates/default/java/dex_bootjars/android_common/meta_lic")
Paul Duffin8eb45732022-10-04 19:03:31 +0100240 }),
Paul Duffina57835e2021-04-19 13:23:06 +0100241 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100242
Paul Duffin8eb45732022-10-04 19:03:31 +0100243 // Make sure that the boot jars package check rule includes the dex jars created from the source.
244 checkBootJarsPackageCheckRule(t, result,
Jiakai Zhangb8796202023-03-06 19:16:48 +0000245 append(
246 []string{
247 "out/soong/.intermediates/core1/android_common_apex10000/aligned/core1.jar",
248 "out/soong/.intermediates/core2/android_common_apex10000/aligned/core2.jar",
249 "out/soong/.intermediates/default/java/framework/android_common/aligned/framework.jar",
250 },
251 java.ApexBootJarDexJarPaths...,
252 )...,
253 )
Paul Duffinc8ead412021-06-07 19:28:15 +0100254}
255
256// checkBootJarsPackageCheckRule checks that the supplied module is an input to the boot jars
257// package check rule.
Paul Duffin8eb45732022-10-04 19:03:31 +0100258func checkBootJarsPackageCheckRule(t *testing.T, result *android.TestResult, expectedModules ...string) {
259 t.Helper()
Paul Duffinc8ead412021-06-07 19:28:15 +0100260 platformBcp := result.ModuleForTests("platform-bootclasspath", "android_common")
261 bootJarsCheckRule := platformBcp.Rule("boot_jars_package_check")
262 command := bootJarsCheckRule.RuleParams.Command
Paul Duffin8eb45732022-10-04 19:03:31 +0100263 expectedCommandArgs := " build/soong/scripts/check_boot_jars/package_allowed_list.txt " + strings.Join(expectedModules, " ") + " &&"
Paul Duffinc8ead412021-06-07 19:28:15 +0100264 android.AssertStringDoesContain(t, "boot jars package check", command, expectedCommandArgs)
Paul Duffina57835e2021-04-19 13:23:06 +0100265}
266
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000267func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, copyRules string) {
Paul Duffin4a1d4512021-03-18 10:12:26 +0000268 result := android.GroupFixturePreparers(
269 prepareForSdkTestWithJava,
Paul Duffin895c7142021-04-25 13:40:15 +0100270 java.PrepareForTestWithJavaDefaultModules,
271 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100272 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary", "mycoreplatform"),
satayevd604b212021-07-21 14:23:52 +0100273 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:myothersdklibrary"),
Paul Duffin7c475152021-06-09 16:17:58 +0100274 prepareForSdkTestWithApex,
275
276 // Add a platform_bootclasspath that depends on the fragment.
277 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
278
Colin Crossa66b4632024-08-08 15:50:47 -0700279 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Spandan Das81fe4d12024-05-15 18:43:47 +0000280 // Make sure that we have atleast one platform library so that we can check the monolithic hiddenapi
281 // file creation.
282 java.FixtureConfigureBootJars("platform:foo"),
283 android.FixtureModifyMockFS(func(fs android.MockFS) {
284 fs["platform/Android.bp"] = []byte(`
285 java_library {
286 name: "foo",
287 srcs: ["Test.java"],
288 compile_dex: true,
289 }
290 `)
291 fs["platform/Test.java"] = nil
292 }),
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000293
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000294 android.FixtureWithRootAndroidBp(sdk+`
Paul Duffin7c475152021-06-09 16:17:58 +0100295 apex {
296 name: "myapex",
297 key: "myapex.key",
298 min_sdk_version: "2",
299 bootclasspath_fragments: ["mybootclasspathfragment"],
300 }
301
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100302 bootclasspath_fragment {
303 name: "mybootclasspathfragment",
Paul Duffin7c475152021-06-09 16:17:58 +0100304 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100305 contents: [
306 // This should be automatically added to the sdk_snapshot as a java_boot_libs module.
307 "mybootlib",
308 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
309 "myothersdklibrary",
310 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100311 api: {
312 stub_libs: ["mysdklibrary"],
313 },
314 core_platform_api: {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100315 // This should be automatically added to the sdk_snapshot as a java_sdk_libs module.
Paul Duffin895c7142021-04-25 13:40:15 +0100316 stub_libs: ["mycoreplatform"],
317 },
Paul Duffin9fd56472022-03-31 15:42:30 +0100318 hidden_api: {
319 split_packages: ["*"],
320 },
Paul Duffina57835e2021-04-19 13:23:06 +0100321 }
322
323 java_library {
324 name: "mybootlib",
Paul Duffin7c475152021-06-09 16:17:58 +0100325 apex_available: ["myapex"],
Paul Duffina57835e2021-04-19 13:23:06 +0100326 srcs: ["Test.java"],
327 system_modules: "none",
328 sdk_version: "none",
Paul Duffin7c475152021-06-09 16:17:58 +0100329 min_sdk_version: "2",
Paul Duffina57835e2021-04-19 13:23:06 +0100330 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100331 permitted_packages: ["mybootlib"],
Paul Duffin4a1d4512021-03-18 10:12:26 +0000332 }
Paul Duffin895c7142021-04-25 13:40:15 +0100333
334 java_sdk_library {
335 name: "mysdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100336 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100337 srcs: ["Test.java"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100338 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100339 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100340 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000341 sdk_version: "current",
Paul Duffin895c7142021-04-25 13:40:15 +0100342 }
343
344 java_sdk_library {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100345 name: "myothersdklibrary",
Paul Duffin7c475152021-06-09 16:17:58 +0100346 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100347 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100348 compile_dex: true,
Paul Duffina10bd3c2021-05-12 13:46:54 +0100349 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100350 min_sdk_version: "2",
351 permitted_packages: ["myothersdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +0000352 sdk_version: "current",
Paul Duffina10bd3c2021-05-12 13:46:54 +0100353 }
354
355 java_sdk_library {
Paul Duffin895c7142021-04-25 13:40:15 +0100356 name: "mycoreplatform",
Paul Duffin7c475152021-06-09 16:17:58 +0100357 apex_available: ["myapex"],
Paul Duffin895c7142021-04-25 13:40:15 +0100358 srcs: ["Test.java"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100359 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100360 public: {enabled: true},
Paul Duffin7c475152021-06-09 16:17:58 +0100361 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000362 sdk_version: "current",
Paul Duffin895c7142021-04-25 13:40:15 +0100363 }
Paul Duffin4a1d4512021-03-18 10:12:26 +0000364 `),
365 ).RunTest(t)
Paul Duffinf7f65da2021-03-10 15:00:46 +0000366
Paul Duffin7c475152021-06-09 16:17:58 +0100367 // A preparer to update the test fixture used when processing an unpackage snapshot.
368 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
369
Paul Duffin36474d32021-03-12 12:19:43 +0000370 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000371 checkAndroidBpContents(`
Paul Duffinf7f65da2021-03-10 15:00:46 +0000372// This is auto-generated. DO NOT EDIT.
373
Spandan Dasa5e26d32024-03-06 14:04:36 +0000374apex_contributions_defaults {
375 name: "mysdk.contributions",
376 contents: [
377 "prebuilt_myothersdklibrary",
378 "prebuilt_mysdklibrary",
379 "prebuilt_mycoreplatform",
380 ],
381}
382
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100383prebuilt_bootclasspath_fragment {
384 name: "mybootclasspathfragment",
Paul Duffinf7f65da2021-03-10 15:00:46 +0000385 prefer: false,
386 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100387 apex_available: ["myapex"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100388 contents: [
389 "mybootlib",
390 "myothersdklibrary",
391 ],
Paul Duffin895c7142021-04-25 13:40:15 +0100392 api: {
393 stub_libs: ["mysdklibrary"],
394 },
395 core_platform_api: {
396 stub_libs: ["mycoreplatform"],
397 },
Paul Duffin2fef1362021-04-15 13:32:00 +0100398 hidden_api: {
Paul Duffin2fef1362021-04-15 13:32:00 +0100399 annotation_flags: "hiddenapi/annotation-flags.csv",
400 metadata: "hiddenapi/metadata.csv",
401 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100402 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100403 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
404 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin2fef1362021-04-15 13:32:00 +0100405 },
Paul Duffina57835e2021-04-19 13:23:06 +0100406}
407
408java_import {
409 name: "mybootlib",
410 prefer: false,
411 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100412 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000413 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000414 min_sdk_version: "2",
Paul Duffin869de142021-07-15 14:14:41 +0100415 permitted_packages: ["mybootlib"],
Paul Duffinf7f65da2021-03-10 15:00:46 +0000416}
Paul Duffin895c7142021-04-25 13:40:15 +0100417
418java_sdk_library_import {
Paul Duffina10bd3c2021-05-12 13:46:54 +0100419 name: "myothersdklibrary",
420 prefer: false,
421 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100422 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100423 shared_library: true,
424 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100425 permitted_packages: ["myothersdklibrary"],
Paul Duffina10bd3c2021-05-12 13:46:54 +0100426 public: {
427 jars: ["sdk_library/public/myothersdklibrary-stubs.jar"],
428 stub_srcs: ["sdk_library/public/myothersdklibrary_stub_sources"],
429 current_api: "sdk_library/public/myothersdklibrary.txt",
430 removed_api: "sdk_library/public/myothersdklibrary-removed.txt",
431 sdk_version: "current",
432 },
433}
434
435java_sdk_library_import {
Paul Duffin895c7142021-04-25 13:40:15 +0100436 name: "mysdklibrary",
437 prefer: false,
438 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100439 apex_available: ["myapex"],
Paul Duffinf4600f62021-05-13 22:34:45 +0100440 shared_library: false,
Paul Duffin895c7142021-04-25 13:40:15 +0100441 public: {
442 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
443 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
444 current_api: "sdk_library/public/mysdklibrary.txt",
445 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
446 sdk_version: "current",
447 },
448}
449
450java_sdk_library_import {
451 name: "mycoreplatform",
452 prefer: false,
453 visibility: ["//visibility:public"],
Paul Duffin7c475152021-06-09 16:17:58 +0100454 apex_available: ["myapex"],
Paul Duffinea8f8082021-06-24 13:25:57 +0100455 shared_library: true,
456 compile_dex: true,
Paul Duffin895c7142021-04-25 13:40:15 +0100457 public: {
458 jars: ["sdk_library/public/mycoreplatform-stubs.jar"],
459 stub_srcs: ["sdk_library/public/mycoreplatform_stub_sources"],
460 current_api: "sdk_library/public/mycoreplatform.txt",
461 removed_api: "sdk_library/public/mycoreplatform-removed.txt",
462 sdk_version: "current",
463 },
464}
Paul Duffina10bd3c2021-05-12 13:46:54 +0100465 `),
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000466 checkAllCopyRules(copyRules),
Paul Duffin7c475152021-06-09 16:17:58 +0100467 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
Paul Duffind061d402021-06-07 21:36:01 +0100468 snapshotTestChecker(checkSnapshotWithoutSource, func(t *testing.T, result *android.TestResult) {
469 module := result.ModuleForTests("platform-bootclasspath", "android_common")
470 var rule android.TestingBuildParams
471 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv")
472 java.CheckHiddenAPIRuleInputs(t, "monolithic flags", `
473 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/annotation-flags-from-classes.csv
474 out/soong/hiddenapi/hiddenapi-stub-flags.txt
475 snapshot/hiddenapi/annotation-flags.csv
476 `, rule)
477
478 rule = module.Output("out/soong/hiddenapi/hiddenapi-unsupported.csv")
479 java.CheckHiddenAPIRuleInputs(t, "monolithic metadata", `
480 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/metadata-from-classes.csv
481 snapshot/hiddenapi/metadata.csv
482 `, rule)
483
484 rule = module.Output("out/soong/hiddenapi/hiddenapi-index.csv")
485 java.CheckHiddenAPIRuleInputs(t, "monolithic index", `
486 out/soong/.intermediates/frameworks/base/boot/platform-bootclasspath/android_common/hiddenapi-monolithic/index-from-classes.csv
487 snapshot/hiddenapi/index.csv
488 `, rule)
Paul Duffin630b11e2021-07-15 13:35:26 +0100489
Paul Duffin8d007e92021-07-22 12:00:49 +0100490 rule = module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100491 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 +0100492 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100493 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
Paul Duffin8d007e92021-07-22 12:00:49 +0100494 snapshotTestChecker(checkSnapshotWithSourcePreferred, func(t *testing.T, result *android.TestResult) {
495 module := result.ModuleForTests("platform-bootclasspath", "android_common")
496 rule := module.Output("out/soong/hiddenapi/hiddenapi-flags.csv.valid")
Paul Duffin280bae62021-07-20 18:03:53 +0100497 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 +0100498 }),
Paul Duffin7c475152021-06-09 16:17:58 +0100499 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
500 )
Paul Duffinf7f65da2021-03-10 15:00:46 +0000501}
Paul Duffin04b4a192021-03-18 11:05:31 +0000502
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000503func TestSnapshotWithBootClasspathFragment_Contents(t *testing.T) {
504 t.Run("added-directly", func(t *testing.T) {
505 testSnapshotWithBootClasspathFragment_Contents(t, `
506 sdk {
507 name: "mysdk",
508 bootclasspath_fragments: ["mybootclasspathfragment"],
509 java_sdk_libs: [
510 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
511 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
512 // api.stub_libs property. However, it is specified here to ensure that duplicates are
513 // correctly deduped.
514 "mysdklibrary",
515 ],
516 }
517 `, `
518.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
519.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
520.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
521.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
522.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
523.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000524.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000525.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
526.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
527.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
528.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
529.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
530.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
531.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
532.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
533.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 +0000534`)
535 })
536
537 copyBootclasspathFragmentFromApexVariantRules := `
538.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
539.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
540.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
541.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
542.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
543.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000544.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000545.intermediates/myothersdklibrary.stubs.exportable/android_common/combined/myothersdklibrary.stubs.exportable.jar -> sdk_library/public/myothersdklibrary-stubs.jar
546.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_api.txt -> sdk_library/public/myothersdklibrary.txt
547.intermediates/myothersdklibrary.stubs.source/android_common/exportable/myothersdklibrary.stubs.source_removed.txt -> sdk_library/public/myothersdklibrary-removed.txt
548.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
549.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
550.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
551.intermediates/mycoreplatform.stubs.exportable/android_common/combined/mycoreplatform.stubs.exportable.jar -> sdk_library/public/mycoreplatform-stubs.jar
552.intermediates/mycoreplatform.stubs.source/android_common/exportable/mycoreplatform.stubs.source_api.txt -> sdk_library/public/mycoreplatform.txt
553.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 +0000554`
555 t.Run("added-via-apex", func(t *testing.T) {
556 testSnapshotWithBootClasspathFragment_Contents(t, `
557 sdk {
558 name: "mysdk",
559 apexes: ["myapex"],
560 }
561 `, copyBootclasspathFragmentFromApexVariantRules)
562 })
563
564 t.Run("added-directly-and-indirectly", func(t *testing.T) {
565 testSnapshotWithBootClasspathFragment_Contents(t, `
566 sdk {
567 name: "mysdk",
568 apexes: ["myapex"],
569 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
570 // a bootclasspath_fragments module because it is used in the myapex's
571 // bootclasspath_fragments property. However, it is specified here to ensure that duplicates
572 // are correctly deduped.
573 bootclasspath_fragments: ["mybootclasspathfragment"],
574 java_sdk_libs: [
575 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
576 // a java_sdk_libs module because it is used in the mybootclasspathfragment's
577 // api.stub_libs property. However, it is specified here to ensure that duplicates are
578 // correctly deduped.
579 "mysdklibrary",
580 ],
581 }
582 `, copyBootclasspathFragmentFromApexVariantRules)
583 })
584}
585
Paul Duffin51227d82021-05-18 12:54:27 +0100586// TestSnapshotWithBootClasspathFragment_Fragments makes sure that the fragments property of a
587// bootclasspath_fragment is correctly output to the sdk snapshot.
588func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) {
589 result := android.GroupFixturePreparers(
590 prepareForSdkTestWithJava,
591 java.PrepareForTestWithJavaDefaultModules,
592 java.PrepareForTestWithJavaSdkLibraryFiles,
593 java.FixtureWithLastReleaseApis("mysdklibrary", "myothersdklibrary"),
satayevabcd5972021-08-06 17:49:46 +0100594 java.FixtureConfigureApexBootJars("someapex:mysdklibrary", "myotherapex:myotherlib"),
Paul Duffin51227d82021-05-18 12:54:27 +0100595 prepareForSdkTestWithApex,
596
597 // Some additional files needed for the myotherapex.
598 android.FixtureMergeMockFs(android.MockFS{
599 "system/sepolicy/apex/myotherapex-file_contexts": nil,
600 "myotherapex/apex_manifest.json": nil,
601 "myotherapex/Test.java": nil,
602 }),
603
604 android.FixtureAddTextFile("myotherapex/Android.bp", `
605 apex {
606 name: "myotherapex",
607 key: "myapex.key",
608 min_sdk_version: "2",
609 bootclasspath_fragments: ["myotherbootclasspathfragment"],
610 }
611
612 bootclasspath_fragment {
613 name: "myotherbootclasspathfragment",
614 apex_available: ["myotherapex"],
615 contents: [
616 "myotherlib",
617 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100618 hidden_api: {
619 split_packages: ["*"],
620 },
Paul Duffin51227d82021-05-18 12:54:27 +0100621 }
622
623 java_library {
624 name: "myotherlib",
625 apex_available: ["myotherapex"],
626 srcs: ["Test.java"],
627 min_sdk_version: "2",
628 permitted_packages: ["myothersdklibrary"],
629 compile_dex: true,
Jihoon Kang85bc1932024-07-01 17:04:46 +0000630 sdk_version: "current",
Paul Duffin51227d82021-05-18 12:54:27 +0100631 }
632 `),
633
634 android.FixtureWithRootAndroidBp(`
635 sdk {
636 name: "mysdk",
637 bootclasspath_fragments: ["mybootclasspathfragment"],
638 }
639
640 bootclasspath_fragment {
641 name: "mybootclasspathfragment",
642 contents: [
643 "mysdklibrary",
644 ],
645 fragments: [
646 {
647 apex: "myotherapex",
648 module: "myotherbootclasspathfragment"
649 },
650 ],
Paul Duffin9fd56472022-03-31 15:42:30 +0100651 hidden_api: {
652 split_packages: ["*"],
653 },
Paul Duffin51227d82021-05-18 12:54:27 +0100654 }
655
656 java_sdk_library {
657 name: "mysdklibrary",
658 srcs: ["Test.java"],
659 shared_library: false,
660 public: {enabled: true},
661 min_sdk_version: "2",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000662 sdk_version: "current",
Paul Duffin51227d82021-05-18 12:54:27 +0100663 }
664 `),
665 ).RunTest(t)
666
667 // A preparer to update the test fixture used when processing an unpackage snapshot.
668 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
669
670 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000671 checkAndroidBpContents(`
Paul Duffin51227d82021-05-18 12:54:27 +0100672// This is auto-generated. DO NOT EDIT.
673
Spandan Dasa5e26d32024-03-06 14:04:36 +0000674apex_contributions_defaults {
675 name: "mysdk.contributions",
676 contents: ["prebuilt_mysdklibrary"],
677}
678
Paul Duffin51227d82021-05-18 12:54:27 +0100679prebuilt_bootclasspath_fragment {
680 name: "mybootclasspathfragment",
681 prefer: false,
682 visibility: ["//visibility:public"],
683 apex_available: ["//apex_available:platform"],
684 contents: ["mysdklibrary"],
685 fragments: [
686 {
687 apex: "myotherapex",
688 module: "myotherbootclasspathfragment",
689 },
690 ],
691 hidden_api: {
Paul Duffin51227d82021-05-18 12:54:27 +0100692 annotation_flags: "hiddenapi/annotation-flags.csv",
693 metadata: "hiddenapi/metadata.csv",
694 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100695 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100696 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
697 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin51227d82021-05-18 12:54:27 +0100698 },
699}
700
701java_sdk_library_import {
702 name: "mysdklibrary",
703 prefer: false,
704 visibility: ["//visibility:public"],
705 apex_available: ["//apex_available:platform"],
706 shared_library: false,
707 public: {
708 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
709 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
710 current_api: "sdk_library/public/mysdklibrary.txt",
711 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
712 sdk_version: "current",
713 },
714}
715 `),
716 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
717 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
718 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
719 )
720}
721
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100722// Test that bootclasspath_fragment works with sdk.
723func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
Paul Duffin04b4a192021-03-18 11:05:31 +0000724 android.GroupFixturePreparers(
725 prepareForSdkTestWithApex,
726 prepareForSdkTestWithJava,
Paul Duffin80e7f732022-11-25 12:31:31 +0000727 android.FixtureMergeMockFs(android.MockFS{
728 "java/mybootlib.jar": nil,
729 "hiddenapi/annotation-flags.csv": nil,
730 "hiddenapi/index.csv": nil,
731 "hiddenapi/metadata.csv": nil,
732 "hiddenapi/signature-patterns.csv": nil,
733 "hiddenapi/filtered-stub-flags.csv": nil,
734 "hiddenapi/filtered-flags.csv": nil,
735 }),
Paul Duffin04b4a192021-03-18 11:05:31 +0000736 android.FixtureWithRootAndroidBp(`
737 sdk {
738 name: "mysdk",
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100739 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000740 }
741
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100742 bootclasspath_fragment {
743 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000744 image_name: "art",
Paul Duffin8018e502021-05-21 19:28:09 +0100745 contents: ["mybootlib"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000746 apex_available: ["myapex"],
Paul Duffin9fd56472022-03-31 15:42:30 +0100747 hidden_api: {
748 split_packages: ["*"],
749 },
Paul Duffin04b4a192021-03-18 11:05:31 +0000750 }
751
Paul Duffin8018e502021-05-21 19:28:09 +0100752 java_library {
753 name: "mybootlib",
754 apex_available: ["myapex"],
755 srcs: ["Test.java"],
756 system_modules: "none",
757 sdk_version: "none",
758 min_sdk_version: "1",
759 compile_dex: true,
760 }
761
Paul Duffin0b28a8d2021-04-21 23:38:34 +0100762 prebuilt_bootclasspath_fragment {
Paul Duffin80e7f732022-11-25 12:31:31 +0000763 name: "mybootclasspathfragment",
Paul Duffin04b4a192021-03-18 11:05:31 +0000764 prefer: false,
765 visibility: ["//visibility:public"],
766 apex_available: [
767 "myapex",
768 ],
769 image_name: "art",
Paul Duffin80e7f732022-11-25 12:31:31 +0000770 contents: ["mybootlib"],
771 hidden_api: {
772 annotation_flags: "hiddenapi/annotation-flags.csv",
773 metadata: "hiddenapi/metadata.csv",
774 index: "hiddenapi/index.csv",
775 signature_patterns: "hiddenapi/signature-patterns.csv",
776 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
777 filtered_flags: "hiddenapi/filtered-flags.csv",
778 },
Paul Duffin8018e502021-05-21 19:28:09 +0100779 }
780
781 java_import {
Paul Duffin80e7f732022-11-25 12:31:31 +0000782 name: "mybootlib",
Paul Duffin8018e502021-05-21 19:28:09 +0100783 visibility: ["//visibility:public"],
784 apex_available: ["com.android.art"],
785 jars: ["java/mybootlib.jar"],
Paul Duffin04b4a192021-03-18 11:05:31 +0000786 }
787 `),
788 ).RunTest(t)
789}
Paul Duffin7c955552021-04-19 13:23:53 +0100790
791func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) {
792 result := android.GroupFixturePreparers(
793 prepareForSdkTestWithJava,
Paul Duffin475daaf2021-05-13 00:57:55 +0100794 java.PrepareForTestWithJavaDefaultModules,
795 java.PrepareForTestWithJavaSdkLibraryFiles,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000796 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewlibrary"),
797 java.FixtureConfigureApexBootJars("myapex:mybootlib", "myapex:mynewlibrary"),
Paul Duffin475daaf2021-05-13 00:57:55 +0100798 prepareForSdkTestWithApex,
Paul Duffin7c475152021-06-09 16:17:58 +0100799
800 // Add a platform_bootclasspath that depends on the fragment.
801 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
802
Colin Crossa66b4632024-08-08 15:50:47 -0700803 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kangf55a5f72024-01-08 08:56:20 +0000804
Paul Duffin7c955552021-04-19 13:23:53 +0100805 android.MockFS{
806 "my-blocked.txt": nil,
807 "my-max-target-o-low-priority.txt": nil,
808 "my-max-target-p.txt": nil,
809 "my-max-target-q.txt": nil,
810 "my-max-target-r-low-priority.txt": nil,
811 "my-removed.txt": nil,
812 "my-unsupported-packages.txt": nil,
813 "my-unsupported.txt": nil,
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000814 "my-new-max-target-q.txt": nil,
Paul Duffin7c955552021-04-19 13:23:53 +0100815 }.AddToFixture(),
816 android.FixtureWithRootAndroidBp(`
817 sdk {
818 name: "mysdk",
819 bootclasspath_fragments: ["mybootclasspathfragment"],
Paul Duffin7c955552021-04-19 13:23:53 +0100820 }
821
Paul Duffin475daaf2021-05-13 00:57:55 +0100822 apex {
823 name: "myapex",
824 key: "myapex.key",
825 min_sdk_version: "1",
826 bootclasspath_fragments: ["mybootclasspathfragment"],
827 }
828
Paul Duffin7c955552021-04-19 13:23:53 +0100829 bootclasspath_fragment {
830 name: "mybootclasspathfragment",
Paul Duffin475daaf2021-05-13 00:57:55 +0100831 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000832 contents: ["mybootlib", "mynewlibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100833 api: {
834 stub_libs: ["mysdklibrary"],
835 },
Paul Duffin7c955552021-04-19 13:23:53 +0100836 hidden_api: {
837 unsupported: [
838 "my-unsupported.txt",
839 ],
840 removed: [
841 "my-removed.txt",
842 ],
843 max_target_r_low_priority: [
844 "my-max-target-r-low-priority.txt",
845 ],
846 max_target_q: [
847 "my-max-target-q.txt",
848 ],
849 max_target_p: [
850 "my-max-target-p.txt",
851 ],
852 max_target_o_low_priority: [
853 "my-max-target-o-low-priority.txt",
854 ],
855 blocked: [
856 "my-blocked.txt",
857 ],
858 unsupported_packages: [
859 "my-unsupported-packages.txt",
860 ],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000861 split_packages: ["sdklibrary"],
862 package_prefixes: ["sdklibrary.all.mine"],
863 single_packages: ["sdklibrary.mine"],
Paul Duffin7c955552021-04-19 13:23:53 +0100864 },
865 }
866
867 java_library {
868 name: "mybootlib",
Paul Duffin475daaf2021-05-13 00:57:55 +0100869 apex_available: ["myapex"],
Paul Duffin7c955552021-04-19 13:23:53 +0100870 srcs: ["Test.java"],
871 system_modules: "none",
872 sdk_version: "none",
Paul Duffin475daaf2021-05-13 00:57:55 +0100873 min_sdk_version: "1",
Paul Duffin7c955552021-04-19 13:23:53 +0100874 compile_dex: true,
Paul Duffin7c475152021-06-09 16:17:58 +0100875 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100876 }
Paul Duffin475daaf2021-05-13 00:57:55 +0100877
878 java_sdk_library {
879 name: "mysdklibrary",
880 srcs: ["Test.java"],
881 compile_dex: true,
882 public: {enabled: true},
Paul Duffin869de142021-07-15 14:14:41 +0100883 permitted_packages: ["mysdklibrary"],
Spandan Das91455082023-03-02 04:41:35 +0000884 min_sdk_version: "current",
Jihoon Kang85bc1932024-07-01 17:04:46 +0000885 sdk_version: "current",
Paul Duffin475daaf2021-05-13 00:57:55 +0100886 }
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000887
888 java_sdk_library {
889 name: "mynewlibrary",
890 apex_available: ["myapex"],
891 srcs: ["Test.java"],
892 min_sdk_version: "10",
893 compile_dex: true,
894 public: {enabled: true},
895 permitted_packages: ["mysdklibrary"],
896 hidden_api: {
897 max_target_q: [
898 "my-new-max-target-q.txt",
899 ],
900 split_packages: ["sdklibrary", "newlibrary"],
901 package_prefixes: ["newlibrary.all.mine"],
902 single_packages: ["newlibrary.mine"],
903 },
Jihoon Kang85bc1932024-07-01 17:04:46 +0000904 sdk_version: "current",
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000905 }
Paul Duffin7c955552021-04-19 13:23:53 +0100906 `),
907 ).RunTest(t)
908
Paul Duffin7c475152021-06-09 16:17:58 +0100909 // A preparer to update the test fixture used when processing an unpackage snapshot.
910 preparerForSnapshot := fixtureAddPrebuiltApexForBootclasspathFragment("myapex", "mybootclasspathfragment")
911
Paul Duffin7c955552021-04-19 13:23:53 +0100912 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinb01ac4b2022-05-24 20:10:05 +0000913 checkAndroidBpContents(`
Paul Duffin7c955552021-04-19 13:23:53 +0100914// This is auto-generated. DO NOT EDIT.
915
Spandan Dasa5e26d32024-03-06 14:04:36 +0000916apex_contributions_defaults {
917 name: "mysdk.contributions",
918 contents: [
919 "prebuilt_mynewlibrary",
920 "prebuilt_mysdklibrary",
921 ],
922}
923
Paul Duffin7c955552021-04-19 13:23:53 +0100924prebuilt_bootclasspath_fragment {
925 name: "mybootclasspathfragment",
926 prefer: false,
927 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100928 apex_available: ["myapex"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000929 contents: [
930 "mybootlib",
931 "mynewlibrary",
932 ],
Paul Duffin475daaf2021-05-13 00:57:55 +0100933 api: {
934 stub_libs: ["mysdklibrary"],
935 },
Paul Duffin7c955552021-04-19 13:23:53 +0100936 hidden_api: {
937 unsupported: ["hiddenapi/my-unsupported.txt"],
938 removed: ["hiddenapi/my-removed.txt"],
939 max_target_r_low_priority: ["hiddenapi/my-max-target-r-low-priority.txt"],
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000940 max_target_q: [
941 "hiddenapi/my-max-target-q.txt",
942 "hiddenapi/my-new-max-target-q.txt",
943 ],
Paul Duffin7c955552021-04-19 13:23:53 +0100944 max_target_p: ["hiddenapi/my-max-target-p.txt"],
945 max_target_o_low_priority: ["hiddenapi/my-max-target-o-low-priority.txt"],
946 blocked: ["hiddenapi/my-blocked.txt"],
947 unsupported_packages: ["hiddenapi/my-unsupported-packages.txt"],
Paul Duffin2fef1362021-04-15 13:32:00 +0100948 annotation_flags: "hiddenapi/annotation-flags.csv",
949 metadata: "hiddenapi/metadata.csv",
950 index: "hiddenapi/index.csv",
Paul Duffin8d007e92021-07-22 12:00:49 +0100951 signature_patterns: "hiddenapi/signature-patterns.csv",
Paul Duffin191be3a2021-08-10 16:14:16 +0100952 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
953 filtered_flags: "hiddenapi/filtered-flags.csv",
Paul Duffin7c955552021-04-19 13:23:53 +0100954 },
955}
956
957java_import {
958 name: "mybootlib",
959 prefer: false,
960 visibility: ["//visibility:public"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100961 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000962 jars: ["java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000963 min_sdk_version: "1",
Paul Duffin869de142021-07-15 14:14:41 +0100964 permitted_packages: ["mybootlib"],
Paul Duffin7c955552021-04-19 13:23:53 +0100965}
Paul Duffin475daaf2021-05-13 00:57:55 +0100966
967java_sdk_library_import {
Paul Duffin3f1ae0b2022-07-27 16:27:42 +0000968 name: "mynewlibrary",
969 prefer: false,
970 visibility: ["//visibility:public"],
971 apex_available: ["myapex"],
972 shared_library: true,
973 compile_dex: true,
974 permitted_packages: ["mysdklibrary"],
975 public: {
976 jars: ["sdk_library/public/mynewlibrary-stubs.jar"],
977 stub_srcs: ["sdk_library/public/mynewlibrary_stub_sources"],
978 current_api: "sdk_library/public/mynewlibrary.txt",
979 removed_api: "sdk_library/public/mynewlibrary-removed.txt",
980 sdk_version: "current",
981 },
982}
983
984java_sdk_library_import {
Paul Duffin475daaf2021-05-13 00:57:55 +0100985 name: "mysdklibrary",
986 prefer: false,
987 visibility: ["//visibility:public"],
988 apex_available: ["//apex_available:platform"],
989 shared_library: true,
990 compile_dex: true,
Paul Duffin869de142021-07-15 14:14:41 +0100991 permitted_packages: ["mysdklibrary"],
Paul Duffin475daaf2021-05-13 00:57:55 +0100992 public: {
993 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
994 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
995 current_api: "sdk_library/public/mysdklibrary.txt",
996 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
997 sdk_version: "current",
998 },
999}
Paul Duffin7c955552021-04-19 13:23:53 +01001000`),
1001 checkAllCopyRules(`
1002my-unsupported.txt -> hiddenapi/my-unsupported.txt
1003my-removed.txt -> hiddenapi/my-removed.txt
1004my-max-target-r-low-priority.txt -> hiddenapi/my-max-target-r-low-priority.txt
1005my-max-target-q.txt -> hiddenapi/my-max-target-q.txt
Paul Duffin3f1ae0b2022-07-27 16:27:42 +00001006my-new-max-target-q.txt -> hiddenapi/my-new-max-target-q.txt
Paul Duffin7c955552021-04-19 13:23:53 +01001007my-max-target-p.txt -> hiddenapi/my-max-target-p.txt
1008my-max-target-o-low-priority.txt -> hiddenapi/my-max-target-o-low-priority.txt
1009my-blocked.txt -> hiddenapi/my-blocked.txt
1010my-unsupported-packages.txt -> hiddenapi/my-unsupported-packages.txt
Paul Duffin2fef1362021-04-15 13:32:00 +01001011.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1012.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1013.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/index.csv -> hiddenapi/index.csv
Paul Duffin8d007e92021-07-22 12:00:49 +01001014.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
Paul Duffin280bae62021-07-20 18:03:53 +01001015.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1016.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Paul Duffin7ed6ff82022-11-21 10:57:30 +00001017.intermediates/mysdk/common_os/empty -> java_boot_libs/snapshot/jars/are/invalid/mybootlib.jar
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001018.intermediates/mynewlibrary.stubs.exportable/android_common/combined/mynewlibrary.stubs.exportable.jar -> sdk_library/public/mynewlibrary-stubs.jar
1019.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_api.txt -> sdk_library/public/mynewlibrary.txt
1020.intermediates/mynewlibrary.stubs.source/android_common/exportable/mynewlibrary.stubs.source_removed.txt -> sdk_library/public/mynewlibrary-removed.txt
1021.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1022.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1023.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 +01001024`),
Paul Duffin7c475152021-06-09 16:17:58 +01001025 snapshotTestPreparer(checkSnapshotWithoutSource, preparerForSnapshot),
1026 snapshotTestPreparer(checkSnapshotWithSourcePreferred, preparerForSnapshot),
1027 snapshotTestPreparer(checkSnapshotPreferredWithSource, preparerForSnapshot),
Paul Duffin7c955552021-04-19 13:23:53 +01001028 )
1029}
Paul Duffin1938dba2022-07-26 23:53:00 +00001030
1031func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBuildRelease string,
1032 expectedSdkSnapshot string,
1033 expectedCopyRules string,
1034 expectedStubFlagsInputs []string,
1035 suffix string) {
1036
1037 result := android.GroupFixturePreparers(
1038 prepareForSdkTestWithJava,
1039 java.PrepareForTestWithJavaDefaultModules,
1040 java.PrepareForTestWithJavaSdkLibraryFiles,
1041 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1042 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1043 prepareForSdkTestWithApex,
1044
1045 // Add a platform_bootclasspath that depends on the fragment.
1046 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1047
1048 android.FixtureMergeEnv(map[string]string{
1049 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": targetBuildRelease,
1050 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001051 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1052 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1053 }),
Paul Duffin1938dba2022-07-26 23:53:00 +00001054
Colin Crossa66b4632024-08-08 15:50:47 -07001055 android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"),
Jihoon Kangbd093452023-12-26 19:08:01 +00001056
Paul Duffin1938dba2022-07-26 23:53:00 +00001057 android.FixtureWithRootAndroidBp(`
1058 sdk {
1059 name: "mysdk",
1060 apexes: ["myapex"],
1061 }
1062
1063 apex {
1064 name: "myapex",
1065 key: "myapex.key",
1066 min_sdk_version: "S",
1067 bootclasspath_fragments: ["mybootclasspathfragment"],
1068 }
1069
1070 bootclasspath_fragment {
1071 name: "mybootclasspathfragment",
1072 apex_available: ["myapex"],
1073 contents: [
1074 "mysdklibrary",
1075 "mynewsdklibrary",
1076 ],
1077
1078 hidden_api: {
1079 split_packages: [],
1080 },
1081 }
1082
1083 java_sdk_library {
1084 name: "mysdklibrary",
1085 apex_available: ["myapex"],
1086 srcs: ["Test.java"],
1087 shared_library: false,
1088 public: {enabled: true},
1089 min_sdk_version: "S",
Jihoon Kang85bc1932024-07-01 17:04:46 +00001090 sdk_version: "current",
Paul Duffin1938dba2022-07-26 23:53:00 +00001091 }
1092
1093 java_sdk_library {
1094 name: "mynewsdklibrary",
1095 apex_available: ["myapex"],
1096 srcs: ["Test.java"],
1097 compile_dex: true,
1098 public: {enabled: true},
1099 min_sdk_version: "Tiramisu",
1100 permitted_packages: ["mynewsdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +00001101 sdk_version: "current",
Paul Duffin1938dba2022-07-26 23:53:00 +00001102 }
1103 `),
1104 ).RunTest(t)
1105
1106 bcpf := result.ModuleForTests("mybootclasspathfragment", "android_common")
1107 rule := bcpf.Output("out/soong/.intermediates/mybootclasspathfragment/android_common/modular-hiddenapi" + suffix + "/stub-flags.csv")
Jihoon Kanga3a05462024-04-05 00:36:44 +00001108 android.AssertPathsRelativeToTopEquals(t, "stub flags inputs", android.SortedUniqueStrings(expectedStubFlagsInputs), android.SortedUniquePaths(rule.Implicits))
Paul Duffin1938dba2022-07-26 23:53:00 +00001109
1110 CheckSnapshot(t, result, "mysdk", "",
1111 checkAndroidBpContents(expectedSdkSnapshot),
1112 checkAllCopyRules(expectedCopyRules),
1113 )
1114}
1115
1116func TestSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T) {
1117 t.Run("target S build", func(t *testing.T) {
1118 expectedSnapshot := `
1119// This is auto-generated. DO NOT EDIT.
1120
1121prebuilt_bootclasspath_fragment {
1122 name: "mybootclasspathfragment",
1123 prefer: false,
1124 visibility: ["//visibility:public"],
1125 apex_available: ["myapex"],
1126 contents: ["mysdklibrary"],
1127 hidden_api: {
1128 annotation_flags: "hiddenapi/annotation-flags.csv",
1129 metadata: "hiddenapi/metadata.csv",
1130 index: "hiddenapi/index.csv",
1131 stub_flags: "hiddenapi/stub-flags.csv",
1132 all_flags: "hiddenapi/all-flags.csv",
1133 },
1134}
1135
1136java_sdk_library_import {
1137 name: "mysdklibrary",
1138 prefer: false,
1139 visibility: ["//visibility:public"],
1140 apex_available: ["myapex"],
1141 shared_library: false,
1142 public: {
1143 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1144 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1145 current_api: "sdk_library/public/mysdklibrary.txt",
1146 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1147 sdk_version: "current",
1148 },
1149}
1150`
1151 expectedCopyRules := `
1152.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1153.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/metadata.csv -> hiddenapi/metadata.csv
1154.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/index.csv -> hiddenapi/index.csv
1155.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/stub-flags.csv -> hiddenapi/stub-flags.csv
1156.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi-for-sdk-snapshot/all-flags.csv -> hiddenapi/all-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001157.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1158.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1159.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 +00001160`
1161
1162 // On S the stub flags should only be generated from mysdklibrary as mynewsdklibrary is not part
1163 // of the snapshot.
1164 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001165 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001166 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001167 }
1168
1169 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "S",
1170 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "-for-sdk-snapshot")
1171 })
1172
1173 t.Run("target-Tiramisu-build", func(t *testing.T) {
1174 expectedSnapshot := `
1175// This is auto-generated. DO NOT EDIT.
1176
1177prebuilt_bootclasspath_fragment {
1178 name: "mybootclasspathfragment",
1179 prefer: false,
1180 visibility: ["//visibility:public"],
1181 apex_available: ["myapex"],
1182 contents: [
1183 "mysdklibrary",
1184 "mynewsdklibrary",
1185 ],
1186 hidden_api: {
1187 annotation_flags: "hiddenapi/annotation-flags.csv",
1188 metadata: "hiddenapi/metadata.csv",
1189 index: "hiddenapi/index.csv",
1190 signature_patterns: "hiddenapi/signature-patterns.csv",
1191 filtered_stub_flags: "hiddenapi/filtered-stub-flags.csv",
1192 filtered_flags: "hiddenapi/filtered-flags.csv",
1193 },
1194}
1195
1196java_sdk_library_import {
1197 name: "mysdklibrary",
1198 prefer: false,
1199 visibility: ["//visibility:public"],
1200 apex_available: ["myapex"],
1201 shared_library: false,
1202 public: {
1203 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
1204 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
1205 current_api: "sdk_library/public/mysdklibrary.txt",
1206 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
1207 sdk_version: "current",
1208 },
1209}
1210
1211java_sdk_library_import {
1212 name: "mynewsdklibrary",
1213 prefer: false,
1214 visibility: ["//visibility:public"],
1215 apex_available: ["myapex"],
1216 shared_library: true,
1217 compile_dex: true,
1218 permitted_packages: ["mynewsdklibrary"],
1219 public: {
1220 jars: ["sdk_library/public/mynewsdklibrary-stubs.jar"],
1221 stub_srcs: ["sdk_library/public/mynewsdklibrary_stub_sources"],
1222 current_api: "sdk_library/public/mynewsdklibrary.txt",
1223 removed_api: "sdk_library/public/mynewsdklibrary-removed.txt",
1224 sdk_version: "current",
1225 },
1226}
1227`
1228 expectedCopyRules := `
1229.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/annotation-flags.csv -> hiddenapi/annotation-flags.csv
1230.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/metadata.csv -> hiddenapi/metadata.csv
1231.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/index.csv -> hiddenapi/index.csv
1232.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv -> hiddenapi/signature-patterns.csv
1233.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-stub-flags.csv -> hiddenapi/filtered-stub-flags.csv
1234.intermediates/mybootclasspathfragment/android_common_myapex/modular-hiddenapi/filtered-flags.csv -> hiddenapi/filtered-flags.csv
Jihoon Kangf55a5f72024-01-08 08:56:20 +00001235.intermediates/mysdklibrary.stubs.exportable/android_common/combined/mysdklibrary.stubs.exportable.jar -> sdk_library/public/mysdklibrary-stubs.jar
1236.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_api.txt -> sdk_library/public/mysdklibrary.txt
1237.intermediates/mysdklibrary.stubs.source/android_common/exportable/mysdklibrary.stubs.source_removed.txt -> sdk_library/public/mysdklibrary-removed.txt
1238.intermediates/mynewsdklibrary.stubs.exportable/android_common/combined/mynewsdklibrary.stubs.exportable.jar -> sdk_library/public/mynewsdklibrary-stubs.jar
1239.intermediates/mynewsdklibrary.stubs.source/android_common/exportable/mynewsdklibrary.stubs.source_api.txt -> sdk_library/public/mynewsdklibrary.txt
1240.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 +00001241`
1242
1243 // On tiramisu the stub flags should be generated from both mynewsdklibrary and mysdklibrary as
1244 // they are both part of the snapshot.
1245 expectedStubFlagsInputs := []string{
Jihoon Kangbd093452023-12-26 19:08:01 +00001246 "out/soong/.intermediates/mynewsdklibrary.stubs.exportable/android_common/dex/mynewsdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001247 "out/soong/.intermediates/mynewsdklibrary.impl/android_common/aligned/mynewsdklibrary.jar",
Jihoon Kangbd093452023-12-26 19:08:01 +00001248 "out/soong/.intermediates/mysdklibrary.stubs.exportable/android_common/dex/mysdklibrary.stubs.exportable.jar",
Jihoon Kanga3a05462024-04-05 00:36:44 +00001249 "out/soong/.intermediates/mysdklibrary.impl/android_common/aligned/mysdklibrary.jar",
Paul Duffin1938dba2022-07-26 23:53:00 +00001250 }
1251
1252 testSnapshotWithBootClasspathFragment_MinSdkVersion(t, "Tiramisu",
1253 expectedSnapshot, expectedCopyRules, expectedStubFlagsInputs, "")
1254 })
1255}
Sam Delmerico35881362023-06-30 14:40:10 -04001256
1257func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) {
1258 result := android.GroupFixturePreparers(
1259 prepareForSdkTestWithJava,
1260 java.PrepareForTestWithJavaDefaultModules,
1261 java.PrepareForTestWithJavaSdkLibraryFiles,
1262 java.FixtureWithLastReleaseApis("mysdklibrary", "mynewsdklibrary"),
1263 java.FixtureConfigureApexBootJars("myapex:mysdklibrary", "myapex:mynewsdklibrary"),
1264 prepareForSdkTestWithApex,
1265 // Add a platform_bootclasspath that depends on the fragment.
1266 fixtureAddPlatformBootclasspathForBootclasspathFragment("myapex", "mybootclasspathfragment"),
1267 android.FixtureMergeEnv(map[string]string{
1268 "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S",
1269 }),
Spandan Dasa5e26d32024-03-06 14:04:36 +00001270 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
1271 variables.Platform_version_active_codenames = []string{"VanillaIceCream"}
1272 }),
Sam Delmerico35881362023-06-30 14:40:10 -04001273 android.FixtureWithRootAndroidBp(`
1274 sdk {
1275 name: "mysdk",
1276 apexes: ["myapex"],
1277 }
1278 apex {
1279 name: "myapex",
1280 key: "myapex.key",
1281 min_sdk_version: "S",
1282 bootclasspath_fragments: ["mybootclasspathfragment"],
1283 }
1284 bootclasspath_fragment {
1285 name: "mybootclasspathfragment",
1286 apex_available: ["myapex"],
1287 contents: ["mysdklibrary", "mynewsdklibrary"],
1288 hidden_api: {
1289 split_packages: [],
1290 },
1291 }
1292 java_sdk_library {
1293 name: "mysdklibrary",
1294 apex_available: ["myapex"],
1295 srcs: ["Test.java"],
1296 shared_library: false,
1297 public: {enabled: true},
1298 min_sdk_version: "Tiramisu",
Jihoon Kang85bc1932024-07-01 17:04:46 +00001299 sdk_version: "current",
Sam Delmerico35881362023-06-30 14:40:10 -04001300 }
1301 java_sdk_library {
1302 name: "mynewsdklibrary",
1303 apex_available: ["myapex"],
1304 srcs: ["Test.java"],
1305 compile_dex: true,
1306 public: {enabled: true},
1307 min_sdk_version: "Tiramisu",
1308 permitted_packages: ["mynewsdklibrary"],
Jihoon Kang85bc1932024-07-01 17:04:46 +00001309 sdk_version: "current",
Sam Delmerico35881362023-06-30 14:40:10 -04001310 }
1311 `),
1312 ).RunTest(t)
1313
1314 CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
1315}