blob: ec1ef1516688a310115451a41dceee1c75639a90 [file] [log] [blame]
Colin Cross9bb9bfb2022-03-17 11:12:32 -07001// Copyright 2022 Google Inc. All rights reserved.
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 java
16
17import (
Sam Delmerico95d70942023-08-02 18:00:35 -040018 "fmt"
Colin Cross9bb9bfb2022-03-17 11:12:32 -070019 "testing"
20
21 "android/soong/android"
Sam Delmerico9f9c0a22022-11-29 11:19:37 -050022
23 "github.com/google/blueprint/proptools"
Colin Cross9bb9bfb2022-03-17 11:12:32 -070024)
25
26func TestR8(t *testing.T) {
Jiakai Zhangcf61e3c2023-05-08 16:28:38 +000027 result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
Colin Cross9bb9bfb2022-03-17 11:12:32 -070028 android_app {
29 name: "app",
30 srcs: ["foo.java"],
31 libs: ["lib"],
32 static_libs: ["static_lib"],
33 platform_apis: true,
34 }
35
Jared Duke40d731a2022-09-20 15:32:14 -070036 android_app {
37 name: "stable_app",
38 srcs: ["foo.java"],
39 sdk_version: "current",
40 min_sdk_version: "31",
41 }
42
43 android_app {
44 name: "core_platform_app",
45 srcs: ["foo.java"],
46 sdk_version: "core_platform",
Spandan Dasc404cc72023-02-23 18:05:05 +000047 min_sdk_version: "31",
Jared Duke40d731a2022-09-20 15:32:14 -070048 }
49
Colin Cross9bb9bfb2022-03-17 11:12:32 -070050 java_library {
51 name: "lib",
52 srcs: ["foo.java"],
53 }
54
55 java_library {
56 name: "static_lib",
57 srcs: ["foo.java"],
58 }
59 `)
60
61 app := result.ModuleForTests("app", "android_common")
Jared Duke40d731a2022-09-20 15:32:14 -070062 stableApp := result.ModuleForTests("stable_app", "android_common")
63 corePlatformApp := result.ModuleForTests("core_platform_app", "android_common")
Colin Cross9bb9bfb2022-03-17 11:12:32 -070064 lib := result.ModuleForTests("lib", "android_common")
65 staticLib := result.ModuleForTests("static_lib", "android_common")
66
67 appJavac := app.Rule("javac")
68 appR8 := app.Rule("r8")
Jared Duke40d731a2022-09-20 15:32:14 -070069 stableAppR8 := stableApp.Rule("r8")
70 corePlatformAppR8 := corePlatformApp.Rule("r8")
Colin Cross9bb9bfb2022-03-17 11:12:32 -070071 libHeader := lib.Output("turbine-combined/lib.jar").Output
72 staticLibHeader := staticLib.Output("turbine-combined/static_lib.jar").Output
73
74 android.AssertStringDoesContain(t, "expected lib header jar in app javac classpath",
75 appJavac.Args["classpath"], libHeader.String())
76 android.AssertStringDoesContain(t, "expected static_lib header jar in app javac classpath",
77 appJavac.Args["classpath"], staticLibHeader.String())
78
79 android.AssertStringDoesContain(t, "expected lib header jar in app r8 classpath",
80 appR8.Args["r8Flags"], libHeader.String())
Sam Delmerico9f9c0a22022-11-29 11:19:37 -050081 android.AssertStringDoesNotContain(t, "expected no static_lib header jar in app r8 classpath",
Colin Cross9bb9bfb2022-03-17 11:12:32 -070082 appR8.Args["r8Flags"], staticLibHeader.String())
Remi NGUYEN VANbdad3142022-08-04 13:19:03 +090083 android.AssertStringDoesContain(t, "expected -ignorewarnings in app r8 flags",
84 appR8.Args["r8Flags"], "-ignorewarnings")
Jared Duke40d731a2022-09-20 15:32:14 -070085 android.AssertStringDoesContain(t, "expected --android-platform-build in app r8 flags",
86 appR8.Args["r8Flags"], "--android-platform-build")
87 android.AssertStringDoesNotContain(t, "expected no --android-platform-build in stable_app r8 flags",
88 stableAppR8.Args["r8Flags"], "--android-platform-build")
89 android.AssertStringDoesContain(t, "expected --android-platform-build in core_platform_app r8 flags",
90 corePlatformAppR8.Args["r8Flags"], "--android-platform-build")
Remi NGUYEN VANbdad3142022-08-04 13:19:03 +090091}
92
Sam Delmerico9f9c0a22022-11-29 11:19:37 -050093func TestR8TransitiveDeps(t *testing.T) {
94 bp := `
95 override_android_app {
96 name: "override_app",
97 base: "app",
98 }
99
100 android_app {
101 name: "app",
102 srcs: ["foo.java"],
103 libs: [
104 "lib",
105 "uses_libs_dep_import",
106 ],
107 static_libs: [
108 "static_lib",
109 "repeated_dep",
110 ],
111 platform_apis: true,
112 }
113
114 java_library {
115 name: "static_lib",
116 srcs: ["foo.java"],
117 }
118
119 java_library {
120 name: "lib",
121 libs: [
122 "transitive_lib",
123 "repeated_dep",
124 "prebuilt_lib",
125 ],
126 static_libs: ["transitive_static_lib"],
127 srcs: ["foo.java"],
128 }
129
130 java_library {
131 name: "repeated_dep",
132 srcs: ["foo.java"],
133 }
134
135 java_library {
136 name: "transitive_static_lib",
137 srcs: ["foo.java"],
138 }
139
140 java_library {
141 name: "transitive_lib",
142 srcs: ["foo.java"],
143 libs: ["transitive_lib_2"],
144 }
145
146 java_library {
147 name: "transitive_lib_2",
148 srcs: ["foo.java"],
149 }
150
151 java_import {
152 name: "lib",
153 jars: ["lib.jar"],
154 }
155
156 java_library {
157 name: "uses_lib",
158 srcs: ["foo.java"],
159 }
160
161 java_library {
162 name: "optional_uses_lib",
163 srcs: ["foo.java"],
164 }
165
166 android_library {
167 name: "uses_libs_dep",
168 uses_libs: ["uses_lib"],
169 optional_uses_libs: ["optional_uses_lib"],
170 }
171
172 android_library_import {
173 name: "uses_libs_dep_import",
174 aars: ["aar.aar"],
175 static_libs: ["uses_libs_dep"],
176 }
177 `
178
179 testcases := []struct {
180 name string
181 unbundled bool
182 }{
183 {
184 name: "non-unbundled build",
185 unbundled: false,
186 },
187 {
188 name: "unbundled build",
189 unbundled: true,
190 },
191 }
192
193 for _, tc := range testcases {
194 t.Run(tc.name, func(t *testing.T) {
Jiakai Zhangcf61e3c2023-05-08 16:28:38 +0000195 fixturePreparer := PrepareForTestWithJavaDefaultModules
Sam Delmerico9f9c0a22022-11-29 11:19:37 -0500196 if tc.unbundled {
197 fixturePreparer = android.GroupFixturePreparers(
198 fixturePreparer,
199 android.FixtureModifyProductVariables(
200 func(variables android.FixtureProductVariables) {
201 variables.Unbundled_build = proptools.BoolPtr(true)
202 },
203 ),
204 )
205 }
206 result := fixturePreparer.RunTestWithBp(t, bp)
207
208 getHeaderJar := func(name string) android.Path {
209 mod := result.ModuleForTests(name, "android_common")
210 return mod.Output("turbine-combined/" + name + ".jar").Output
211 }
212
213 appR8 := result.ModuleForTests("app", "android_common").Rule("r8")
214 overrideAppR8 := result.ModuleForTests("app", "android_common_override_app").Rule("r8")
215 appHeader := getHeaderJar("app")
216 overrideAppHeader := result.ModuleForTests("app", "android_common_override_app").Output("turbine-combined/app.jar").Output
217 libHeader := getHeaderJar("lib")
218 transitiveLibHeader := getHeaderJar("transitive_lib")
219 transitiveLib2Header := getHeaderJar("transitive_lib_2")
220 staticLibHeader := getHeaderJar("static_lib")
221 transitiveStaticLibHeader := getHeaderJar("transitive_static_lib")
222 repeatedDepHeader := getHeaderJar("repeated_dep")
223 usesLibHeader := getHeaderJar("uses_lib")
224 optionalUsesLibHeader := getHeaderJar("optional_uses_lib")
225 prebuiltLibHeader := result.ModuleForTests("prebuilt_lib", "android_common").Output("combined/lib.jar").Output
226
227 for _, rule := range []android.TestingBuildParams{appR8, overrideAppR8} {
228 android.AssertStringDoesNotContain(t, "expected no app header jar in app r8 classpath",
229 rule.Args["r8Flags"], appHeader.String())
230 android.AssertStringDoesNotContain(t, "expected no override_app header jar in app r8 classpath",
231 rule.Args["r8Flags"], overrideAppHeader.String())
232 android.AssertStringDoesContain(t, "expected transitive lib header jar in app r8 classpath",
233 rule.Args["r8Flags"], transitiveLibHeader.String())
234 android.AssertStringDoesContain(t, "expected transitive lib ^2 header jar in app r8 classpath",
235 rule.Args["r8Flags"], transitiveLib2Header.String())
236 android.AssertStringDoesContain(t, "expected lib header jar in app r8 classpath",
237 rule.Args["r8Flags"], libHeader.String())
238 android.AssertStringDoesContain(t, "expected uses_lib header jar in app r8 classpath",
239 rule.Args["r8Flags"], usesLibHeader.String())
240 android.AssertStringDoesContain(t, "expected optional_uses_lib header jar in app r8 classpath",
241 rule.Args["r8Flags"], optionalUsesLibHeader.String())
242 android.AssertStringDoesNotContain(t, "expected no static_lib header jar in app r8 classpath",
243 rule.Args["r8Flags"], staticLibHeader.String())
244 android.AssertStringDoesNotContain(t, "expected no transitive static_lib header jar in app r8 classpath",
245 rule.Args["r8Flags"], transitiveStaticLibHeader.String())
246 // we shouldn't list this dep because it is already included as static_libs in the app
247 android.AssertStringDoesNotContain(t, "expected no repeated_dep header jar in app r8 classpath",
248 rule.Args["r8Flags"], repeatedDepHeader.String())
249 // skip a prebuilt transitive dep if the source is also a transitive dep
250 android.AssertStringDoesNotContain(t, "expected no prebuilt header jar in app r8 classpath",
251 rule.Args["r8Flags"], prebuiltLibHeader.String())
252 android.AssertStringDoesContain(t, "expected -ignorewarnings in app r8 flags",
253 rule.Args["r8Flags"], "-ignorewarnings")
254 android.AssertStringDoesContain(t, "expected --android-platform-build in app r8 flags",
255 rule.Args["r8Flags"], "--android-platform-build")
256 }
257 })
258 }
259}
260
Remi NGUYEN VANbdad3142022-08-04 13:19:03 +0900261func TestR8Flags(t *testing.T) {
Jiakai Zhangcf61e3c2023-05-08 16:28:38 +0000262 result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
Remi NGUYEN VANbdad3142022-08-04 13:19:03 +0900263 android_app {
264 name: "app",
265 srcs: ["foo.java"],
266 platform_apis: true,
267 optimize: {
268 shrink: false,
269 optimize: false,
270 obfuscate: false,
271 ignore_warnings: false,
272 },
273 }
274 `)
275
276 app := result.ModuleForTests("app", "android_common")
277 appR8 := app.Rule("r8")
278 android.AssertStringDoesContain(t, "expected -dontshrink in app r8 flags",
279 appR8.Args["r8Flags"], "-dontshrink")
280 android.AssertStringDoesContain(t, "expected -dontoptimize in app r8 flags",
281 appR8.Args["r8Flags"], "-dontoptimize")
282 android.AssertStringDoesContain(t, "expected -dontobfuscate in app r8 flags",
283 appR8.Args["r8Flags"], "-dontobfuscate")
284 android.AssertStringDoesNotContain(t, "expected no -ignorewarnings in app r8 flags",
285 appR8.Args["r8Flags"], "-ignorewarnings")
Jared Duke40d731a2022-09-20 15:32:14 -0700286 android.AssertStringDoesContain(t, "expected --android-platform-build in app r8 flags",
287 appR8.Args["r8Flags"], "--android-platform-build")
Colin Cross9bb9bfb2022-03-17 11:12:32 -0700288}
289
290func TestD8(t *testing.T) {
Jiakai Zhangcf61e3c2023-05-08 16:28:38 +0000291 result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
Colin Cross9bb9bfb2022-03-17 11:12:32 -0700292 java_library {
293 name: "foo",
294 srcs: ["foo.java"],
295 libs: ["lib"],
296 static_libs: ["static_lib"],
297 installable: true,
298 }
299
300 java_library {
301 name: "lib",
302 srcs: ["foo.java"],
303 }
304
305 java_library {
306 name: "static_lib",
307 srcs: ["foo.java"],
308 }
309 `)
310
311 foo := result.ModuleForTests("foo", "android_common")
312 lib := result.ModuleForTests("lib", "android_common")
313 staticLib := result.ModuleForTests("static_lib", "android_common")
314
315 fooJavac := foo.Rule("javac")
316 fooD8 := foo.Rule("d8")
317 libHeader := lib.Output("turbine-combined/lib.jar").Output
318 staticLibHeader := staticLib.Output("turbine-combined/static_lib.jar").Output
319
320 android.AssertStringDoesContain(t, "expected lib header jar in foo javac classpath",
321 fooJavac.Args["classpath"], libHeader.String())
322 android.AssertStringDoesContain(t, "expected static_lib header jar in foo javac classpath",
323 fooJavac.Args["classpath"], staticLibHeader.String())
324
325 android.AssertStringDoesContain(t, "expected lib header jar in foo d8 classpath",
326 fooD8.Args["d8Flags"], libHeader.String())
327 android.AssertStringDoesNotContain(t, "expected no static_lib header jar in foo javac classpath",
328 fooD8.Args["d8Flags"], staticLibHeader.String())
329}
Jared Duke5979b302022-12-19 21:08:39 +0000330
Sam Delmerico95d70942023-08-02 18:00:35 -0400331func TestProguardFlagsInheritanceStatic(t *testing.T) {
Jiakai Zhangcf61e3c2023-05-08 16:28:38 +0000332 result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
Jared Duke5979b302022-12-19 21:08:39 +0000333 android_app {
334 name: "app",
335 static_libs: [
336 "primary_android_lib",
337 "primary_lib",
338 ],
339 platform_apis: true,
340 }
341
342 java_library {
343 name: "primary_lib",
344 optimize: {
345 proguard_flags_files: ["primary.flags"],
346 },
347 }
348
349 android_library {
350 name: "primary_android_lib",
351 static_libs: ["secondary_lib"],
352 optimize: {
353 proguard_flags_files: ["primary_android.flags"],
354 },
355 }
356
357 java_library {
358 name: "secondary_lib",
359 static_libs: ["tertiary_lib"],
360 optimize: {
361 proguard_flags_files: ["secondary.flags"],
362 },
363 }
364
365 java_library {
366 name: "tertiary_lib",
367 optimize: {
368 proguard_flags_files: ["tertiary.flags"],
369 },
370 }
371 `)
372
373 app := result.ModuleForTests("app", "android_common")
374 appR8 := app.Rule("r8")
375 android.AssertStringDoesContain(t, "expected primary_lib's proguard flags from direct dep",
376 appR8.Args["r8Flags"], "primary.flags")
377 android.AssertStringDoesContain(t, "expected primary_android_lib's proguard flags from direct dep",
378 appR8.Args["r8Flags"], "primary_android.flags")
379 android.AssertStringDoesContain(t, "expected secondary_lib's proguard flags from inherited dep",
380 appR8.Args["r8Flags"], "secondary.flags")
381 android.AssertStringDoesContain(t, "expected tertiary_lib's proguard flags from inherited dep",
382 appR8.Args["r8Flags"], "tertiary.flags")
383}
Sam Delmerico95d70942023-08-02 18:00:35 -0400384
385func TestProguardFlagsInheritance(t *testing.T) {
386 directDepFlagsFileName := "direct_dep.flags"
387 transitiveDepFlagsFileName := "transitive_dep.flags"
388 bp := `
389 android_app {
390 name: "app",
391 static_libs: ["androidlib"], // this must be static_libs to initate dexing
392 platform_apis: true,
393 }
394
395 android_library {
396 name: "androidlib",
397 static_libs: ["app_dep"],
398 }
399
400 java_library {
401 name: "app_dep",
402 %s: ["dep"],
403 }
404
405 java_library {
406 name: "dep",
407 %s: ["transitive_dep"],
408 optimize: {
409 proguard_flags_files: ["direct_dep.flags"],
410 export_proguard_flags_files: %v,
411 },
412 }
413
414 java_library {
415 name: "transitive_dep",
416 optimize: {
417 proguard_flags_files: ["transitive_dep.flags"],
418 export_proguard_flags_files: %v,
419 },
420 }
421 `
422
423 testcases := []struct {
424 name string
425 depType string
426 depExportsFlagsFiles bool
427 transitiveDepType string
428 transitiveDepExportsFlagsFiles bool
429 expectedFlagsFiles []string
430 }{
431 {
432 name: "libs_export_libs_export",
433 depType: "libs",
434 depExportsFlagsFiles: true,
435 transitiveDepType: "libs",
436 transitiveDepExportsFlagsFiles: true,
437 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
438 },
439 {
440 name: "static_export_libs_export",
441 depType: "static_libs",
442 depExportsFlagsFiles: true,
443 transitiveDepType: "libs",
444 transitiveDepExportsFlagsFiles: true,
445 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
446 },
447 {
448 name: "libs_no-export_static_export",
449 depType: "libs",
450 depExportsFlagsFiles: false,
451 transitiveDepType: "static_libs",
452 transitiveDepExportsFlagsFiles: true,
453 expectedFlagsFiles: []string{transitiveDepFlagsFileName},
454 },
455 {
456 name: "static_no-export_static_export",
457 depType: "static_libs",
458 depExportsFlagsFiles: false,
459 transitiveDepType: "static_libs",
460 transitiveDepExportsFlagsFiles: true,
461 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
462 },
463 {
464 name: "libs_export_libs_no-export",
465 depType: "libs",
466 depExportsFlagsFiles: true,
467 transitiveDepType: "libs",
468 transitiveDepExportsFlagsFiles: false,
469 expectedFlagsFiles: []string{directDepFlagsFileName},
470 },
471 {
472 name: "static_export_libs_no-export",
473 depType: "static_libs",
474 depExportsFlagsFiles: true,
475 transitiveDepType: "libs",
476 transitiveDepExportsFlagsFiles: false,
477 expectedFlagsFiles: []string{directDepFlagsFileName},
478 },
479 {
480 name: "libs_no-export_static_no-export",
481 depType: "libs",
482 depExportsFlagsFiles: false,
483 transitiveDepType: "static_libs",
484 transitiveDepExportsFlagsFiles: false,
485 expectedFlagsFiles: []string{},
486 },
487 {
488 name: "static_no-export_static_no-export",
489 depType: "static_libs",
490 depExportsFlagsFiles: false,
491 transitiveDepType: "static_libs",
492 transitiveDepExportsFlagsFiles: false,
493 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
494 },
495 {
496 name: "libs_no-export_libs_export",
497 depType: "libs",
498 depExportsFlagsFiles: false,
499 transitiveDepType: "libs",
500 transitiveDepExportsFlagsFiles: true,
501 expectedFlagsFiles: []string{transitiveDepFlagsFileName},
502 },
503 {
504 name: "static_no-export_libs_export",
505 depType: "static_libs",
506 depExportsFlagsFiles: false,
507 transitiveDepType: "libs",
508 transitiveDepExportsFlagsFiles: true,
509 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
510 },
511 {
512 name: "libs_export_static_export",
513 depType: "libs",
514 depExportsFlagsFiles: true,
515 transitiveDepType: "static_libs",
516 transitiveDepExportsFlagsFiles: true,
517 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
518 },
519 {
520 name: "static_export_static_export",
521 depType: "static_libs",
522 depExportsFlagsFiles: true,
523 transitiveDepType: "static_libs",
524 transitiveDepExportsFlagsFiles: true,
525 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
526 },
527 {
528 name: "libs_no-export_libs_no-export",
529 depType: "libs",
530 depExportsFlagsFiles: false,
531 transitiveDepType: "libs",
532 transitiveDepExportsFlagsFiles: false,
533 expectedFlagsFiles: []string{},
534 },
535 {
536 name: "static_no-export_libs_no-export",
537 depType: "static_libs",
538 depExportsFlagsFiles: false,
539 transitiveDepType: "libs",
540 transitiveDepExportsFlagsFiles: false,
541 expectedFlagsFiles: []string{directDepFlagsFileName},
542 },
543 {
544 name: "libs_export_static_no-export",
545 depType: "libs",
546 depExportsFlagsFiles: true,
547 transitiveDepType: "static_libs",
548 transitiveDepExportsFlagsFiles: false,
549 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
550 },
551 {
552 name: "static_export_static_no-export",
553 depType: "static_libs",
554 depExportsFlagsFiles: true,
555 transitiveDepType: "static_libs",
556 transitiveDepExportsFlagsFiles: false,
557 expectedFlagsFiles: []string{directDepFlagsFileName, transitiveDepFlagsFileName},
558 },
559 }
560
561 for _, tc := range testcases {
562 t.Run(tc.name, func(t *testing.T) {
563 result := android.GroupFixturePreparers(
564 PrepareForTestWithJavaDefaultModules,
565 android.FixtureMergeMockFs(android.MockFS{
566 directDepFlagsFileName: nil,
567 transitiveDepFlagsFileName: nil,
568 }),
569 ).RunTestWithBp(t,
570 fmt.Sprintf(
571 bp,
572 tc.depType,
573 tc.transitiveDepType,
574 tc.depExportsFlagsFiles,
575 tc.transitiveDepExportsFlagsFiles,
576 ),
577 )
578 appR8 := result.ModuleForTests("app", "android_common").Rule("r8")
579
580 shouldHaveDepFlags := android.InList(directDepFlagsFileName, tc.expectedFlagsFiles)
581 if shouldHaveDepFlags {
582 android.AssertStringDoesContain(t, "expected deps's proguard flags",
583 appR8.Args["r8Flags"], directDepFlagsFileName)
584 } else {
585 android.AssertStringDoesNotContain(t, "app did not expect deps's proguard flags",
586 appR8.Args["r8Flags"], directDepFlagsFileName)
587 }
588
589 shouldHaveTransitiveDepFlags := android.InList(transitiveDepFlagsFileName, tc.expectedFlagsFiles)
590 if shouldHaveTransitiveDepFlags {
591 android.AssertStringDoesContain(t, "expected transitive deps's proguard flags",
592 appR8.Args["r8Flags"], transitiveDepFlagsFileName)
593 } else {
594 android.AssertStringDoesNotContain(t, "app did not expect transitive deps's proguard flags",
595 appR8.Args["r8Flags"], transitiveDepFlagsFileName)
596 }
597 })
598 }
599}
600
601func TestProguardFlagsInheritanceAppImport(t *testing.T) {
602 bp := `
603 android_app {
604 name: "app",
605 static_libs: ["aarimport"], // this must be static_libs to initate dexing
606 platform_apis: true,
607 }
608
609 android_library {
610 name: "androidlib",
611 static_libs: ["aarimport"],
612 }
613
614 android_library_import {
615 name: "aarimport",
616 aars: ["import.aar"],
617 }
618 `
619 result := android.GroupFixturePreparers(
620 PrepareForTestWithJavaDefaultModules,
621 ).RunTestWithBp(t, bp)
622
623 appR8 := result.ModuleForTests("app", "android_common").Rule("r8")
624 android.AssertStringDoesContain(t, "expected aarimports's proguard flags",
625 appR8.Args["r8Flags"], "proguard.txt")
626}