// // Copyright (C) 2020 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. // package { default_team: "trendy_team_fwk_core_networking", // See: http://go/android-license-faq default_applicable_licenses: ["Android-Apache-2.0"], } filegroup { name: "framework-connectivity-internal-sources", srcs: [ "src/**/*.java", "src/**/*.aidl", ], path: "src", visibility: [ "//visibility:private", ], } filegroup { name: "framework-connectivity-aidl-export-sources", srcs: [ "aidl-export/**/*.aidl", ], path: "aidl-export", visibility: [ "//visibility:private", ], } // TODO: use a java_library in the bootclasspath instead filegroup { name: "framework-connectivity-sources", defaults: ["framework-sources-module-defaults"], srcs: [ ":framework-connectivity-internal-sources", ":framework-connectivity-aidl-export-sources", ], visibility: ["//packages/modules/Connectivity:__subpackages__"], } java_defaults { name: "framework-connectivity-defaults", defaults: ["framework-module-defaults"], sdk_version: "module_current", min_sdk_version: "30", srcs: [ ":framework-connectivity-sources", ":net-utils-framework-common-srcs", ":framework-connectivity-api-shared-srcs", ], aidl: { generate_get_transaction_name: true, include_dirs: [ // Include directories for parcelables that are part of the stable API, and need a // one-line "parcelable X" .aidl declaration to be used in AIDL interfaces. // TODO(b/180293679): remove these dependencies as they should not be necessary once // the module builds against API (the parcelable declarations exist in framework.aidl) "frameworks/base/core/java", // For framework parcelables "frameworks/native/aidl/binder", // For PersistableBundle.aidl ], }, stub_only_libs: [ "framework-connectivity-t.stubs.module_lib", ], impl_only_libs: [ // TODO: figure out why just using "framework-tethering" uses the stubs, even though both // framework-connectivity and framework-tethering are in the same APEX. "framework-location.stubs.module_lib", "framework-tethering.impl", "framework-wifi.stubs.module_lib", ], static_libs: [ // Not using the latest stable version because all functions in the latest version of // mdns_aidl_interface are deprecated. "mdns_aidl_interface-V1-java", "modules-utils-backgroundthread", "modules-utils-build", "modules-utils-preconditions", "framework-connectivity-javastream-protos", ], impl_only_static_libs: [ "net-utils-device-common-bpf", "net-utils-device-common-struct-base", ], libs: [ "androidx.annotation_annotation", "app-compat-annotations", "framework-connectivity-t.stubs.module_lib", "unsupportedappusage", ], apex_available: [ "com.android.tethering", ], } java_library { name: "framework-connectivity-pre-jarjar", defaults: [ "framework-connectivity-defaults", ], static_libs: [ "httpclient_api", "httpclient_impl", // Framework-connectivity-pre-jarjar is identical to framework-connectivity // implementation, but without the jarjar rules. However, framework-connectivity // is not based on framework-connectivity-pre-jarjar, it's rebuilt from source // to generate the SDK stubs. // Even if the library is included in "impl_only_static_libs" of defaults. This is still // needed because java_library which doesn't understand "impl_only_static_libs". "net-utils-device-common-bpf", "net-utils-device-common-struct-base", ], libs: [ // This cannot be in the defaults clause above because if it were, it would be used // to generate the connectivity stubs. That would create a circular dependency // because the tethering impl depend on the connectivity stubs (e.g., // TetheringRequest depends on LinkAddress). "framework-location.stubs.module_lib", "framework-tethering.impl", "framework-wifi.stubs.module_lib", ], visibility: ["//packages/modules/Connectivity:__subpackages__"], } java_defaults { name: "CronetJavaDefaults", srcs: [":httpclient_api_sources"], libs: [ "androidx.annotation_annotation", ], impl_only_static_libs: [ "httpclient_impl", ], } java_sdk_library { name: "framework-connectivity", defaults: [ "framework-connectivity-defaults", "CronetJavaDefaults", ], installable: true, jarjar_rules: ":framework-connectivity-jarjar-rules", permitted_packages: ["android.net"], impl_library_visibility: [ "//packages/modules/Connectivity/Tethering/apex", // In preparation for future move "//packages/modules/Connectivity/apex", "//packages/modules/Connectivity/framework-t", "//packages/modules/Connectivity/service", "//packages/modules/Connectivity/service-t", "//frameworks/base", // Tests using hidden APIs "//cts/tests/netlegacy22.api", "//cts/tests/tests/app.usage", // NetworkUsageStatsTest "//external/sl4a:__subpackages__", "//frameworks/base/core/tests/bandwidthtests", "//frameworks/base/core/tests/benchmarks", "//frameworks/base/core/tests/utillib", "//frameworks/base/services/tests/VpnTests", "//frameworks/base/tests/vcn", "//frameworks/opt/net/ethernet/tests:__subpackages__", "//frameworks/opt/telephony/tests/telephonytests", "//packages/modules/CaptivePortalLogin/tests", "//packages/modules/Connectivity/staticlibs/testutils", "//packages/modules/Connectivity/staticlibs/tests:__subpackages__", "//packages/modules/Connectivity/Cronet/tests:__subpackages__", "//packages/modules/Connectivity/Tethering/tests:__subpackages__", "//packages/modules/Connectivity/tests:__subpackages__", "//packages/modules/Connectivity/thread/tests:__subpackages__", "//packages/modules/IPsec/tests/iketests", "//packages/modules/NetworkStack/tests:__subpackages__", "//packages/modules/Wifi/service/tests/wifitests", ], lint: { baseline_filename: "lint-baseline.xml", }, aconfig_declarations: [ "com.android.net.flags-aconfig", ], } platform_compat_config { name: "connectivity-platform-compat-config", src: ":framework-connectivity", } cc_library_shared { name: "libframework-connectivity-jni", min_sdk_version: "30", cflags: [ "-Wall", "-Werror", "-Wno-unused-parameter", // Don't warn about S API usage even with // min_sdk 30: the library is only loaded // on S+ devices "-Wno-unguarded-availability", "-Wthread-safety", ], srcs: [ "jni/android_net_NetworkUtils.cpp", "jni/onload.cpp", ], shared_libs: [ "libandroid", "liblog", "libnativehelper", ], header_libs: [ "bpf_headers", "dnsproxyd_protocol_headers", ], stl: "none", apex_available: [ "com.android.tethering", ], } filegroup { name: "framework-connectivity-protos", srcs: [ "proto/**/*.proto", ], visibility: ["//frameworks/base"], } java_library { name: "framework-connectivity-javastream-protos", proto: { type: "stream", }, srcs: [":framework-connectivity-protos"], installable: false, sdk_version: "module_current", min_sdk_version: "30", apex_available: [ "com.android.tethering", ], } java_genrule { name: "framework-connectivity-jarjar-rules", tool_files: [ ":connectivity-hiddenapi-files", ":framework-connectivity-pre-jarjar{.jar}", ":framework-connectivity-t-pre-jarjar{.jar}", ":framework-connectivity.stubs.module_lib{.jar}", ":framework-connectivity-t.stubs.module_lib{.jar}", ":framework-connectivity-module-api-stubs-including-flagged{.jar}", "jarjar-excludes.txt", ], tools: [ "jarjar-rules-generator", ], out: ["framework_connectivity_jarjar_rules.txt"], cmd: "$(location jarjar-rules-generator) " + "$(location :framework-connectivity-pre-jarjar{.jar}) " + "$(location :framework-connectivity-t-pre-jarjar{.jar}) " + "--prefix android.net.connectivity " + "--apistubs $(location :framework-connectivity.stubs.module_lib{.jar}) " + "--apistubs $(location :framework-connectivity-t.stubs.module_lib{.jar}) " + "--apistubs $(location :framework-connectivity-module-api-stubs-including-flagged{.jar}) " + // Make a ":"-separated list. There will be an extra ":" but empty items are ignored. "--unsupportedapi $$(printf ':%s' $(locations :connectivity-hiddenapi-files)) " + "--excludes $(location jarjar-excludes.txt) " + "--output $(out)", visibility: [ "//packages/modules/Connectivity/framework:__subpackages__", "//packages/modules/Connectivity/framework-t:__subpackages__", "//packages/modules/Connectivity/service", ], } droidstubs { name: "framework-connectivity-module-api-stubs-including-flagged-droidstubs", srcs: [ ":framework-connectivity-sources", ":framework-connectivity-tiramisu-updatable-sources", ":framework-nearby-java-sources", ":framework-thread-sources", ], flags: [ "--show-for-stub-purposes-annotation android.annotation.SystemApi" + "\\(client=android.annotation.SystemApi.Client.PRIVILEGED_APPS\\)", "--show-for-stub-purposes-annotation android.annotation.SystemApi" + "\\(client=android.annotation.SystemApi.Client.MODULE_LIBRARIES\\)", ], aidl: { include_dirs: [ "packages/modules/Connectivity/framework/aidl-export", "frameworks/native/aidl/binder", // For PersistableBundle.aidl ], }, } java_library { name: "framework-connectivity-module-api-stubs-including-flagged", srcs: [":framework-connectivity-module-api-stubs-including-flagged-droidstubs"], } // Library providing limited APIs within the connectivity module, so that R+ components like // Tethering have a controlled way to depend on newer components like framework-connectivity that // are not loaded on R. // Note that this target needs to have access to hidden classes, and as such needs to list // the full libraries instead of the .impl lib (which only expose API classes). java_library { name: "connectivity-internal-api-util", sdk_version: "module_current", libs: [ "androidx.annotation_annotation", "framework-connectivity-pre-jarjar", ], jarjar_rules: ":framework-connectivity-jarjar-rules", srcs: [ // Files listed here MUST all be annotated with @RequiresApi(Build.VERSION_CODES.S) // or above as appropriate so that API checks are enforced for R+ users of this library "src/android/net/RoutingCoordinatorManager.java", "src/android/net/connectivity/ConnectivityInternalApiUtil.java", ], visibility: [ "//packages/modules/Connectivity/Tethering:__subpackages__", ], }