// Copyright (C) 2007 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Definitions for building the Android core library and associated tests. // // The Android core library provides low-level APIs for use by the rest of the // Android software stack. It is made up of various parts, some of which can be // found in libcore/ and other parts that can be found in various external/ // directories. // // libcore has some sub-directories that follow a common structure: // e.g. dalvik, dom, harmony-tests, json, jsr166-tests, luni, libart, ojluni, // support, xml, xmlpull. // // The structure of these is generally: // // src/ // main/ # To be shipped on every device. // java/ # Java source for library code. // native/ # C/C++ source for library code. // resources/ # Support files. // test/ # Built only on demand, for testing. // java/ # Java source for tests. // native/ # C/C++ source for tests (rare). // resources/ # Support files. // // All subdirectories are optional. build = [ "openjdk_java_files.bp", "non_openjdk_java_files.bp", ] // The Java files and their associated resources. filegroup { name: "core-luni-resources", visibility: [ "//libcore:__subpackages__", ], path: "luni/src/main/java/", srcs: [ "luni/src/main/java/java/util/logging/logging.properties", "luni/src/main/java/java/security/security.properties", ], } filegroup { name: "core-ojluni-resources", visibility: [ "//libcore:__subpackages__", ], path: "ojluni/src/main/resources/", srcs: [ "ojluni/src/main/resources/**/*", ], } core_resources = [ ":core-luni-resources", ":core-ojluni-resources", ] // The source files that go into core-oj. filegroup { name: "core_oj_java_files", visibility: [ "//libcore:__subpackages__", ], srcs: [":openjdk_java_files"], } // OpenJDK source is not annotated with @hide so we need this separate // filegroup for just the parts that contribute to the API. filegroup { name: "core_oj_api_files", srcs: [":openjdk_javadoc_files"], } // The source files that go into core-libart. filegroup { name: "core_libart_java_files", visibility: [ "//libcore:__subpackages__", ], srcs: [ ":non_openjdk_java_files", ], } // Some parts of libart are not annotated with @hide so we need this separate // filegroup for just the parts that contribute to the API. filegroup { name: "core_libart_api_files", srcs: [ ":non_openjdk_javadoc_files", ], } // The set of files for the ART module that contribute to one or more API // surfaces. This includes files that are in the public API as well as those // that are not but which have been marked up with @hide plus one or more of // the API defining annotations. // // Some source files in :core_oj_api_files and :openjdk_mmodule_extra_files are // annotated by applying annotations to the .annotated.java stubs files in // ojluni/annotated/mmodules and rather than in the original source. See the comments // in openjdk_java_files.bp for more details. filegroup { name: "art_module_api_files", visibility: [ "//libcore:__subpackages__", ], srcs: [ ":apache-xml_api_files", ":bouncycastle_java_files", ":core_oj_api_files", ":core_libart_api_files", ":okhttp_api_files", ":openjdk_mmodule_extra_files", ], } java_defaults { name: "libcore_java_defaults", javacflags: [ //"-Xlint:all", //"-Xlint:-serial,-deprecation,-unchecked", ], dxflags: ["--core-library"], errorprone: { javacflags: [ "-Xep:MissingOverride:OFF", // Ignore missing @Override. "-Xep:ConstantOverflow:WARN", // Known constant overflow in SplittableRandom ], }, min_sdk_version: "31", } // // Build for the target (device). // // A target used to bootstrap compilation for the core library. // // See core-all-system-modules for more details. java_library { name: "core-all", defaults: ["libcore_java_defaults"], srcs: [ // Use the source code for the I18N module intra core API as using the // compiled version does not work due to limitations in either soong or the javac // toolchain. See http://b/142056316 for more details. ":i18n.module.intra.core.api{.public.stubs.source}", ":core_oj_java_files", ":core_libart_java_files", // framework-api-annotations contain API annotations, e.g. @SystemApi. ":framework-api-annotations", ":openjdk_lambda_stub_files", ":openjdk_generated_annotation_stub_files", ":app-compat-annotations-source", // Use the okhttp source too to allow libcore code to reference it // directly. ":okhttp_impl_files", ], sdk_version: "none", system_modules: "none", patch_module: "java.base", openjdk9: { srcs: ["luni/src/module/java/module-info.java"], }, java_resources: core_resources, java_version: "1.9", installable: false, plugins: [ "compat-changeid-annotation-processor", "unsupportedappusage-annotation-processor", ], libs: [ "conscrypt.module.intra.core.api", ], } platform_compat_config { name: "libcore-platform-compat-config", src: ":core-all", visibility: [ "//art/build/apex", "//art/build/sdk", ], } // A system modules definition for use by core library targets only. It only // contains the core-all jar, which contains the classes that end up in core-oj, // core-libart as well as the lambda stubs needed to compile Java lambda code. // It does not contain other parts of core library like conscrypt, bouncycastle, // etc. This system_modules definition is used to bootstrap compilation for // other parts of the core library like core-oj, core-libart, conscrypt, // bouncycastle, etc. It is also used to compile Libcore tests, as well as ART // Java tests (run-tests). java_system_modules { name: "core-all-system-modules", // Visibility is deliberately restricted to a small set of build modules that // the core library team control. visibility: [ "//art/test:__subpackages__", "//external/apache-harmony:__subpackages__", "//external/apache-xml", "//external/okhttp", "//libcore:__subpackages__", ], libs: ["core-all"], } // Contains the parts of core library associated with OpenJDK. java_library { name: "core-oj", visibility: [ "//art/build/apex", "//art/build/sdk", "//external/wycheproof", "//libcore/benchmarks", "//packages/modules/ArtPrebuilt", ], apex_available: [ "com.android.art", "com.android.art.debug", ], defaults: ["libcore_java_defaults"], installable: true, hostdex: true, srcs: [":core_oj_java_files"], java_resources: core_resources, sdk_version: "none", system_modules: "core-all-system-modules", patch_module: "java.base", jacoco: { exclude_filter: [ "java.lang.Class", "java.lang.Long", "java.lang.Number", "java.lang.Object", "java.lang.String", "java.lang.invoke.MethodHandle", "java.lang.ref.Reference", "java.lang.reflect.Proxy", "java.util.AbstractMap", "java.util.HashMap", "java.util.HashMap$Node", "java.util.Map", ], }, notice: "ojluni/NOTICE", hiddenapi_additional_annotations: [ "core-oj-hiddenapi-annotations", ], } // Contains parts of core library not associated with OpenJDK. Contains not // just java.*, javax.* code but also android.system.* and various internal // libcore.* packages. java_library { name: "core-libart", visibility: [ "//art/build/apex", "//art/build/sdk", "//external/wycheproof", "//libcore/benchmarks", "//packages/modules/ArtPrebuilt", ], apex_available: [ "com.android.art", "com.android.art.debug", ], defaults: ["libcore_java_defaults"], installable: true, hostdex: true, srcs: [":core_libart_java_files"], java_version: "1.9", sdk_version: "none", system_modules: "core-all-system-modules", patch_module: "java.base", jacoco: { exclude_filter: [ "java.lang.DexCache", "dalvik.system.ClassExt", ], }, target: { hostdex: { required: [ // Files used to simulate the /system, runtime APEX and tzdata // APEX dir structure on host. "icu_tzdata.dat_host_tzdata_apex", "tzdata_host", "tzdata_host_tzdata_apex", "tzlookup.xml_host_tzdata_apex", "tz_version_host", "tz_version_host_tzdata_apex", ], }, darwin: { enabled: false, }, }, } // Java library for use on host, e.g. by robolectric or layoutlib. java_library { name: "core-libart-for-host", visibility: [ "//art/build/sdk", "//external/robolectric-shadows", "//frameworks/layoutlib", ], static_libs: [ "core-libart", ], sdk_version: "none", system_modules: "none", } // Provided solely to contribute information about which hidden parts of the // core-oj API are used by apps. // // Usually, e.g. for core-libart, the UnsupportedAppUsage annotations are // added to the source that is compiled directly into the bootjar and the build // system extracts the information about UnsupportedAppUsage directly from // there. // // This approach of having separate annotated source and a separate build // target was taken for ojluni to avoid having to maintain local patches in the // ojluni source for UnsupportedAppUsage annotations as that would make it more // difficult to pull down changes from upstream. // java_library { name: "core-oj-hiddenapi-annotations", // Do not allow this to be accessed from outside this directory. visibility: ["//visibility:private"], defaults: ["libcore_java_defaults"], compile_dex: true, srcs: [":openjdk_hiddenapi_javadoc_files"], sdk_version: "none", system_modules: "core-all-system-modules", patch_module: "java.base", plugins: ["unsupportedappusage-annotation-processor"], } java_defaults { name: "core_lambda_stubs_defaults", defaults: ["libcore_java_defaults"], hostdex: true, sdk_version: "none", system_modules: "core-all-system-modules", patch_module: "java.base", notice: "ojluni/NOTICE", installable: false, include_srcs: true, } // Creates a jar that exists to satisfy javac when compiling source code that // contains lambdas. This contains all classes / methods required by javac // when generating invoke-dynamic lambda implementation code, even those that // are also in the public SDK API from API level 26 onwards. java_library { name: "core-lambda-stubs", visibility: ["//visibility:public"], defaults: ["core_lambda_stubs_defaults"], srcs: [ ":openjdk_lambda_stub_files", ":openjdk_lambda_duplicate_stub_files", ], // This jar is packaged as part of the SDK, use -target 8 so that it works // with old JDKs. java_version: "1.8", } // An alternative to core-lambda-stubs that omits openjdk_lambda_duplicate_stub_files // because those classes are also part of the core library public SDK API // (since API level 26). java_library { name: "core-lambda-stubs-for-system-modules", visibility: [ "//libcore/mmodules/core_platform_api", ], defaults: ["core_lambda_stubs_defaults"], srcs: [ ":openjdk_lambda_stub_files", ], include_srcs: true, } // Creates a jar that exists to satisfy javac when compiling source code that // contains @Generated annotations, which are produced by some code generation // tools (notably dagger) but aren't part of the Android API. // See http://b/123891440. java_library { name: "core-generated-annotation-stubs", visibility: [ "//libcore/mmodules/core_platform_api", ], defaults: ["libcore_java_defaults"], srcs: [ ":openjdk_generated_annotation_stub_files", ], hostdex: true, sdk_version: "none", system_modules: "core-all-system-modules", patch_module: "java.base", notice: "ojluni/NOTICE", installable: false, include_srcs: true, } // Builds libcore test rules java_library_static { name: "core-test-rules", visibility: [ "//art/build/sdk", "//cts/tests/tests/util", "//external/conscrypt", "//external/conscrypt/apex/tests", "//frameworks/base/location/tests/locationtests", "//frameworks/base/core/tests/coretests", "//frameworks/base/wifi/tests", "//packages/modules/Wifi/framework/tests", ], hostdex: true, srcs: [ "dalvik/test-rules/src/main/**/*.java", "test-rules/src/main/**/*.java", ], static_libs: ["junit"], sdk_version: "none", system_modules: "core-all-system-modules", } // Builds platform_compat test rules java_library_static { name: "core-compat-test-rules", visibility: [ "//art/build/sdk", "//frameworks/base/tests/PlatformCompatGating/test-rules", ], srcs: [ "luni/src/main/java/android/compat/**/*.java", "test-rules/src/platform_compat/**/*.java", "luni/src/main/java/libcore/api/CorePlatformApi.java", "luni/src/main/java/libcore/api/IntraCoreApi.java", ], static_libs: [ "junit", "guava", ], sdk_version: "none", system_modules: "core-all-system-modules", // This builds classes that are in the java.base Java module: patch_module: "java.base", hostdex: true, } // Builds the core-tests-support library used by various tests. java_library_static { name: "core-tests-support", visibility: [ "//art/build/sdk", "//cts/apps/CtsVerifier", "//cts/tests/tests/keystore", "//cts/tests/tests/net", "//cts/tests/tests/net/api23Test", "//external/apache-harmony", "//frameworks/base/core/tests/coretests", "//libcore/benchmarks", "//packages/apps/KeyChain/tests", "//system/timezone/distro/core", "//packages/modules/Connectivity/tests:__subpackages__", ], hostdex: true, srcs: ["support/src/test/java/**/*.java"], sdk_version: "core_platform", libs: ["junit"], static_libs: [ "bouncycastle-unbundled", "bouncycastle-bcpkix-unbundled", "bouncycastle-ocsp-unbundled", ], } // Builds the jsr166-tests library. java_test { name: "jsr166-tests", visibility: [ "//art/build/sdk", "//cts/tests/libcore/jsr166", ], srcs: ["jsr166-tests/src/test/java/**/*.java"], sdk_version: "none", system_modules: "core-all-system-modules", libs: [ "junit", ], } // A filegroup that provides access to a source file for a toolchain test that // checks Java 9 language features are handled properly by JarJar. filegroup { name: "core-java-9-language-features-source", srcs: ["luni/src/main/java/libcore/internal/Java9LanguageFeatures.java"], visibility: ["//libcore/luni/src/test/java9language"], } genrule { name: "core-tests-smali-dex", srcs: ["luni/src/test/java/**/*.smali"], cmd: "$(location smali) ass --api 28 -o $(out) $(in)", out: ["core-tests-smali.dex"], tools: ["smali"], } filegroup { name: "core-ojtests-javax-resources", // Set path to keep the resources and .class files in the same directory in the jar file. path: "ojluni/src", srcs: ["ojluni/src/test/javax/**/*"], exclude_srcs: ["ojluni/src/test/javax/**/*.java"], } // Builds the core-tests library. java_test { name: "core-tests", visibility: [ "//art/build/sdk", "//cts/tests/libcore/luni", ], defaults: ["libcore_java_defaults"], hostdex: true, srcs: [ "dalvik/src/test/java/**/*.java", "dalvik/test-rules/src/test/java/**/*.java", "dom/src/test/java/**/*.java", "harmony-tests/src/test/java/**/*.java", "json/src/test/java/**/*.java", "luni/src/test/java/**/*.java", "test-rules/src/test/java/**/*.java", "xml/src/test/java/**/*.java", ], exclude_srcs: [ "harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/*.java", "luni/src/test/java/libcore/java/util/zip/Zip64Test.java", "luni/src/test/java/libcore/java/util/zip/Zip64FileTest.java", "luni/src/test/java/libcore/javax/crypto/**/*.java", "luni/src/test/java/libcore/javax/net/ssl/**/*.java", "luni/src/test/java/org/apache/harmony/crypto/**/*.java", ], java_resource_dirs: [ "*/src/test/java", "*/src/test/resources", ], exclude_java_resource_dirs: [ "ojluni/src/test/java", "ojluni/src/test/javax", "ojluni/src/test/resources", ], java_resources: [ ":annotations-test", ":filesystemstest", ":parameter-metadata-test", ":core-tests-smali-dex", ], sdk_version: "none", system_modules: "core-all-system-modules", libs: [ "okhttp", "bouncycastle", ], static_libs: [ "core-compat-test-rules", "core-java-9-language-tests", "core-test-rules", "core-tests-support", "junit-params", "libcore-crypto-tests", "mockftpserver", "mockito-target", "mockwebserver", "nist-pkix-tests", "slf4j-jdk14", "sqlite-jdbc", "truth-prebuilt-jar", ], errorprone: { javacflags: [ "-Xep:TryFailThrowable:ERROR", "-Xep:ComparisonOutOfRange:ERROR", ], }, test_config: "AndroidTest-core-tests.xml", } java_test { name: "libcore-crypto-tests", visibility: [ "//art/build/sdk", "//external/conscrypt/apex/tests", ], srcs: [ "harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/*.java", "luni/src/test/java/libcore/javax/crypto/**/*.java", "luni/src/test/java/libcore/javax/net/ssl/**/*.java", "luni/src/test/java/libcore/libcore/util/SerializationTester.java", "luni/src/test/java/org/apache/harmony/crypto/**/*.java", ], java_resource_dirs: [ "luni/src/test/java", "luni/src/test/resources", "support/src/test/java", ], sdk_version: "none", system_modules: "core-all-system-modules", static_libs: [ "core-test-rules", "core-tests-support", "junit-params", "mockito-target", ], } // Builds the core-ojtests library that contains test code from OpenJDK. java_test { name: "core-ojtests", defaults: ["libcore_java_defaults"], hostdex: true, srcs: [ "ojluni/src/test/java/**/*.java", "ojluni/src/test/javax/**/*.java", ], java_resource_dirs: [ "ojluni/src/test/java", "ojluni/src/test/resources", ], java_resources: [ ":core-ojtests-javax-resources", ], sdk_version: "none", system_modules: "core-all-system-modules", libs: [ "okhttp", "bouncycastle", ], static_libs: [ "junit", "testng", ], // ojluni/src/test/java/util/stream/{bootlib,boottest} // contains tests that are in packages from java.base; // By default, OpenJDK 9's javac will only compile such // code if it's declared to also be in java.base at // compile time. // // For now, we use patch_module to put all sources // and dependencies from this make target into java.base; // other source directories in this make target are in // packages not from java.base; if this becomes a problem // in future, this could be addressed eg. by splitting // boot{lib,test} out into a separate make target, // deleting those tests or moving them to a different // package. patch_module: "java.base", } // Builds the core-ojtests-public library. Excludes any private API tests. // Like core-ojtests but smaller. java_test { name: "core-ojtests-public", visibility: [ "//art/build/sdk", "//cts/tests/libcore/ojluni", ], defaults: ["libcore_java_defaults"], srcs: [ "ojluni/src/test/java/**/*.java", "ojluni/src/test/javax/**/*.java", ], // Filter out the following: // 1.) DeserializeMethodTest and SerializedLambdaTest, because they depends on stub classes // and won't actually run, and // 2.) util/stream/boot*. Those directories contain classes in the package java.util.stream; // excluding them means we don't need patch_module: "java.base" exclude_srcs: [ "**/DeserializeMethodTest.java", "**/SerializedLambdaTest.java", "ojluni/src/test/java/util/stream/boot*/**/*", ], java_resource_dirs: [ "ojluni/src/test/java", "ojluni/src/test/resources", // Include source code as part of JAR "ojluni/src/test/dist", ], java_resources: [ ":core-ojtests-javax-resources", ], sdk_version: "none", system_modules: "core-all-system-modules", libs: [ "bouncycastle", "junit", "okhttp", "testng", ], } // Exports annotated stubs source files in ojluni/annotations/sdk to make them // available to metalava. Used for nullability annotations in OpenJDK source. droiddoc_exported_dir { name: "ojluni-annotated-sdk-stubs", visibility: [ "//libcore:__subpackages__", ], path: "ojluni/annotations/sdk", } droiddoc_exported_dir { name: "ojluni-annotated-nullability-stubs", path: "ojluni/annotations/sdk/nullability", } // Exports annotated stubs source files in ojluni/annotations/mmodules to make // them available to metalava. Used for core platform API and intra-core API // annotations in OpenJDK source. droiddoc_exported_dir { name: "ojluni-annotated-mmodule-stubs", visibility: [ "//libcore/mmodules/core_platform_api", "//libcore/mmodules/intracoreapi", ], path: "ojluni/annotations/mmodule", } // A file containing the list of tags that are "known" to us from the OpenJdk // source code and so should not cause an error or warning. filegroup { name: "known-oj-tags", visibility: [ "//frameworks/base", ], srcs: [ "known_oj_tags.txt", ], } // A special set of stubs containing the minimal set of self consistent // classes for which a system module can be created. Every system module must // contain the java.lang classes so the set was constructed by starting with // the java.lang classes and then adding their transitive dependencies without // splitting packages. So, if one class from a package is used then all classes // in that package were added to the set. // // Needed for java-current-stubs-system-modules. droidstubs { name: "java-current-stubs-source", srcs: [ ":core_oj_api_files", ":core_libart_api_files", ], java_version: "1.9", installable: false, sdk_version: "none", system_modules: "none", args: "--stub-packages java.*:javax.*:org.w3c.dom.*:org.xml.sax.*", } java_library { name: "java.current.stubs", srcs: [":java-current-stubs-source"], errorprone: { javacflags: [ "-Xep:MissingOverride:OFF", ], }, patch_module: "java.base", sdk_version: "none", system_modules: "none", } // A special set of system modules needed to build art.module.public.api // that contain nullability annotations when targeting java language level 1.9 // and above. java_system_modules { name: "java-current-stubs-system-modules", libs: [ // Minimal set of classes required for a system module. "java.current.stubs", // The nullability annotations used by the generated stubs. "stub-annotations", ], } // http://b/129765390 Rewrite links to "platform" or "technotes" folders // which are siblings (and thus outside of) {@docRoot}. // // We have to escape \ as \\ and $ as $$ here because they get resolved by // different layers of the build tooling. The arguments are wrapped in '' so // that the shell doesn't add yet another level of escaping. rewrite_openjdk_doc_args = "--replace-documentation " + // packages whose descendants to apply replacement to (all packages from // libcore/ojluni/src/main/java that contribute to documentation). "com.sun:java:javax:jdk.net:sun " + // regex of the string to replace "'(' " + // replacement (with $1, $2 backreferences to the regex groups) "'$$1https://docs.oracle.com/javase/8/docs/$$2\">' " java_library { name: "framework-api-annotations-lib", srcs: [":framework-api-annotations"], sdk_version: "none", patch_module: "java.base", system_modules: "core-all-system-modules", installable: false, visibility: [ "//visibility:private", ], } // Define the public SDK API provided by the ART module. java_sdk_library { name: "art.module.public.api", visibility: [ "//art/build/sdk", "//libcore/mmodules/core_platform_api", "//frameworks/base", "//frameworks/base/api", ], srcs: [ ":core_oj_api_files", ":core_libart_api_files", // Some source files in :core_oj_api_files and :openjdk_mmodule_extra_files are // annotated by applying annotations to the .annotated.java stubs files in // ojluni/annotated/mmodules and rather than in the original source. See the comments // in openjdk_java_files.bp for more details. ":openjdk_mmodule_extra_files", ":okhttp_api_files", ], libs: [ // Put framework-api-annotations into libs to avoid exposing the definition of framework's // annotations from libcore (wrong place) instead of framework (correct place). "framework-api-annotations-lib", // Provide access to I18N constants that are used to initialize // constants in the public API. i.e. to allow the value of the // java.text.CollectionElementIterator.NULLORDER to be initialized from // android.icu.text.CollationElementIterator.NULLORDER. "i18n.module.intra.core.api.stubs", ], stub_only_static_libs: ["notices-for-stubs-jar"], java_version: "1.9", // Make dex jars for the stubs available for use by hiddenapi processing. compile_dex: true, public: { enabled: true, }, system: { enabled: true, }, module_lib: { enabled: true, }, api_only: true, droiddoc_options: [ rewrite_openjdk_doc_args, "--force-convert-to-warning-nullability-annotations +*:-android.*:+android.icu.*:-dalvik.* ", "--hide-annotation libcore.api.Hide", ], merge_inclusion_annotations_dirs: ["ojluni-annotated-mmodule-stubs"], // Emit nullability annotations from the source to the stub files. annotations_enabled: true, merge_annotations_dirs: [ "metalava-manual", "ojluni-annotated-sdk-stubs", ], doctag_files: [ ":known-oj-tags", ], errorprone: { javacflags: [ "-Xep:MissingOverride:OFF", ], }, patch_module: "java.base", sdk_version: "none", system_modules: "java-current-stubs-system-modules", // The base name for the artifacts that are automatically published to the // dist and which end up in one of the sub-directories of prebuilts/sdk. // As long as this matches the name of the artifacts in prebuilts/sdk then // the API will be checked for compatibility against the latest released // version of the API. dist_stem: "art", dist_group: "android", } // Used when compiling higher-level code against art.module.public.api.stubs. // // This is only intended for use within core libraries and must not be used // from outside. java_system_modules { name: "art-module-public-api-stubs-system-modules", visibility: [ "//art/build/sdk", "//external/conscrypt", "//external/icu/android_icu4j", "//external/wycheproof", ], libs: [ "art.module.public.api.stubs", // This one is not on device but it's needed when javac compiles code // containing lambdas. "core-lambda-stubs-for-system-modules", // This one is not on device but it's needed when javac compiles code // containing @Generated annotations produced by some code generation // tools. // See http://b/123891440. "core-generated-annotation-stubs", // Ensure that core libraries that depend on the public API can access // the UnsupportedAppUsage, CorePlatformApi and IntraCoreApi // annotations. "art.module.api.annotations.for.system.modules", // Make nullability annotations available when compiling public stubs. // They are provided as a separate library because while the // annotations are not themselves part of the public API provided by // this module they are used in the stubs. "stub-annotations", ], } // Used when compiling higher-level code against art.module.public.api.stubs.module_lib. // // This is only intended for use within core libraries and must not be used // from outside. java_system_modules { name: "art-module-lib-api-stubs-system-modules", visibility: [ "//art/build/sdk", "//external/conscrypt", "//external/icu/android_icu4j", ], libs: [ "art.module.public.api.stubs.module_lib", ], } // A stubs target containing the parts of the public SDK API provided by the // core library. // // Don't use this directly, use "sdk_version: core_current". java_library { name: "core.current.stubs", visibility: ["//visibility:public"], static_libs: [ "art.module.public.api.stubs", "conscrypt.module.public.api.stubs", "i18n.module.public.api.stubs", ], sdk_version: "none", system_modules: "none", dist: { targets: [ "sdk", "win_sdk", ], }, } // Distributed with the SDK for turning into system modules to compile apps // against. java_library { name: "core-current-stubs-for-system-modules", visibility: ["//development/sdk"], static_libs: [ "core.current.stubs", // This one is not on device but it's needed when javac compiles code // containing lambdas. "core-lambda-stubs-for-system-modules", // This one is not on device but it's needed when javac compiles code // containing @Generated annotations produced by some code generation // tools. // See http://b/123891440. "core-generated-annotation-stubs", ], sdk_version: "none", system_modules: "none", dist: { dest: "core-for-system-modules.jar", targets: [ "sdk", "win_sdk", ], }, } // Used when compiling higher-level code against core.current.stubs. java_system_modules { name: "core-current-stubs-system-modules", visibility: ["//visibility:public"], libs: [ "core-current-stubs-for-system-modules", ], } // A stubs target containing the parts of the public SDK & @SystemApi(MODULE_LIBRARIES) API // provided by the core library. // // Don't use this directly, use "sdk_version: module_current". java_library { name: "core.module_lib.stubs", static_libs: [ "art.module.public.api.stubs.module_lib", // Replace the following with the module-lib correspondence when Conscrypt or i18N module // provides @SystemApi(MODULE_LIBRARIES). Currently, assume that only ART module provides // @SystemApi(MODULE_LIBRARIES). "conscrypt.module.public.api.stubs", "i18n.module.public.api.stubs", ], sdk_version: "none", system_modules: "none", visibility: ["//visibility:private"], } // Used when compiling higher-level code with sdk_version "module_current" java_system_modules { name: "core-module-lib-stubs-system-modules", libs: [ "core.module_lib.stubs", // This one is not on device but it's needed when javac compiles code // containing lambdas. "core-lambda-stubs-for-system-modules", // This one is not on device but it's needed when javac compiles code // containing @Generated annotations produced by some code generation // tools. // See http://b/123891440. "core-generated-annotation-stubs", ], visibility: ["//visibility:public"], } // Target for validating nullability annotations for correctness and // completeness. To check that there are no nullability errors: // m art-module-public-api-stubs-nullability-validation // To check that there are only the expected nullability warnings: // m art-module-public-api-stubs-nullability-validation-check-nullability-warnings // (If that check fails, it will provide instructions on how to proceed, // including the command to run to update the expected warnings file.) droidstubs { name: "art-module-public-api-stubs-nullability-validation", srcs: [":art_module_api_files"], installable: false, sdk_version: "none", system_modules: "none", annotations_enabled: true, args: "--hide-annotation libcore.api.Hide " + "--validate-nullability-from-merged-stubs ", merge_inclusion_annotations_dirs: ["ojluni-annotated-mmodule-stubs"], merge_annotations_dirs: [ // N.B. Stubs in this filegroup will be validated: "ojluni-annotated-nullability-stubs", ], // The list of classes which have nullability annotations included in the source. // (This is in addition to those which have annotations in the merged stubs.) validate_nullability_from_list: "nullability_annotated_classes.txt", // The expected set of warnings about missing annotations: check_nullability_warnings: "nullability_warnings.txt", } // A special set of system modules for building the following library for use // in the art-module-public-api-system-modules. java_system_modules { name: "api-annotations-system-modules", libs: [ "art.module.public.api.stubs", ], } // A library that contains annotations that define API surfaces (core // platform, intra core and the hidden API) along with some supporting // constants. The annotations are source only and do not introduce any runtime // dependencies. Specially built for use in system modules definitions to // avoid introducing compile time cycles. java_library { name: "art.module.api.annotations.for.system.modules", srcs: [ ":api_surface_annotation_files", ], installable: false, sdk_version: "none", system_modules: "api-annotations-system-modules", patch_module: "java.base", } // Create a library containing the api surface annotations, built against // core_current for use by the annotation processor in frameworks/base. java_library { name: "art.module.api.annotations", visibility: [ "//art/build/sdk", "//external/icu/android_icu4j", "//frameworks/base", ], host_supported: true, srcs: [ ":api_surface_annotation_files", ], java_version: "1.9", sdk_version: "core_current", }