|  | // | 
|  | // 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_applicable_licenses: ["Android-Apache-2.0"], | 
|  | } | 
|  |  | 
|  | // In some branches, this may be module_current instead of module_33 if the SDK prebuilts are not | 
|  | // yet dropped there, meaning module_33 cannot be used yet. | 
|  | module_33_version = "module_33" | 
|  |  | 
|  | // 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: "29", | 
|  | sdk_version: "module_current", | 
|  | libs: [ | 
|  | "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: "29", | 
|  | target_sdk_version: "33", | 
|  | } | 
|  |  | 
|  | java_defaults { | 
|  | name: "NetworkStackReleaseApiLevel", | 
|  | defaults:["NetworkStackReleaseTargetSdk"], | 
|  | sdk_version: module_33_version, | 
|  | libs: [ | 
|  | "framework-connectivity", | 
|  | "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 and InProcessTethering | 
|  | ], | 
|  | min_sdk_version: "29", | 
|  | } | 
|  |  | 
|  | // 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 29). | 
|  | 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", "ConnectivityNextEnableDefaults"], | 
|  | 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_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: "NetworkStackApi34Shims", | 
|  | defaults: ["NetworkStackShimsDefaults", "ConnectivityNextEnableDefaults"], | 
|  | 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_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", | 
|  | ], | 
|  | visibility: [ | 
|  | "//packages/modules/Connectivity/Tethering", | 
|  | "//packages/modules/Connectivity/service", | 
|  | "//packages/modules/Connectivity/service-t", | 
|  | "//packages/modules/Connectivity/tests/cts/net", | 
|  | "//packages/modules/Connectivity/tests/cts/hostside/app", | 
|  | ], | 
|  | } | 
|  |  | 
|  | // 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", | 
|  | ], | 
|  | 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/cts:__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: ["unsupportedappusage"], | 
|  | static_libs: [ | 
|  | "androidx.annotation_annotation", | 
|  | "modules-utils-build_system", | 
|  | "modules-utils-preconditions", | 
|  | "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", | 
|  | "net-utils-device-common-ip", | 
|  | "net-utils-device-common-netlink", | 
|  | ], | 
|  | plugins: ["java_api_finder"], | 
|  | } | 
|  |  | 
|  | // 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", | 
|  | ], | 
|  | lint: { strict_updatability_linting: true }, | 
|  | } | 
|  |  | 
|  | android_library { | 
|  | name: "NetworkStackApiStableLib", | 
|  | defaults: ["NetworkStackReleaseApiLevel", "NetworkStackAndroidLibraryDefaults"], | 
|  | srcs: [ | 
|  | "src/**/*.java", | 
|  | ":statslog-networkstack-java-gen-stable", | 
|  | ], | 
|  | static_libs: ["NetworkStackApiStableShims"], | 
|  | manifest: "AndroidManifestBase.xml", | 
|  | visibility: [ | 
|  | "//frameworks/base/packages/Connectivity/tests/integration", | 
|  | "//frameworks/base/tests/net/integration", | 
|  | "//packages/modules/Connectivity/Tethering/tests/integration", | 
|  | "//packages/modules/Connectivity/tests/integration", | 
|  | "//packages/modules/NetworkStack/tests/unit", | 
|  | "//packages/modules/NetworkStack/tests/integration", | 
|  | ], | 
|  | lint: { strict_updatability_linting: true }, | 
|  | } | 
|  |  | 
|  | 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", | 
|  | ], | 
|  | // If this library is ever used outside of tests, it should not use "Dhcp*Packet", and specify | 
|  | // its contents explicitly. | 
|  | 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", | 
|  | ], | 
|  | lint: { strict_updatability_linting: 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, | 
|  | lint: { strict_updatability_linting: true }, | 
|  | } | 
|  |  | 
|  | cc_library_shared { | 
|  | name: "libnetworkstackutilsjni", | 
|  | srcs: [ | 
|  | "jni/network_stack_utils_jni.cpp" | 
|  | ], | 
|  | sdk_version: "29", | 
|  | min_sdk_version: "29", | 
|  | 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 29", | 
|  | 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 29 --compileApiLevel 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"], | 
|  | } |