| // |
| // 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", |
| ], |
| 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", |
| "http_client_logging", |
| // 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", |
| ], |
| 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", |
| "http_client_logging", |
| ], |
| } |
| |
| 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__", |
| ], |
| } |