// Copyright (C) 2019 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. // 1. The "net-utils-framework-common" library is also compiled into the framework and placed on the // boot classpath. It uses jarjar rules so that anything outside the framework can use this // library directly. // 2. The "net-utils-services-common" library is for use by modules and frameworks/base/services. // It does not need to be jarjared because it is not placed on the bootclasspath. // 3. The "net-utils-telephony-common-srcs" filegroup is for use specifically by telephony, which // places many of its classes, even non-API service classes, on the boot classpath. Any file that // is added to this filegroup *must* have a corresponding jarjar rule in the telephony jarjar // rules file. Otherwise, it will end up on the boot classpath and other modules will not be able // to provide their own copy. // Note: all filegroups here must have the right path attribute because otherwise, if they are // included in the bootclasspath, they could incorrectly be included in the SDK documentation even // though they are not in the current.txt files. package { default_team: "trendy_team_fwk_core_networking", default_applicable_licenses: ["Android-Apache-2.0"], } // This library shouldn't be used anymore (no class should be added), and per-user libraries like // net-utils-service-connectivity or net-utils-framework-wifi should be used instead. java_library { name: "net-utils-device-common", srcs: [ "device/com/android/net/module/util/arp/ArpPacket.java", "device/com/android/net/module/util/DeviceConfigUtils.java", "device/com/android/net/module/util/DomainUtils.java", "device/com/android/net/module/util/FdEventsReader.java", "device/com/android/net/module/util/FeatureVersions.java", "device/com/android/net/module/util/HandlerUtils.java", "device/com/android/net/module/util/NetworkMonitorUtils.java", "device/com/android/net/module/util/PacketReader.java", "device/com/android/net/module/util/SharedLog.java", "device/com/android/net/module/util/SocketUtils.java", "device/com/android/net/module/util/SyncStateMachine.java", // This library is used by system modules, for which the system health impact of Kotlin // has not yet been evaluated. Annotations may need jarjar'ing. // "src_devicecommon/**/*.kt", ], sdk_version: "module_current", min_sdk_version: "30", target_sdk_version: "30", apex_available: [ "//apex_available:anyapex", "//apex_available:platform", ], visibility: [ "//packages/modules/Connectivity:__subpackages__", "//packages/modules/Connectivity/framework:__subpackages__", "//packages/modules/NetworkStack:__subpackages__", "//packages/modules/CaptivePortalLogin", ], static_libs: [ "modules-utils-statemachine", "net-utils-framework-common", ], libs: [ "androidx.annotation_annotation", "framework-annotations-lib", "framework-configinfrastructure.stubs.module_lib", "framework-connectivity.stubs.module_lib", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } java_defaults { name: "lib_mockito_extended", static_libs: [ "mockito-target-extended-minus-junit4", ], jni_libs: [ "libdexmakerjvmtiagent", "libstaticjvmtiagent", ], } java_library { name: "net-utils-dnspacket-common", srcs: [ "framework/**/DnsPacket.java", "framework/**/DnsPacketUtils.java", "framework/**/DnsSvcbPacket.java", "framework/**/DnsSvcbRecord.java", "framework/**/HexDump.java", "framework/**/NetworkStackConstants.java", ], sdk_version: "module_current", visibility: [ "//packages/services/Iwlan:__subpackages__", ], libs: [ "androidx.annotation_annotation", "framework-annotations-lib", "framework-connectivity.stubs.module_lib", ], } filegroup { name: "net-utils-framework-common-srcs", srcs: ["framework/**/*.java"], path: "framework", visibility: [ "//frameworks/base", "//packages/modules/Connectivity:__subpackages__", ], } // The net-utils-device-common-bpf library requires the callers to contain // net-utils-device-common-struct-base. java_library { name: "net-utils-device-common-bpf", srcs: [ "device/com/android/net/module/util/BpfBitmap.java", "device/com/android/net/module/util/BpfDump.java", "device/com/android/net/module/util/BpfMap.java", "device/com/android/net/module/util/BpfUtils.java", "device/com/android/net/module/util/IBpfMap.java", "device/com/android/net/module/util/JniUtil.java", "device/com/android/net/module/util/SingleWriterBpfMap.java", "device/com/android/net/module/util/TcUtils.java", ], sdk_version: "module_current", min_sdk_version: "30", visibility: [ "//packages/modules/Connectivity:__subpackages__", "//packages/modules/NetworkStack:__subpackages__", ], libs: [ "androidx.annotation_annotation", "framework-connectivity.stubs.module_lib", "net-utils-device-common-struct-base", ], apex_available: [ "com.android.tethering", "//apex_available:platform", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } java_library { name: "net-utils-device-common-struct-base", srcs: [ "device/com/android/net/module/util/Struct.java", ], sdk_version: "module_current", min_sdk_version: "30", visibility: [ "//packages/modules/Connectivity:__subpackages__", "//packages/modules/NetworkStack:__subpackages__", ], static_libs: [ "net-utils-framework-common", ], libs: [ "androidx.annotation_annotation", "framework-annotations-lib", // Required by InetAddressUtils.java "framework-connectivity.stubs.module_lib", ], apex_available: [ "com.android.tethering", "//apex_available:platform", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } // The net-utils-device-common-struct library requires the callers to contain // net-utils-device-common-struct-base. java_library { name: "net-utils-device-common-struct", srcs: [ "device/com/android/net/module/util/Ipv6Utils.java", "device/com/android/net/module/util/PacketBuilder.java", "device/com/android/net/module/util/structs/*.java", ], sdk_version: "module_current", min_sdk_version: "30", visibility: [ "//packages/modules/Connectivity:__subpackages__", "//packages/modules/NetworkStack:__subpackages__", ], libs: [ "androidx.annotation_annotation", "framework-annotations-lib", // Required by IpUtils.java "framework-connectivity.stubs.module_lib", "net-utils-device-common-struct-base", ], apex_available: [ "com.android.tethering", "//apex_available:platform", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } // The net-utils-device-common-netlink library requires the callers to contain // net-utils-device-common-struct and net-utils-device-common-struct-base. java_library { name: "net-utils-device-common-netlink", srcs: [ "device/com/android/net/module/util/netlink/**/*.java", ], sdk_version: "module_current", min_sdk_version: "30", visibility: [ "//packages/modules/Connectivity:__subpackages__", "//packages/modules/NetworkStack:__subpackages__", ], libs: [ "androidx.annotation_annotation", "framework-connectivity.stubs.module_lib", // For libraries which are statically linked in framework-connectivity, do not // statically link here because callers of this library might already have a static // version linked. "net-utils-device-common-struct", "net-utils-device-common-struct-base", ], apex_available: [ "com.android.tethering", "//apex_available:platform", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } // The net-utils-device-common-ip library requires the callers to contain // net-utils-device-common-struct and net-utils-device-common-struct-base. java_library { // TODO : this target should probably be folded into net-utils-device-common name: "net-utils-device-common-ip", srcs: [ "device/com/android/net/module/util/ip/*.java", ], sdk_version: "module_current", min_sdk_version: "30", visibility: [ "//packages/modules/Connectivity:__subpackages__", "//packages/modules/NetworkStack:__subpackages__", ], libs: [ "framework-annotations-lib", "framework-connectivity.stubs.module_lib", ], static_libs: [ "net-utils-device-common", "net-utils-device-common-netlink", "net-utils-framework-common", "netd-client", ], apex_available: [ "com.android.tethering", "//apex_available:platform", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } java_library { name: "net-utils-framework-common", srcs: [ ":net-utils-framework-common-srcs", ], sdk_version: "module_current", min_sdk_version: "30", libs: [ "androidx.annotation_annotation", "framework-annotations-lib", "framework-connectivity.stubs.module_lib", "framework-connectivity-t.stubs.module_lib", "framework-location.stubs.module_lib", ], jarjar_rules: "jarjar-rules-shared.txt", visibility: [ "//cts/tests/tests/net", "//cts/tests/tests/wifi", "//packages/modules/Connectivity/tests/cts/net", "//packages/modules/Connectivity/Tethering", "//frameworks/base/tests:__subpackages__", "//frameworks/opt/net/ike", "//frameworks/opt/telephony", "//frameworks/base/wifi:__subpackages__", "//packages/modules/Connectivity:__subpackages__", "//packages/modules/NetworkStack:__subpackages__", "//packages/modules/CaptivePortalLogin", "//packages/modules/Wifi/framework/tests:__subpackages__", "//packages/apps/Settings", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, errorprone: { enabled: true, // Error-prone checking only warns of problems when building. To make the build fail with // these errors, list the specific error-prone problems below. javacflags: [ "-Xep:NullablePrimitive:ERROR", ], }, apex_available: [ "//apex_available:platform", "com.android.tethering", ], } java_library { name: "net-utils-services-common", srcs: [ "device/android/net/NetworkFactory.java", "device/android/net/NetworkFactoryImpl.java", "device/android/net/NetworkFactoryLegacyImpl.java", "device/android/net/NetworkFactoryShim.java", ], sdk_version: "module_current", min_sdk_version: "30", libs: [ "framework-annotations-lib", "framework-connectivity.stubs.module_lib", "modules-utils-build_system", ], // TODO: remove "apex_available:platform". apex_available: [ "//apex_available:platform", "com.android.btservices", "com.android.tethering", "com.android.wifi", ], visibility: [ // TODO: remove after NetworkStatsService moves to the module. "//frameworks/base/services/net", "//packages/modules/Connectivity/service", "//packages/modules/Connectivity/tests:__subpackages__", "//packages/modules/Bluetooth/android/app", "//packages/modules/Wifi/service:__subpackages__", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } java_library { name: "net-utils-device-common-async", srcs: [ "device/com/android/net/module/util/async/*.java", ], sdk_version: "module_current", min_sdk_version: "30", visibility: [ "//packages/modules/Connectivity:__subpackages__", ], libs: [ "framework-annotations-lib", ], static_libs: [ ], apex_available: [ "com.android.tethering", "//apex_available:platform", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } java_library { name: "net-utils-device-common-wear", srcs: [ "device/com/android/net/module/util/wear/*.java", ], sdk_version: "module_current", min_sdk_version: "30", visibility: [ "//packages/modules/Connectivity:__subpackages__", ], libs: [ "framework-annotations-lib", ], static_libs: [ "net-utils-device-common-async", ], apex_available: [ "com.android.tethering", "//apex_available:platform", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } // Limited set of utilities for use by service-connectivity-mdns-standalone-build-test, to make sure // the mDNS code can build with only system APIs. // The mDNS code is platform code so it should use framework-annotations-lib, contrary to apps that // should use sdk_version: "system_current" and only androidx.annotation_annotation. But this build // rule verifies that the mDNS code can be built into apps, if code transformations are applied to // the annotations. // When using "system_current", framework annotations are not available; they would appear as // package-private as they are marked as such in the system_current stubs. So build against // core_platform and add the stubs manually in "libs". See http://b/147773144#comment7. java_library { name: "net-utils-device-common-mdns-standalone-build-test", // Build against core_platform and add the stub libraries manually in "libs", as annotations // are already included in android_system_stubs_current but package-private, so // "framework-annotations-lib" needs to be manually included before // "android_system_stubs_current" (b/272392042) sdk_version: "core_platform", srcs: [ "device/com/android/net/module/util/FdEventsReader.java", "device/com/android/net/module/util/HandlerUtils.java", "device/com/android/net/module/util/SharedLog.java", "framework/com/android/net/module/util/ByteUtils.java", "framework/com/android/net/module/util/CollectionUtils.java", "framework/com/android/net/module/util/DnsUtils.java", "framework/com/android/net/module/util/HexDump.java", "framework/com/android/net/module/util/LinkPropertiesUtils.java", ], libs: [ "framework-annotations-lib", "android_system_stubs_current", "androidx.annotation_annotation", ], visibility: ["//packages/modules/Connectivity/service-t"], } // net-utils-framework-connectivity is only for framework-connectivity. java_library { name: "net-utils-framework-connectivity", srcs: [ ":net-utils-framework-connectivity-srcs", ], sdk_version: "module_current", min_sdk_version: "30", apex_available: [ "com.android.tethering", "//apex_available:platform", ], visibility: [ "//packages/modules/Connectivity/framework", ], libs: [ "androidx.annotation_annotation", "framework-annotations-lib", "framework-configinfrastructure.stubs.module_lib", "framework-connectivity.stubs.module_lib", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } java_defaults { name: "net-utils-non-bootclasspath-defaults", sdk_version: "module_current", min_sdk_version: "30", libs: [ "androidx.annotation_annotation", "framework-annotations-lib", "framework-configinfrastructure.stubs.module_lib", "framework-connectivity.stubs.module_lib", "framework-connectivity-t.stubs.module_lib", "framework-location.stubs.module_lib", "framework-tethering.stubs.module_lib", "unsupportedappusage", ], static_libs: [ "modules-utils-build_system", "modules-utils-statemachine", "net-utils-non-bootclasspath-aidl-java", "netd-client", ], apex_available: [ "com.android.tethering", "//apex_available:platform", ], defaults_visibility: [ "//visibility:private", ], lint: { strict_updatability_linting: true, error_checks: ["NewApi"], }, } // net-utils-service-connectivity is only for service-connectivity. java_library { name: "net-utils-service-connectivity", srcs: [ ":net-utils-all-srcs", ], exclude_srcs: [ ":net-utils-framework-connectivity-srcs", ], libs: [ "net-utils-framework-connectivity", "framework-connectivity.impl", "framework-tethering.impl", ], defaults: ["net-utils-non-bootclasspath-defaults"], jarjar_rules: "jarjar-rules-shared.txt", visibility: [ "//packages/modules/Connectivity/service", "//packages/modules/Connectivity/staticlibs/tests/unit", ], } // net-utils-connectivity-apks is only for NetworkStack, CaptivePortalLogin and // Tethering.apk // It includes all the static libraries in this directory, which is safe because // these APKs use R8 to strip out unused code, and they do not depend on // bootclasspath jars that may have duplicate copies of the included classes // with the same jarjaring. // Tethering.apk does depend on a bootclasspath jar (framework-tethering.jar), // however it does not use any of the static libraries. If it did, Tethering.apk // would need to use another variant that excludes classes that are already // included in framework-tethering.jar (similarly to how framework-connectivity // and service-connectivity do it). Otherwise, static libs included in // framework-tethering and Tethering.apk and jarjared the same way would // conflict. java_library { name: "net-utils-connectivity-apks", srcs: [ ":net-utils-all-srcs", ":framework-connectivity-shared-srcs", ], defaults: ["net-utils-non-bootclasspath-defaults"], jarjar_rules: "jarjar-rules-shared.txt", visibility: [ "//packages/modules/CaptivePortalLogin:__subpackages__", "//packages/modules/Connectivity/Tethering", ], } aidl_interface { name: "net-utils-non-bootclasspath-aidl", srcs: [ ":net-utils-aidl-srcs", ], unstable: true, backend: { java: { enabled: true, min_sdk_version: "30", apex_available: [ "com.android.tethering", "com.android.wifi", "//apex_available:platform", ], }, cpp: { enabled: false, }, ndk: { enabled: false, }, rust: { enabled: false, }, }, include_dirs: [ "packages/modules/Connectivity/framework/aidl-export", ], visibility: [ "//system/tools/aidl/build", ], } // Use a filegroup and not a library for telephony sources, as framework-annotations cannot be // included either (some annotations would be duplicated on the bootclasspath). filegroup { name: "net-utils-telephony-common-srcs", srcs: [ // Any class here *must* have a corresponding jarjar rule in the telephony build rules. "device/android/net/NetworkFactory.java", "device/android/net/NetworkFactoryImpl.java", "device/android/net/NetworkFactoryLegacyImpl.java", "device/android/net/NetworkFactoryShim.java", ], path: "device", visibility: [ "//frameworks/opt/telephony", ], } // Filegroup to build lib used by Wifi framework // Any class here *must* have a corresponding jarjar rule in the wifi build rules. filegroup { name: "net-utils-framework-wifi-common-srcs", srcs: [ "framework/com/android/net/module/util/DnsSdTxtRecord.java", "framework/com/android/net/module/util/Inet4AddressUtils.java", "framework/com/android/net/module/util/InetAddressUtils.java", "framework/com/android/net/module/util/MacAddressUtils.java", "framework/com/android/net/module/util/NetUtils.java", ], path: "framework", visibility: ["//visibility:private"], } // Filegroup to build lib used by IPsec/IKE framework // Any class here *must* have a corresponding jarjar rule in the IPsec build rules. filegroup { name: "net-utils-framework-ipsec-common-srcs", srcs: [ "framework/com/android/net/module/util/HexDump.java", ], path: "framework", visibility: ["//visibility:private"], } java_library { name: "net-utils-framework-ipsec", sdk_version: "module_current", min_sdk_version: "30", srcs: [":net-utils-framework-ipsec-common-srcs"], libs: [ "androidx.annotation_annotation", ], visibility: [ "//packages/modules/IPsec", ], apex_available: ["com.android.ipsec"], } // Use a file group containing classes necessary for framework-connectivity. The file group should // be as small as possible because because the classes end up in the bootclasspath and R8 is not // used to remove unused classes. filegroup { name: "net-utils-framework-connectivity-srcs", srcs: [ "device/com/android/net/module/util/BpfBitmap.java", "device/com/android/net/module/util/BpfDump.java", "device/com/android/net/module/util/BpfMap.java", "device/com/android/net/module/util/BpfUtils.java", "device/com/android/net/module/util/IBpfMap.java", "device/com/android/net/module/util/JniUtil.java", "device/com/android/net/module/util/SingleWriterBpfMap.java", "device/com/android/net/module/util/Struct.java", "device/com/android/net/module/util/TcUtils.java", "framework/com/android/net/module/util/HexDump.java", ], visibility: ["//visibility:private"], } // Sources outside of com.android.net.module.util should not be added because many modules depend on // them and need jarjar rules filegroup { name: "net-utils-all-srcs", srcs: [ "device/**/*.java", ":net-utils-framework-common-srcs", ], visibility: ["//visibility:private"], } filegroup { name: "net-utils-aidl-srcs", srcs: [ "device/**/*.aidl", ], path: "device", visibility: ["//visibility:private"], } java_library { name: "net-utils-service-wifi", srcs: [ ":net-utils-all-srcs", ], exclude_srcs: [":net-utils-framework-wifi-common-srcs"], libs: [ "net-utils-framework-wifi", ], defaults: ["net-utils-non-bootclasspath-defaults"], visibility: [ "//packages/modules/Wifi/service", ], apex_available: [ "com.android.wifi", ], } java_library { name: "net-utils-framework-wifi", sdk_version: "module_current", min_sdk_version: "30", srcs: [":net-utils-framework-wifi-common-srcs"], libs: [ "framework-annotations-lib", "framework-connectivity.stubs.module_lib", "unsupportedappusage", ], visibility: [ "//packages/modules/Wifi/framework", ], apex_available: ["com.android.wifi"], } genrule { name: "statslog-framework-connectivity-java-gen", tools: ["stats-log-api-gen"], cmd: "$(location stats-log-api-gen) --java $(out) --module connectivity --javaPackage com.android.net.module.util --javaClass FrameworkConnectivityStatsLog", out: ["com/android/net/module/util/FrameworkConnectivityStatsLog.java"], } java_library { name: "net-utils-service-vcn", sdk_version: "module_current", min_sdk_version: "30", srcs: [ "device/com/android/net/module/util/HandlerUtils.java", ], libs: [ "framework-annotations-lib", ], visibility: [ // TODO: b/374174952 Remove it when VCN modularization is released "//frameworks/base/packages/Vcn/service-b", "//packages/modules/Connectivity/service-b", ], apex_available: [ // TODO: b/374174952 Remove it when VCN modularization is released "//apex_available:platform", "com.android.tethering", ], }