| // |
| // Copyright (C) 2018 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. |
| // |
| |
| // The network stack can be compiled using system_current (non-finalized) SDK, or finalized system_X |
| // SDK. There is also a variant that uses system_current SDK and runs in the system process |
| // (InProcessNetworkStack). The following structure is used to create the build rules: |
| // |
| // NetworkStackAndroidLibraryDefaults <-- common defaults for android libs |
| // / \ |
| // +NetworkStackApiStableShims --> / \ <-- +NetworkStackApiCurrentShims |
| // +NetworkStackReleaseApiLevel / \ +NetworkStackDevApiLevel |
| // +jarjar apishim.api[latest].* / \ |
| // to apishim.* / \ |
| // / \ |
| // / \ |
| // / \ android libs w/ all code |
| // / <- +module src/ -> \ (also used in unit tests) |
| // / \ | |
| // NetworkStackApiStableLib NetworkStackApiCurrentLib <--* |
| // | | |
| // | <-- +NetworkStackAppDefaults --> | |
| // | (APK build params) | |
| // | | |
| // | <-- +NetworkStackReleaseApiLevel | <-- +NetworkStackDevApiLevel |
| // | | |
| // | | |
| // NetworkStackApiStable NetworkStack, InProcessNetworkStack, <-- APKs |
| // TestNetworkStack |
| |
| // Common defaults to define SDK level |
| package { |
| default_team: "trendy_team_fwk_core_networking", |
| default_applicable_licenses: ["Android-Apache-2.0"], |
| } |
| |
| // In some branches, this may be module_current instead of module_34 if the SDK prebuilts are not |
| // yet dropped there, meaning module_34 cannot be used yet. |
| module_34_version = "module_34" |
| |
| // TODO: remove this default and replace with ConnectivityNextEnableDefaults. This will need to be |
| // done separately in each branch due to merge conflicts. |
| // Defaults to enable/disable java targets that depend on |
| // NetworkStackNext, which uses development APIs. "enabled" may |
| // have a different value depending on the branch. |
| java_defaults { |
| name: "NetworkStackNextEnableDefaults", |
| enabled: true, |
| } |
| |
| // This is a placeholder comment to avoid merge conflicts |
| // as the above target may have different "enabled" values |
| // depending on the branch |
| |
| java_defaults { |
| name: "NetworkStackDevApiLevel", |
| min_sdk_version: "30", |
| sdk_version: "module_current", |
| libs: [ |
| "framework-configinfrastructure", |
| "framework-connectivity", |
| "framework-connectivity-t", |
| "framework-statsd", |
| "framework-wifi", |
| ], |
| } |
| |
| // Common defaults for NetworkStack integration tests, root tests and coverage tests |
| // to keep tests always running against the same target sdk version with NetworkStack. |
| java_defaults { |
| name: "NetworkStackReleaseTargetSdk", |
| min_sdk_version: "30", |
| target_sdk_version: "34", |
| } |
| |
| java_defaults { |
| name: "NetworkStackReleaseApiLevel", |
| defaults: ["NetworkStackReleaseTargetSdk"], |
| sdk_version: module_34_version, |
| libs: [ |
| "framework-configinfrastructure", |
| "framework-connectivity.stubs.module_lib", |
| "framework-connectivity-t", |
| "framework-statsd", |
| "framework-wifi", |
| ], |
| } |
| |
| // Libraries for the API shims |
| java_defaults { |
| name: "NetworkStackShimsDefaults", |
| libs: [ |
| "androidx.annotation_annotation", |
| "networkstack-aidl-latest", |
| ], |
| static_libs: [ |
| "modules-utils-build_system", |
| ], |
| apex_available: [ |
| "com.android.tethering", |
| "//apex_available:platform", // For InProcessNetworkStack |
| ], |
| min_sdk_version: "30", |
| } |
| |
| // Common shim code. This includes the shim interface definitions themselves, and things like |
| // ShimUtils and UnsupportedApiLevelException. Compiles against system_current because ShimUtils |
| // needs access to all Build.VERSION_CODES.*, which by definition are only in the newest SDK. |
| // TODO: consider moving ShimUtils into a library (or removing it in favour of SdkLevel) and compile |
| // this target against the lowest-supported SDK (currently 30). |
| java_library { |
| name: "NetworkStackShimsCommon", |
| defaults: ["NetworkStackShimsDefaults"], |
| srcs: ["apishim/common/**/*.java"], |
| sdk_version: "system_current", |
| visibility: ["//visibility:private"], |
| } |
| |
| // Each level of the shims (29, 30, ...) is its own java_library compiled against the corresponding |
| // system_X SDK. this ensures that each shim can only use SDK classes that exist in its SDK level. |
| java_library { |
| name: "NetworkStackApi29Shims", |
| defaults: ["NetworkStackShimsDefaults"], |
| srcs: ["apishim/29/**/*.java"], |
| libs: [ |
| "NetworkStackShimsCommon", |
| ], |
| sdk_version: "system_29", |
| visibility: ["//visibility:private"], |
| } |
| |
| java_library { |
| name: "NetworkStackApi30Shims", |
| defaults: ["NetworkStackShimsDefaults"], |
| srcs: [ |
| "apishim/30/**/*.java", |
| ], |
| libs: [ |
| "NetworkStackShimsCommon", |
| "NetworkStackApi29Shims", |
| ], |
| sdk_version: "system_30", |
| visibility: ["//visibility:private"], |
| lint: { |
| strict_updatability_linting: true, |
| |
| }, |
| } |
| |
| java_library { |
| name: "NetworkStackApi31Shims", |
| defaults: ["NetworkStackShimsDefaults"], |
| srcs: [ |
| "apishim/31/**/*.java", |
| ], |
| static_libs: [ |
| // Libs building against module API can only be linked against when building against |
| // module API (so NetworkStackApi30Shims or NetworkStackApi29Shims can't use it, since they |
| // use system_30 and system_29 respectively). |
| "net-utils-framework-common", |
| ], |
| libs: [ |
| "NetworkStackShimsCommon", |
| "NetworkStackApi29Shims", |
| "NetworkStackApi30Shims", |
| "framework-connectivity", |
| ], |
| sdk_version: "module_31", |
| visibility: ["//visibility:private"], |
| } |
| |
| java_library { |
| name: "NetworkStackApi33Shims", |
| defaults: ["NetworkStackShimsDefaults"], |
| srcs: [ |
| "apishim/33/**/*.java", |
| ], |
| libs: [ |
| "NetworkStackShimsCommon", |
| "NetworkStackApi29Shims", |
| "NetworkStackApi30Shims", |
| "NetworkStackApi31Shims", |
| "framework-bluetooth", |
| "framework-connectivity", |
| "framework-connectivity-t.stubs.module_lib", |
| "framework-tethering", |
| ], |
| sdk_version: "module_33", |
| visibility: ["//visibility:private"], |
| } |
| |
| java_library { |
| name: "NetworkStackApi34Shims", |
| defaults: ["NetworkStackShimsDefaults"], |
| srcs: [ |
| "apishim/34/**/*.java", |
| ], |
| libs: [ |
| "NetworkStackShimsCommon", |
| "NetworkStackApi29Shims", |
| "NetworkStackApi30Shims", |
| "NetworkStackApi31Shims", |
| "NetworkStackApi33Shims", |
| "framework-bluetooth", |
| "framework-connectivity", |
| "framework-connectivity-t.stubs.module_lib", |
| "framework-tethering", |
| ], |
| sdk_version: module_34_version, |
| visibility: ["//visibility:private"], |
| } |
| |
| // Shims for APIs being added to the current development version of Android. These APIs are not |
| // stable and have no defined version number. These could be called 10000, but they use the next |
| // integer so if the next SDK release happens to use that integer, we don't need to rename them. |
| // Jarjar rules are generated based on the stable shims, which do not contain this library. As a |
| // result, no static_lib that needs jarjar should be used here. In general, static_libs should not |
| // be used in this library at all; instead they can be in one of the earlier, shim libraries which |
| // are part of the stable shims and scanned when generating jarjar rules. |
| java_library { |
| name: "NetworkStackApi35Shims", |
| defaults: [ |
| "NetworkStackShimsDefaults", |
| "ConnectivityNextEnableDefaults", |
| ], |
| srcs: [ |
| "apishim/35/**/*.java", |
| ], |
| libs: [ |
| "NetworkStackShimsCommon", |
| "NetworkStackApi29Shims", |
| "NetworkStackApi30Shims", |
| "NetworkStackApi31Shims", |
| "NetworkStackApi33Shims", |
| "NetworkStackApi34Shims", |
| "framework-bluetooth", |
| "framework-connectivity", |
| "framework-connectivity-t.stubs.module_lib", |
| "framework-tethering", |
| "android.net.ipsec.ike.stubs.module_lib", |
| ], |
| sdk_version: "module_current", |
| visibility: ["//visibility:private"], |
| } |
| |
| // API current uses the API current shims directly. |
| // The current (in-progress) shims are in the com.android.networkstack.apishim package and are |
| // called directly by the networkstack code. |
| java_library { |
| name: "NetworkStackApiCurrentShims", |
| defaults: [ |
| "NetworkStackShimsDefaults", |
| "NetworkStackDevApiLevel", |
| "ConnectivityNextEnableDefaults", |
| ], |
| static_libs: [ |
| "NetworkStackShimsCommon", |
| "NetworkStackApi29Shims", |
| "NetworkStackApi30Shims", |
| "NetworkStackApi31Shims", |
| "NetworkStackApi33Shims", |
| "NetworkStackApi34Shims", |
| "NetworkStackApi35Shims", |
| ], |
| visibility: [ |
| "//packages/modules/Connectivity/Tethering", |
| "//packages/modules/Connectivity/service", |
| "//packages/modules/Connectivity/service-t", |
| "//packages/modules/Connectivity/tests:__subpackages__", |
| ], |
| } |
| |
| // API stable uses jarjar to rename the latest stable apishim package from |
| // com.android.networkstack.apishim.apiXX to com.android.networkstack.apishim, which is called by |
| // the networkstack code. |
| java_library { |
| name: "NetworkStackApiStableShims", |
| defaults: [ |
| "NetworkStackShimsDefaults", |
| "NetworkStackReleaseApiLevel", |
| ], |
| static_libs: [ |
| "NetworkStackShimsCommon", |
| "NetworkStackApi29Shims", |
| "NetworkStackApi30Shims", |
| "NetworkStackApi31Shims", |
| "NetworkStackApi33Shims", |
| "NetworkStackApi34Shims", |
| ], |
| jarjar_rules: "apishim/jarjar-rules-compat.txt", |
| visibility: [ |
| "//packages/modules/Connectivity/Tethering", |
| "//packages/modules/Connectivity/service", |
| "//packages/modules/Connectivity/service-t", |
| "//packages/modules/Connectivity/tests:__subpackages__", |
| ], |
| } |
| |
| // Common defaults for android libraries containing network stack code, used to compile variants of |
| // the network stack in the system process and in the network_stack process |
| java_defaults { |
| name: "NetworkStackAndroidLibraryDefaults", |
| srcs: [ |
| ":framework-networkstack-shared-srcs", |
| ], |
| libs: [ |
| "error_prone_annotations", |
| "unsupportedappusage", |
| ], |
| static_libs: [ |
| "androidx.annotation_annotation", |
| "modules-utils-build_system", |
| "modules-utils-preconditions", |
| "modules-utils-shell-command-handler", |
| "modules-utils-statemachine", |
| "netd_aidl_interface-lateststable-java", |
| "networkstack-client", |
| "net-utils-framework-common", |
| // See note on statsprotos when adding/updating proto build rules |
| "datastallprotosnano", |
| "statsprotos", |
| "captiveportal-lib", |
| "net-utils-device-common-ip", |
| "net-utils-device-common-netlink", |
| "net-utils-device-common-struct", |
| "net-utils-device-common-struct-base", |
| ], |
| } |
| |
| // The versions of the android library containing network stack code compiled for each SDK variant. |
| android_library { |
| name: "NetworkStackApiCurrentLib", |
| defaults: [ |
| "NetworkStackDevApiLevel", |
| "NetworkStackAndroidLibraryDefaults", |
| "ConnectivityNextEnableDefaults", |
| ], |
| srcs: [ |
| "src/**/*.java", |
| ":statslog-networkstack-java-gen-current", |
| ], |
| static_libs: [ |
| "NetworkStackApiCurrentShims", |
| ], |
| manifest: "AndroidManifestBase.xml", |
| visibility: [ |
| "//frameworks/base/tests/net/integration", |
| "//packages/modules/Connectivity/Tethering/tests/integration", |
| "//packages/modules/NetworkStack/tests/unit", |
| "//packages/modules/NetworkStack/tests/integration", |
| ], |
| } |
| |
| android_library { |
| name: "NetworkStackApiStableLib", |
| defaults: [ |
| "NetworkStackReleaseApiLevel", |
| "NetworkStackAndroidLibraryDefaults", |
| ], |
| srcs: [ |
| "src/**/*.java", |
| ":statslog-networkstack-java-gen-stable", |
| ], |
| static_libs: [ |
| "NetworkStackApiStableShims", |
| ], |
| manifest: "AndroidManifestBase.xml", |
| visibility: [ |
| "//packages/modules/Connectivity/Tethering/tests/integration", |
| "//packages/modules/Connectivity/tests/integration", |
| "//packages/modules/NetworkStack/tests/unit", |
| "//packages/modules/NetworkStack/tests/integration", |
| ], |
| } |
| |
| java_library { |
| name: "DhcpPacketLib", |
| defaults: ["NetworkStackReleaseApiLevel"], |
| srcs: [ |
| "src/android/net/DhcpResults.java", |
| "src/android/net/dhcp/Dhcp*Packet.java", |
| ], |
| libs: [ |
| "androidx.annotation_annotation", |
| "framework-annotations-lib", |
| ], |
| static_libs: [ |
| "modules-utils-build", |
| "net-utils-framework-common", |
| "networkstack-client", |
| "net-utils-device-common", |
| ], |
| // If this library is ever used outside of tests, it should not use "Dhcp*Packet", and specify |
| // its contents explicitly. |
| visibility: [ |
| "//packages/modules/Connectivity/Tethering/tests/integration", |
| "//packages/modules/Connectivity/tests/cts/net", |
| ], |
| } |
| |
| java_library { |
| name: "ApfGeneratorLib", |
| defaults: ["NetworkStackReleaseApiLevel"], |
| srcs: [ |
| "src/android/net/apf/ApfConstant.java", |
| "src/android/net/apf/ApfCounterTracker.java", |
| "src/android/net/apf/ApfV4Generator.java", |
| "src/android/net/apf/ApfV4GeneratorBase.java", |
| "src/android/net/apf/ApfV6Generator.java", |
| "src/android/net/apf/ApfV6GeneratorBase.java", |
| "src/android/net/apf/BaseApfGenerator.java", |
| ], |
| libs: [ |
| "androidx.annotation_annotation", |
| "framework-annotations-lib", |
| ], |
| static_libs: [ |
| "net-utils-framework-common", |
| ], |
| visibility: [ |
| "//packages/modules/Connectivity/tests/cts/net", |
| ], |
| } |
| |
| java_genrule { |
| name: "NetworkStackJarJarRules", |
| tool_files: [ |
| // com.android.networkstack.apishim is already in the target package that is not jarjared, |
| // so it does not matter whether ApiStable or ApiCurrent is used to generate the jarjar |
| // rules. Use ApiStable to be based on most stable release configuration and be buildable |
| // in all branches. |
| ":NetworkStackApiStableLib{.jar}", |
| "jarjar-excludes.txt", |
| ], |
| tools: [ |
| "jarjar-rules-generator", |
| ], |
| out: ["NetworkStackJarJarRules.txt"], |
| cmd: "$(location jarjar-rules-generator) " + |
| "$(location :NetworkStackApiStableLib{.jar}) " + |
| "--prefix com.android.networkstack " + |
| "--excludes $(location jarjar-excludes.txt) " + |
| "--output $(out)", |
| visibility: [ |
| "//packages/modules/NetworkStack/tests/unit", |
| "//packages/modules/NetworkStack/tests/integration", |
| "//packages/modules/Connectivity/tests:__subpackages__", |
| "//packages/modules/Connectivity/Tethering/tests/integration", |
| ], |
| } |
| |
| // Common defaults for compiling the actual APK, based on the NetworkStackApiXBase android libraries |
| java_defaults { |
| name: "NetworkStackAppDefaults", |
| privileged: true, |
| jni_libs: [ |
| "libnativehelper_compat_libc++", |
| "libnetworkstackutilsjni", |
| ], |
| // Resources already included in NetworkStackBase |
| resource_dirs: [], |
| jarjar_rules: ":NetworkStackJarJarRules", |
| use_embedded_native_libs: true, |
| optimize: { |
| ignore_warnings: false, |
| proguard_flags_files: ["proguard.flags"], |
| }, |
| } |
| |
| // Non-updatable network stack running in the system server process for devices not using the module |
| android_app { |
| name: "InProcessNetworkStack", |
| defaults: [ |
| "NetworkStackAppDefaults", |
| "NetworkStackDevApiLevel", |
| "ConnectivityNextEnableDefaults", |
| ], |
| static_libs: ["NetworkStackApiCurrentLib"], |
| certificate: "platform", |
| manifest: "AndroidManifest_InProcess.xml", |
| // InProcessNetworkStack is a replacement for NetworkStack |
| overrides: [ |
| "NetworkStack", |
| "NetworkStackNext", |
| ], |
| // The InProcessNetworkStack goes together with the PlatformCaptivePortalLogin, which replaces |
| // the default CaptivePortalLogin. |
| required: [ |
| "PlatformCaptivePortalLogin", |
| ], |
| } |
| |
| // Pre-merge the AndroidManifest for NetworkStackNext, so that its manifest can be merged on top |
| android_library { |
| name: "NetworkStackNextManifestBase", |
| defaults: [ |
| "NetworkStackAppDefaults", |
| "NetworkStackDevApiLevel", |
| "ConnectivityNextEnableDefaults", |
| ], |
| static_libs: ["NetworkStackApiCurrentLib"], |
| manifest: "AndroidManifest.xml", |
| } |
| |
| // NetworkStack build targeting the current API release, for testing on in-development SDK |
| android_app { |
| name: "NetworkStackNext", |
| defaults: [ |
| "NetworkStackAppDefaults", |
| "NetworkStackDevApiLevel", |
| "ConnectivityNextEnableDefaults", |
| ], |
| static_libs: ["NetworkStackNextManifestBase"], |
| certificate: "networkstack", |
| manifest: "AndroidManifest_Next.xml", |
| required: [ |
| "privapp_whitelist_com.android.networkstack", |
| ], |
| updatable: true, |
| } |
| |
| // Updatable network stack for finalized API |
| android_app { |
| name: "NetworkStack", |
| defaults: [ |
| "NetworkStackAppDefaults", |
| "NetworkStackReleaseApiLevel", |
| ], |
| static_libs: ["NetworkStackApiStableLib"], |
| certificate: "networkstack", |
| manifest: "AndroidManifest.xml", |
| required: [ |
| "privapp_whitelist_com.android.networkstack", |
| ], |
| updatable: true, |
| } |
| |
| cc_library_shared { |
| name: "libnetworkstackutilsjni", |
| srcs: [ |
| "jni/network_stack_utils_jni.cpp", |
| ], |
| header_libs: [ |
| "bpf_headers", |
| ], |
| sdk_version: "30", |
| min_sdk_version: "30", |
| shared_libs: [ |
| "liblog", |
| "libnativehelper_compat_libc++", |
| ], |
| static_libs: [ |
| "libnetjniutils", |
| ], |
| |
| // We cannot use plain "libc++" here to link libc++ dynamically because it results in: |
| // java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found |
| // even if "libc++" is added into jni_libs below. Adding "libc++_shared" into jni_libs doesn't |
| // build because soong complains of: |
| // module NetworkStack missing dependencies: libc++_shared |
| // |
| // So, link libc++ statically. This means that we also need to ensure that all the C++ libraries |
| // we depend on do not dynamically link libc++. This is currently the case, because liblog is |
| // C-only and libnativehelper_compat_libc also uses stl: "c++_static". |
| // |
| // TODO: find a better solution for this in R. |
| stl: "c++_static", |
| cflags: [ |
| "-Wall", |
| "-Werror", |
| "-Wno-unused-parameter", |
| ], |
| } |
| |
| genrule { |
| name: "statslog-networkstack-java-gen-current", |
| tools: ["stats-log-api-gen"], |
| cmd: "$(location stats-log-api-gen) --java $(out) --module network_stack" + |
| " --javaPackage com.android.networkstack.metrics --javaClass NetworkStackStatsLog" + |
| " --minApiLevel 30", |
| out: ["com/android/networkstack/metrics/NetworkStackStatsLog.java"], |
| } |
| |
| genrule { |
| name: "statslog-networkstack-java-gen-stable", |
| tools: ["stats-log-api-gen"], |
| cmd: "$(location stats-log-api-gen) --java $(out) --module network_stack" + |
| " --javaPackage com.android.networkstack.metrics --javaClass NetworkStackStatsLog" + |
| " --minApiLevel 30", |
| out: ["com/android/networkstack/metrics/NetworkStackStatsLog.java"], |
| } |
| |
| version_code_networkstack_next = "300000000" |
| version_code_networkstack_test = "999999999" |
| |
| genrule { |
| name: "NetworkStackTestAndroidManifest", |
| srcs: ["AndroidManifest.xml"], |
| out: ["TestAndroidManifest.xml"], |
| cmd: "sed -E 's/versionCode=\"[0-9]+\"/versionCode=\"" + |
| version_code_networkstack_test + |
| "\"/' $(in) > $(out)", |
| visibility: ["//visibility:private"], |
| } |
| |
| android_app { |
| name: "TestNetworkStack", |
| defaults: [ |
| "NetworkStackAppDefaults", |
| "NetworkStackReleaseApiLevel", |
| ], |
| static_libs: ["NetworkStackApiStableLib"], |
| certificate: "networkstack", |
| manifest: ":NetworkStackTestAndroidManifest", |
| required: [ |
| "privapp_whitelist_com.android.networkstack", |
| ], |
| } |
| |
| // When adding or modifying protos, the jarjar rules and possibly proguard rules need |
| // to be updated: proto libraries may pull additional static libraries. |
| java_library_static { |
| name: "statsprotos", |
| proto: { |
| type: "lite", |
| }, |
| srcs: [ |
| "src/com/android/networkstack/metrics/stats.proto", |
| ], |
| static_libs: [ |
| "networkstackprotos", |
| ], |
| defaults: ["NetworkStackReleaseApiLevel"], |
| } |