1// Copyright (C) 2007 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 15// 16// Definitions for building the Android core library and associated tests. 17// 18 19// The Android core library provides low-level APIs for use by the rest of the 20// Android software stack. It is made up of various parts, some of which can be 21// found in libcore/ and other parts that can be found in various external/ 22// directories. 23// 24// libcore has some sub-directories that follow a common structure: 25// e.g. dalvik, dom, harmony-tests, json, jsr166-tests, luni, libart, ojluni, 26// support, xml, xmlpull. 27// 28// The structure of these is generally: 29// 30// src/ 31// main/ # To be shipped on every device. 32// java/ # Java source for library code. 33// native/ # C/C++ source for library code. 34// resources/ # Support files. 35// test/ # Built only on demand, for testing. 36// java/ # Java source for tests. 37// native/ # C/C++ source for tests (rare). 38// resources/ # Support files. 39// 40// All subdirectories are optional. 41 42build = [ 43 "openjdk_java_files.bp", 44 "non_openjdk_java_files.bp", 45] 46 47// The Java files and their associated resources. 48filegroup { 49 name: "core-luni-resources", 50 visibility: [ 51 "//libcore:__subpackages__", 52 ], 53 path: "luni/src/main/java/", 54 srcs: [ 55 "luni/src/main/java/java/util/logging/logging.properties", 56 "luni/src/main/java/java/security/security.properties", 57 ], 58} 59 60filegroup { 61 name: "core-ojluni-resources", 62 visibility: [ 63 "//libcore:__subpackages__", 64 ], 65 path: "ojluni/src/main/resources/", 66 srcs: [ 67 "ojluni/src/main/resources/**/*", 68 ], 69} 70 71core_resources = [ 72 ":core-luni-resources", 73 ":core-ojluni-resources", 74] 75 76// The source files that go into core-oj. 77filegroup { 78 name: "core_oj_java_files", 79 visibility: [ 80 "//libcore:__subpackages__", 81 ], 82 srcs: [":openjdk_java_files"], 83} 84 85// OpenJDK source is not annotated with @hide so we need this separate 86// filegroup for just the parts that contribute to the API. 87filegroup { 88 name: "core_oj_api_files", 89 srcs: [":openjdk_javadoc_files"], 90} 91 92// The source files that go into core-libart. 93filegroup { 94 name: "core_libart_java_files", 95 visibility: [ 96 "//libcore:__subpackages__", 97 ], 98 srcs: [ 99 ":non_openjdk_java_files", 100 ], 101} 102 103// Some parts of libart are not annotated with @hide so we need this separate 104// filegroup for just the parts that contribute to the API. 105filegroup { 106 name: "core_libart_api_files", 107 srcs: [ 108 ":non_openjdk_javadoc_files", 109 ], 110} 111 112// The set of files for the ART module that contribute to one or more API 113// surfaces. This includes files that are in the public API as well as those 114// that are not but which have been marked up with @hide plus one or more of 115// the API defining annotations. 116// 117// Some source files in :core_oj_api_files and :openjdk_mmodule_extra_files are 118// annotated by applying annotations to the .annotated.java stubs files in 119// ojluni/annotated/mmodules and rather than in the original source. See the comments 120// in openjdk_java_files.bp for more details. 121filegroup { 122 name: "art_module_api_files", 123 visibility: [ 124 "//libcore:__subpackages__", 125 ], 126 srcs: [ 127 ":apache-xml_api_files", 128 ":bouncycastle_java_files", 129 ":core_oj_api_files", 130 ":core_libart_api_files", 131 ":okhttp_api_files", 132 ":openjdk_mmodule_extra_files", 133 ], 134} 135 136java_defaults { 137 name: "libcore_java_defaults", 138 javacflags: [ 139 //"-Xlint:all", 140 //"-Xlint:-serial,-deprecation,-unchecked", 141 ], 142 dxflags: ["--core-library"], 143 errorprone: { 144 javacflags: [ 145 "-Xep:MissingOverride:OFF", // Ignore missing @Override. 146 "-Xep:ConstantOverflow:WARN", // Known constant overflow in SplittableRandom 147 ], 148 }, 149} 150 151// 152// Build for the target (device). 153// 154 155// A target used to bootstrap compilation for the core library. 156// 157// See core-all-system-modules for more details. 158java_library { 159 name: "core-all", 160 defaults: ["libcore_java_defaults"], 161 162 srcs: [ 163 // Use the source code for the I18N module intra core API as using the 164 // compiled version does not work due to limitations in either soong or the javac 165 // toolchain. See http://b/142056316 for more details. 166 ":i18n-module-intra-core-api-stubs-source", 167 ":core_oj_java_files", 168 ":core_libart_java_files", 169 ":openjdk_lambda_stub_files", 170 ":openjdk_generated_annotation_stub_files", 171 ":app-compat-annotations-source", 172 ], 173 174 sdk_version: "none", 175 system_modules: "none", 176 patch_module: "java.base", 177 openjdk9: { 178 srcs: ["luni/src/module/java/module-info.java"], 179 }, 180 181 java_resources: core_resources, 182 java_version: "1.9", 183 184 installable: false, 185 186 plugins: [ 187 "compat-changeid-annotation-processor", 188 "unsupportedappusage-annotation-processor", 189 ], 190} 191 192platform_compat_config { 193 name: "libcore-platform-compat-config", 194 src: ":core-all", 195} 196 197// A system modules definition for use by core library targets only. It only 198// contains the core-all jar, which contains the classes that end up in core-oj, 199// core-libart as well as the lambda stubs needed to compile Java lambda code. 200// It does not contain other parts of core library like conscrypt, bouncycastle, 201// etc. This system_modules definition is used to bootstrap compilation for 202// other parts of the core library like core-oj, core-libart, conscrypt, 203// bouncycastle, etc. 204java_system_modules { 205 name: "core-all-system-modules", 206 207 // Visibility is deliberately restricted to a small set of build modules that 208 // the core library team control. 209 visibility: [ 210 "//external/apache-harmony:__subpackages__", 211 "//external/apache-xml", 212 "//external/okhttp", 213 "//libcore:__subpackages__", 214 ], 215 216 libs: ["core-all"], 217} 218 219// Contains the parts of core library associated with OpenJDK. 220java_library { 221 name: "core-oj", 222 visibility: [ 223 "//art/build/apex", 224 "//external/wycheproof", 225 "//libcore/benchmarks", 226 ], 227 apex_available: [ 228 "com.android.art.release", 229 "com.android.art.debug", 230 ], 231 defaults: ["libcore_java_defaults"], 232 installable: true, 233 hostdex: true, 234 235 srcs: [":core_oj_java_files"], 236 java_resources: core_resources, 237 238 sdk_version: "none", 239 system_modules: "core-all-system-modules", 240 patch_module: "java.base", 241 242 jacoco: { 243 exclude_filter: [ 244 "java.lang.Class", 245 "java.lang.Long", 246 "java.lang.Number", 247 "java.lang.Object", 248 "java.lang.String", 249 "java.lang.invoke.MethodHandle", 250 "java.lang.ref.Reference", 251 "java.lang.reflect.Proxy", 252 "java.util.AbstractMap", 253 "java.util.HashMap", 254 "java.util.HashMap$Node", 255 "java.util.Map", 256 ], 257 }, 258 259 notice: "ojluni/NOTICE", 260 261} 262 263// Contains parts of core library not associated with OpenJDK. Contains not 264// just java.*, javax.* code but also android.system.* and various internal 265// libcore.* packages. 266java_library { 267 name: "core-libart", 268 visibility: [ 269 "//art/build/apex", 270 "//external/robolectric-shadows", 271 "//external/wycheproof", 272 "//libcore/benchmarks", 273 "//frameworks/layoutlib", 274 ], 275 apex_available: [ 276 "com.android.art.release", 277 "com.android.art.debug", 278 ], 279 defaults: ["libcore_java_defaults"], 280 installable: true, 281 hostdex: true, 282 283 srcs: [":core_libart_java_files"], 284 java_version: "1.9", 285 286 sdk_version: "none", 287 system_modules: "core-all-system-modules", 288 patch_module: "java.base", 289 290 jacoco: { 291 exclude_filter: [ 292 "java.lang.DexCache", 293 "dalvik.system.ClassExt", 294 ], 295 }, 296 297 target: { 298 hostdex: { 299 required: [ 300 // Files used to simulate the /system, runtime APEX and tzdata 301 // APEX dir structure on host. 302 "icu_tzdata.dat_host_tzdata_apex", 303 "tzdata_host", 304 "tzdata_host_tzdata_apex", 305 "tzlookup.xml_host_tzdata_apex", 306 "tz_version_host", 307 "tz_version_host_tzdata_apex", 308 ], 309 }, 310 }, 311} 312 313// Provided solely to contribute information about which hidden parts of the 314// core-oj API are used by apps. 315// 316// The build system determines that this library provides hiddenapi information 317// for the core-oj bootjar because its name is of the form <x>-hiddenapi, where 318// <x> is the name of a boot jar. That triggers the generation of a flags.csv 319// file which encapsulates information extracted from the UnsupportedAppUsage 320// annotations in the dex. The information from that file is then encoded into 321// the core-oj file. 322// 323// Usually, e.g. for core-libart, the UnsupportedAppUsage annotations are 324// added to the source that is compiled directly into the bootjar and the build 325// system extracts the information about UnsupportedAppUsage directly from 326// there. 327// 328// This approach of having separate annotated source and a separate build 329// target was taken for ojluni to avoid having to maintain local patches in the 330// ojluni source for UnsupportedAppUsage annotations as that would make it more 331// difficult to pull down changes from upstream. 332// 333java_library { 334 name: "core-oj-hiddenapi", 335 // Do not allow this to be accessed from outside this directory. 336 visibility: ["//visibility:private"], 337 defaults: ["libcore_java_defaults"], 338 compile_dex: true, 339 340 srcs: [":openjdk_hiddenapi_javadoc_files"], 341 342 sdk_version: "none", 343 system_modules: "core-all-system-modules", 344 patch_module: "java.base", 345 plugins: ["unsupportedappusage-annotation-processor"], 346} 347 348// 349// Guaranteed unstripped versions of core-oj and core-libart. 350// 351// The build system may or may not strip the core-oj and core-libart jars, 352// but these will not be stripped. See b/24535627. 353// 354 355java_library { 356 name: "core-oj-testdex", 357 installable: true, 358 static_libs: ["core-oj"], 359 sdk_version: "none", 360 system_modules: "core-all-system-modules", 361 dxflags: ["--core-library"], 362 dex_preopt: { 363 enabled: false, 364 }, 365 java_version: "1.9", 366 notice: "ojluni/NOTICE", 367} 368 369java_library { 370 name: "core-libart-testdex", 371 installable: true, 372 static_libs: ["core-libart"], 373 sdk_version: "none", 374 system_modules: "core-all-system-modules", 375 dxflags: ["--core-library"], 376 dex_preopt: { 377 enabled: false, 378 }, 379 notice: "ojluni/NOTICE", 380} 381 382java_defaults { 383 name: "core_lambda_stubs_defaults", 384 defaults: ["libcore_java_defaults"], 385 hostdex: true, 386 387 sdk_version: "none", 388 system_modules: "core-all-system-modules", 389 patch_module: "java.base", 390 391 notice: "ojluni/NOTICE", 392 393 installable: false, 394 include_srcs: true, 395} 396 397// Creates a jar that exists to satisfy javac when compiling source code that 398// contains lambdas. This contains all classes / methods required by javac 399// when generating invoke-dynamic lambda implementation code, even those that 400// are also in the public SDK API from API level 26 onwards. 401java_library { 402 name: "core-lambda-stubs", 403 visibility: ["//visibility:public"], 404 defaults: ["core_lambda_stubs_defaults"], 405 srcs: [ 406 ":openjdk_lambda_stub_files", 407 ":openjdk_lambda_duplicate_stub_files", 408 ], 409 // This jar is packaged as part of the SDK, use -target 8 so that it works 410 // with old JDKs. 411 java_version: "1.8", 412} 413 414// An alternative to core-lambda-stubs that omits openjdk_lambda_duplicate_stub_files 415// because those classes are also part of the core library public SDK API 416// (since API level 26). 417java_library { 418 name: "core-lambda-stubs-for-system-modules", 419 visibility: [ 420 "//libcore/mmodules/core_platform_api", 421 ], 422 defaults: ["core_lambda_stubs_defaults"], 423 srcs: [ 424 ":openjdk_lambda_stub_files", 425 ], 426 include_srcs: true, 427} 428 429// Creates a jar that exists to satisfy javac when compiling source code that 430// contains @Generated annotations, which are produced by some code generation 431// tools (notably dagger) but aren't part of the Android API. 432// See http://b/123891440. 433java_library { 434 name: "core-generated-annotation-stubs", 435 visibility: [ 436 "//libcore/mmodules/core_platform_api", 437 ], 438 defaults: ["libcore_java_defaults"], 439 srcs: [ 440 ":openjdk_generated_annotation_stub_files", 441 ], 442 hostdex: true, 443 sdk_version: "none", 444 system_modules: "core-all-system-modules", 445 patch_module: "java.base", 446 notice: "ojluni/NOTICE", 447 installable: false, 448 include_srcs: true, 449} 450 451// Builds libcore test rules 452java_library_static { 453 name: "core-test-rules", 454 visibility: [ 455 "//art/build/sdk", 456 "//external/conscrypt", 457 "//external/conscrypt/apex/tests", 458 "//frameworks/base/location/tests/locationtests", 459 "//frameworks/base/core/tests/coretests", 460 "//frameworks/base/wifi/tests", 461 "//cts/tests/tests/util", 462 ], 463 hostdex: true, 464 srcs: [ 465 "dalvik/test-rules/src/main/**/*.java", 466 "test-rules/src/main/**/*.java", 467 ], 468 static_libs: ["junit"], 469 470 sdk_version: "none", 471 system_modules: "core-all-system-modules", 472} 473 474// Builds platform_compat test rules 475java_library_static { 476 name: "core-compat-test-rules", 477 visibility: [ 478 "//art/build/sdk", 479 "//frameworks/base/tests/PlatformCompatGating/test-rules", 480 ], 481 srcs: [ 482 "luni/src/main/java/android/compat/**/*.java", 483 "test-rules/src/platform_compat/**/*.java", 484 "luni/src/main/java/libcore/api/CorePlatformApi.java", 485 "luni/src/main/java/libcore/api/IntraCoreApi.java", 486 ], 487 static_libs: [ 488 "junit", 489 "guava", 490 ], 491 sdk_version: "none", 492 system_modules: "core-all-system-modules", 493 // This builds classes that are in the java.base Java module: 494 patch_module: "java.base", 495 hostdex: true, 496} 497 498// Builds the core-tests-support library used by various tests. 499java_library_static { 500 name: "core-tests-support", 501 visibility: [ 502 "//art/build/sdk", 503 "//cts/apps/CtsVerifier", 504 "//cts/tests/tests/keystore", 505 "//cts/tests/tests/net", 506 "//cts/tests/tests/net/api23Test", 507 "//external/apache-harmony", 508 "//frameworks/base/core/tests/coretests", 509 "//libcore/benchmarks", 510 "//packages/apps/KeyChain/tests", 511 "//system/timezone/distro/core", 512 ], 513 hostdex: true, 514 srcs: ["support/src/test/java/**/*.java"], 515 516 sdk_version: "core_platform", 517 libs: ["junit"], 518 static_libs: [ 519 "bouncycastle-unbundled", 520 "bouncycastle-bcpkix-unbundled", 521 "bouncycastle-ocsp-unbundled", 522 ], 523} 524 525// Builds the jsr166-tests library. 526java_test { 527 name: "jsr166-tests", 528 visibility: [ 529 "//cts/tests/libcore/jsr166", 530 ], 531 srcs: ["jsr166-tests/src/test/java/**/*.java"], 532 sdk_version: "none", 533 system_modules: "core-all-system-modules", 534 libs: [ 535 "junit", 536 ], 537} 538 539// A filegroup that provides access to a source file for a toolchain test that 540// checks Java 9 language features are handled properly by JarJar. 541filegroup { 542 name: "core-java-9-language-features-source", 543 srcs: ["luni/src/main/java/libcore/internal/Java9LanguageFeatures.java"], 544 visibility: ["//libcore/luni/src/test/java9language"], 545} 546 547genrule { 548 name: "core-tests-smali-dex", 549 srcs: ["luni/src/test/java/**/*.smali"], 550 cmd: "$(location smali) ass --api 28 -o $(out) $(in)", 551 out: ["core-tests-smali.dex"], 552 tools: ["smali"], 553} 554 555// Builds the core-tests library. 556java_test { 557 name: "core-tests", 558 visibility: [ 559 "//cts/tests/libcore/luni", 560 ], 561 defaults: ["libcore_java_defaults"], 562 hostdex: true, 563 srcs: [ 564 "dalvik/src/test/java/**/*.java", 565 "dalvik/test-rules/src/test/java/**/*.java", 566 "dom/src/test/java/**/*.java", 567 "harmony-tests/src/test/java/**/*.java", 568 "json/src/test/java/**/*.java", 569 "luni/src/test/java/**/*.java", 570 "test-rules/src/test/java/**/*.java", 571 "xml/src/test/java/**/*.java", 572 ], 573 exclude_srcs: [ 574 "harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/*.java", 575 "luni/src/test/java/libcore/java/util/zip/Zip64Test.java", 576 "luni/src/test/java/libcore/java/util/zip/Zip64FileTest.java", 577 "luni/src/test/java/libcore/javax/crypto/**/*.java", 578 "luni/src/test/java/libcore/javax/net/ssl/**/*.java", 579 "luni/src/test/java/org/apache/harmony/crypto/**/*.java", 580 ], 581 582 java_resource_dirs: [ 583 "*/src/test/java", 584 "*/src/test/resources", 585 ], 586 exclude_java_resource_dirs: [ 587 "ojluni/src/test/java", 588 "ojluni/src/test/resources", 589 ], 590 591 java_resources: [ 592 ":annotations-test", 593 ":filesystemstest", 594 ":parameter-metadata-test", 595 ":core-tests-smali-dex", 596 ], 597 598 sdk_version: "none", 599 system_modules: "core-all-system-modules", 600 libs: [ 601 "okhttp", 602 "bouncycastle", 603 ], 604 605 static_libs: [ 606 "core-compat-test-rules", 607 "core-java-9-language-tests", 608 "core-test-rules", 609 "core-tests-support", 610 "junit-params", 611 "libcore-crypto-tests", 612 "mockftpserver", 613 "mockito-target", 614 "mockwebserver", 615 "nist-pkix-tests", 616 "slf4j-jdk14", 617 "sqlite-jdbc", 618 "tzdata-testing", 619 "truth-prebuilt-jar", 620 ], 621 622 errorprone: { 623 javacflags: [ 624 "-Xep:TryFailThrowable:ERROR", 625 "-Xep:ComparisonOutOfRange:ERROR", 626 ], 627 }, 628 629 test_config: "AndroidTest-core-tests.xml", 630} 631 632java_test { 633 name: "libcore-crypto-tests", 634 635 visibility: [ 636 "//art/build/sdk", 637 "//external/conscrypt/apex/tests", 638 ], 639 srcs: [ 640 "harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/*.java", 641 "luni/src/test/java/libcore/javax/crypto/**/*.java", 642 "luni/src/test/java/libcore/javax/net/ssl/**/*.java", 643 "luni/src/test/java/org/apache/harmony/crypto/**/*.java", 644 ], 645 exclude_srcs: [ 646 "luni/src/test/java/org/apache/harmony/crypto/tests/javax/crypto/SealedObjectTest.java", 647 ], 648 649 java_resource_dirs: [ 650 "luni/src/test/java", 651 "luni/src/test/resources", 652 "support/src/test/java", 653 ], 654 655 sdk_version: "none", 656 system_modules: "core-all-system-modules", 657 658 static_libs: [ 659 "core-test-rules", 660 "core-tests-support", 661 "junit-params", 662 "mockito-target", 663 ], 664} 665 666// Builds the core-ojtests library that contains test code from OpenJDK. 667java_test { 668 name: "core-ojtests", 669 defaults: ["libcore_java_defaults"], 670 hostdex: true, 671 672 srcs: [ 673 "ojluni/src/test/java/**/*.java", 674 ], 675 java_resource_dirs: [ 676 "ojluni/src/test/java", 677 "ojluni/src/test/resources", 678 ], 679 680 sdk_version: "none", 681 system_modules: "core-all-system-modules", 682 libs: [ 683 "okhttp", 684 "bouncycastle", 685 ], 686 687 static_libs: ["testng"], 688 689 // ojluni/src/test/java/util/stream/{bootlib,boottest} 690 // contains tests that are in packages from java.base; 691 // By default, OpenJDK 9's javac will only compile such 692 // code if it's declared to also be in java.base at 693 // compile time. 694 // 695 // For now, we use patch_module to put all sources 696 // and dependencies from this make target into java.base; 697 // other source directories in this make target are in 698 // packages not from java.base; if this becomes a problem 699 // in future, this could be addressed eg. by splitting 700 // boot{lib,test} out into a separate make target, 701 // deleting those tests or moving them to a different 702 // package. 703 patch_module: "java.base", 704} 705 706// Builds the core-ojtests-public library. Excludes any private API tests. 707// Like core-ojtests but smaller. 708java_test { 709 name: "core-ojtests-public", 710 visibility: [ 711 "//cts/tests/libcore/ojluni", 712 ], 713 defaults: ["libcore_java_defaults"], 714 srcs: [ 715 "ojluni/src/test/java/**/*.java", 716 ], 717 // Filter out the following: 718 // 1.) DeserializeMethodTest and SerializedLambdaTest, because they depends on stub classes 719 // and won't actually run, and 720 // 2.) util/stream/boot*. Those directories contain classes in the package java.util.stream; 721 // excluding them means we don't need patch_module: "java.base" 722 exclude_srcs: [ 723 "**/DeserializeMethodTest.java", 724 "**/SerializedLambdaTest.java", 725 "ojluni/src/test/java/util/stream/boot*/**/*", 726 ], 727 java_resource_dirs: [ 728 "ojluni/src/test/java", 729 "ojluni/src/test/resources", 730 // Include source code as part of JAR 731 "ojluni/src/test/dist", 732 ], 733 734 sdk_version: "none", 735 system_modules: "core-all-system-modules", 736 libs: [ 737 "bouncycastle", 738 "okhttp", 739 "testng", 740 ], 741} 742 743// Exports annotated stubs source files in ojluni/annotations/sdk to make them 744// available to metalava. Used for nullability annotations in OpenJDK source. 745droiddoc_exported_dir { 746 name: "ojluni-annotated-sdk-stubs", 747 path: "ojluni/annotations/sdk", 748} 749 750droiddoc_exported_dir { 751 name: "ojluni-annotated-nullability-stubs", 752 path: "ojluni/annotations/sdk/nullability", 753} 754 755// Exports annotated stubs source files in ojluni/annotations/mmodules to make 756// them available to metalava. Used for core platform API and intra-core API 757// annotations in OpenJDK source. 758droiddoc_exported_dir { 759 name: "ojluni-annotated-mmodule-stubs", 760 visibility: [ 761 "//libcore/mmodules/core_platform_api", 762 "//libcore/mmodules/intracoreapi", 763 ], 764 path: "ojluni/annotations/mmodule", 765} 766 767// A file containing the list of tags that are "known" to us from the OpenJdk 768// source code and so should not cause an error or warning. 769filegroup { 770 name: "known-oj-tags", 771 visibility: [ 772 "//frameworks/base", 773 ], 774 srcs: [ 775 "known_oj_tags.txt", 776 ], 777} 778 779// A special set of stubs containing the minimal set of self consistent 780// classes for which a system module can be created. Every system module must 781// contain the java.lang classes so the set was constructed by starting with 782// the java.lang classes and then adding their transitive dependencies without 783// splitting packages. So, if one class from a package is used then all classes 784// in that package were added to the set. 785// 786// Needed for java-current-stubs-system-modules. 787droidstubs { 788 name: "java-current-stubs-source", 789 srcs: [ 790 ":core_oj_api_files", 791 ":core_libart_api_files", 792 ], 793 java_version: "1.9", 794 installable: false, 795 sdk_version: "none", 796 system_modules: "none", 797 798 args: "--stub-packages java.*:javax.*:org.w3c.dom.*:org.xml.sax.*", 799} 800 801java_library { 802 name: "java.current.stubs", 803 srcs: [":java-current-stubs-source"], 804 errorprone: { 805 javacflags: [ 806 "-Xep:MissingOverride:OFF", 807 ], 808 }, 809 patch_module: "java.base", 810 sdk_version: "none", 811 system_modules: "none", 812} 813 814// A special set of system modules needed to build art.module.public.api.stubs 815// that contain nullability annotations when targeting java language level 1.9 816// and above. 817java_system_modules { 818 name: "java-current-stubs-system-modules", 819 libs: [ 820 // Minimal set of classes required for a system module. 821 "java.current.stubs", 822 823 // The nullability annotations used by the generated stubs. 824 "stub-annotations", 825 ], 826} 827 828// http://b/129765390 Rewrite links to "platform" or "technotes" folders 829// which are siblings (and thus outside of) {@docRoot}. 830// 831// We have to escape \ as \\ and $ as $$ here because they get resolved by 832// different layers of the build tooling. The arguments are wrapped in '' so 833// that the shell doesn't add yet another level of escaping. 834rewrite_openjdk_doc_args = "--replace-documentation " + 835 // packages whose descendants to apply replacement to (all packages from 836 // libcore/ojluni/src/main/java that contribute to documentation). 837 "com.sun:java:javax:jdk.net:sun " + 838 // regex of the string to replace 839 "'(<a\\s+href\\s?=[\\*\\s]*\")(?:(?:\\{@docRoot\\}/\\.\\./)|(?:(?:\\.\\./)+))((?:platform|technotes).+)\">' " + 840 // replacement (with $1, $2 backreferences to the regex groups) 841 "'$$1https://docs.oracle.com/javase/8/docs/$$2\">' " 842 843// Generates stubs for the parts of the public SDK API provided by the ART module. 844// 845// Only for use by art.module.public.api.stubs target below and the building of the 846// public API. 847droidstubs { 848 name: "art-module-public-api-stubs-source", 849 visibility: [ 850 "//frameworks/base", 851 ], 852 srcs: [ 853 ":core_oj_api_files", 854 ":core_libart_api_files", 855 ], 856 java_version: "1.9", 857 installable: false, 858 sdk_version: "none", 859 system_modules: "java-current-stubs-system-modules", 860 libs: [ 861 // Provide access to I18N constants that are used to initialize 862 // constants in the public API. i.e. to allow the value of the 863 // java.text.CollectionElementIterator.NULLORDER to be initialized from 864 // android.icu.text.CollationElementIterator.NULLORDER. 865 "i18n.module.intra.core.api.stubs", 866 ], 867 868 args: rewrite_openjdk_doc_args, 869 870 create_doc_stubs: true, 871 872 // Emit nullability annotations from the source to the stub files. 873 annotations_enabled: true, 874 875 merge_annotations_dirs: [ 876 "ojluni-annotated-sdk-stubs", 877 ], 878} 879 880// A stubs target containing the parts of the public SDK API provided by the ART module. 881java_library { 882 name: "art.module.public.api.stubs", 883 srcs: [":art-module-public-api-stubs-source"], 884 errorprone: { 885 javacflags: [ 886 "-Xep:MissingOverride:OFF", 887 ], 888 }, 889 patch_module: "java.base", 890 sdk_version: "none", 891 system_modules: "java-current-stubs-system-modules", 892} 893 894// Used when compiling higher-level code against art.module.public.api.stubs. 895// 896// This is only intended for use within core libraries and must not be used 897// from outside. 898java_system_modules { 899 name: "art-module-public-api-stubs-system-modules", 900 visibility: [ 901 "//art/build/sdk", 902 "//external/conscrypt", 903 "//external/icu/android_icu4j", 904 "//external/wycheproof", 905 ], 906 libs: [ 907 "art.module.public.api.stubs", 908 // This one is not on device but it's needed when javac compiles code 909 // containing lambdas. 910 "core-lambda-stubs-for-system-modules", 911 // This one is not on device but it's needed when javac compiles code 912 // containing @Generated annotations produced by some code generation 913 // tools. 914 // See http://b/123891440. 915 "core-generated-annotation-stubs", 916 917 // Ensure that core libraries that depend on the public API can access 918 // the UnsupportedAppUsage, CorePlatformApi and IntraCoreApi 919 // annotations. 920 "art.module.api.annotations.for.system.modules", 921 922 // Make nullability annotations available when compiling public stubs. 923 // They are provided as a separate library because while the 924 // annotations are not themselves part of the public API provided by 925 // this module they are used in the stubs. 926 "stub-annotations", 927 ], 928} 929 930// A stubs target containing the parts of the public SDK API provided by the 931// core library. 932// 933// Don't use this directly, use "sdk_version: core_current". 934java_library { 935 name: "core.current.stubs", 936 visibility: ["//visibility:public"], 937 static_libs: [ 938 "art.module.public.api.stubs", 939 "conscrypt.module.public.api.stubs", 940 "i18n.module.public.api.stubs", 941 ], 942 sdk_version: "none", 943 system_modules: "none", 944 945 dist: { 946 targets: [ 947 "sdk", 948 "win_sdk", 949 ], 950 }, 951} 952 953// Distributed with the SDK for turning into system modules to compile apps 954// against. 955java_library { 956 name: "core-current-stubs-for-system-modules", 957 visibility: ["//development/sdk"], 958 static_libs: [ 959 "core.current.stubs", 960 // This one is not on device but it's needed when javac compiles code 961 // containing lambdas. 962 "core-lambda-stubs-for-system-modules", 963 // This one is not on device but it's needed when javac compiles code 964 // containing @Generated annotations produced by some code generation 965 // tools. 966 // See http://b/123891440. 967 "core-generated-annotation-stubs", 968 ], 969 sdk_version: "none", 970 system_modules: "none", 971 dist: { 972 dest: "core-for-system-modules.jar", 973 targets: [ 974 "sdk", 975 "win_sdk", 976 ], 977 }, 978} 979 980// Used when compiling higher-level code against core.current.stubs. 981java_system_modules { 982 name: "core-current-stubs-system-modules", 983 visibility: ["//visibility:public"], 984 libs: [ 985 "core-current-stubs-for-system-modules", 986 ], 987} 988 989// Target for validating nullability annotations for correctness and 990// completeness. To check that there are no nullability errors: 991// m art-module-public-api-stubs-nullability-validation 992// To check that there are only the expected nullability warnings: 993// m art-module-public-api-stubs-nullability-validation-check-nullability-warnings 994// (If that check fails, it will provide instructions on how to proceed, 995// including the command to run to update the expected warnings file.) 996droidstubs { 997 name: "art-module-public-api-stubs-nullability-validation", 998 srcs: [":art_module_api_files"], 999 installable: false, 1000 sdk_version: "none", 1001 system_modules: "none", 1002 annotations_enabled: true, 1003 args: "--hide-annotation libcore.api.Hide " + 1004 "--validate-nullability-from-merged-stubs ", 1005 merge_inclusion_annotations_dirs: ["ojluni-annotated-mmodule-stubs"], 1006 merge_annotations_dirs: [ 1007 // N.B. Stubs in this filegroup will be validated: 1008 "ojluni-annotated-nullability-stubs", 1009 ], 1010 // The list of classes which have nullability annotations included in the source. 1011 // (This is in addition to those which have annotations in the merged stubs.) 1012 validate_nullability_from_list: "nullability_annotated_classes.txt", 1013 // The expected set of warnings about missing annotations: 1014 check_nullability_warnings: "nullability_warnings.txt", 1015} 1016 1017// A host library containing time zone related classes. Used for 1018// host-side tools and tests that have to deal with Android 1019// time zone data. 1020java_library_host { 1021 name: "timezone-host", 1022 visibility: [ 1023 "//art/build/sdk", 1024 "//system/timezone/distro/core", 1025 ], 1026 srcs: [":timezone_host_files"], 1027} 1028 1029// A special set of system modules for building the following library for use 1030// in the art-module-public-api-system-modules. 1031java_system_modules { 1032 name: "api-annotations-system-modules", 1033 libs: [ 1034 "art.module.public.api.stubs", 1035 ], 1036} 1037 1038// A library that contains annotations that define API surfaces (core 1039// platform, intra core and the hidden API) along with some supporting 1040// constants. The annotations are source only and do not introduce any runtime 1041// dependencies. Specially built for use in system modules definitions to 1042// avoid introducing compile time cycles. 1043java_library { 1044 name: "art.module.api.annotations.for.system.modules", 1045 srcs: [ 1046 ":api_surface_annotation_files", 1047 ], 1048 1049 installable: false, 1050 sdk_version: "none", 1051 system_modules: "api-annotations-system-modules", 1052 patch_module: "java.base", 1053} 1054 1055// Create a library containing the api surface annotations, built against 1056// core_current for use by the annotation processor in frameworks/base. 1057java_library { 1058 name: "art.module.api.annotations", 1059 visibility: [ 1060 "//frameworks/base", 1061 ], 1062 host_supported: true, 1063 srcs: [ 1064 ":api_surface_annotation_files", 1065 ], 1066 java_version: "1.9", 1067 sdk_version: "core_current", 1068} 1069