1// Copyright (C) 2019 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// 1. The "net-utils-framework-common" library is also compiled into the framework and placed on the
16//    boot classpath. It uses jarjar rules so that anything outside the framework can use this
17//    library directly.
18// 2. The "net-utils-services-common" library is for use by modules and frameworks/base/services.
19//    It does not need to be jarjared because it is not placed on the bootclasspath.
20// 3. The "net-utils-telephony-common-srcs" filegroup is for use specifically by telephony, which
21//    places many of its classes, even non-API service classes, on the boot classpath. Any file that
22//    is added to this filegroup *must* have a corresponding jarjar rule in the telephony jarjar
23//    rules file. Otherwise, it will end up on the boot classpath and other modules will not be able
24//    to provide their own copy.
25
26// Note: all filegroups here must have the right path attribute because otherwise, if they are
27// included in the bootclasspath, they could incorrectly be included in the SDK documentation even
28// though they are not in the current.txt files.
29
30package {
31    default_team: "trendy_team_fwk_core_networking",
32    default_applicable_licenses: ["Android-Apache-2.0"],
33}
34
35// This library shouldn't be used anymore (no class should be added), and per-user libraries like
36// net-utils-service-connectivity or net-utils-framework-wifi should be used instead.
37java_library {
38    name: "net-utils-device-common",
39    srcs: [
40        "device/com/android/net/module/util/arp/ArpPacket.java",
41        "device/com/android/net/module/util/DeviceConfigUtils.java",
42        "device/com/android/net/module/util/DomainUtils.java",
43        "device/com/android/net/module/util/FdEventsReader.java",
44        "device/com/android/net/module/util/FeatureVersions.java",
45        "device/com/android/net/module/util/HandlerUtils.java",
46        "device/com/android/net/module/util/NetworkMonitorUtils.java",
47        "device/com/android/net/module/util/PacketReader.java",
48        "device/com/android/net/module/util/SharedLog.java",
49        "device/com/android/net/module/util/SocketUtils.java",
50        "device/com/android/net/module/util/SyncStateMachine.java",
51        // This library is used by system modules, for which the system health impact of Kotlin
52        // has not yet been evaluated. Annotations may need jarjar'ing.
53        // "src_devicecommon/**/*.kt",
54    ],
55    sdk_version: "module_current",
56    min_sdk_version: "30",
57    target_sdk_version: "30",
58    apex_available: [
59        "//apex_available:anyapex",
60        "//apex_available:platform",
61    ],
62    visibility: [
63        "//packages/modules/Connectivity:__subpackages__",
64        "//packages/modules/Connectivity/framework:__subpackages__",
65        "//packages/modules/NetworkStack:__subpackages__",
66        "//packages/modules/CaptivePortalLogin",
67    ],
68    static_libs: [
69        "modules-utils-statemachine",
70        "net-utils-framework-common",
71    ],
72    libs: [
73        "androidx.annotation_annotation",
74        "framework-annotations-lib",
75        "framework-configinfrastructure.stubs.module_lib",
76        "framework-connectivity.stubs.module_lib",
77    ],
78    lint: {
79        strict_updatability_linting: true,
80        error_checks: ["NewApi"],
81    },
82}
83
84java_defaults {
85    name: "lib_mockito_extended",
86    static_libs: [
87        "mockito-target-extended-minus-junit4",
88    ],
89    jni_libs: [
90        "libdexmakerjvmtiagent",
91        "libstaticjvmtiagent",
92    ],
93}
94
95java_library {
96    name: "net-utils-dnspacket-common",
97    srcs: [
98        "framework/**/DnsPacket.java",
99        "framework/**/DnsPacketUtils.java",
100        "framework/**/DnsSvcbPacket.java",
101        "framework/**/DnsSvcbRecord.java",
102        "framework/**/HexDump.java",
103        "framework/**/NetworkStackConstants.java",
104    ],
105    sdk_version: "module_current",
106    visibility: [
107        "//packages/services/Iwlan:__subpackages__",
108    ],
109    libs: [
110        "androidx.annotation_annotation",
111        "framework-annotations-lib",
112        "framework-connectivity.stubs.module_lib",
113    ],
114}
115
116filegroup {
117    name: "net-utils-framework-common-srcs",
118    srcs: ["framework/**/*.java"],
119    path: "framework",
120    visibility: [
121        "//frameworks/base",
122        "//packages/modules/Connectivity:__subpackages__",
123    ],
124}
125
126// The net-utils-device-common-bpf library requires the callers to contain
127// net-utils-device-common-struct-base.
128java_library {
129    name: "net-utils-device-common-bpf",
130    srcs: [
131        "device/com/android/net/module/util/BpfBitmap.java",
132        "device/com/android/net/module/util/BpfDump.java",
133        "device/com/android/net/module/util/BpfMap.java",
134        "device/com/android/net/module/util/BpfUtils.java",
135        "device/com/android/net/module/util/IBpfMap.java",
136        "device/com/android/net/module/util/JniUtil.java",
137        "device/com/android/net/module/util/SingleWriterBpfMap.java",
138        "device/com/android/net/module/util/TcUtils.java",
139    ],
140    sdk_version: "module_current",
141    min_sdk_version: "30",
142    visibility: [
143        "//packages/modules/Connectivity:__subpackages__",
144        "//packages/modules/NetworkStack:__subpackages__",
145    ],
146    libs: [
147        "androidx.annotation_annotation",
148        "framework-connectivity.stubs.module_lib",
149        "net-utils-device-common-struct-base",
150    ],
151    apex_available: [
152        "com.android.tethering",
153        "//apex_available:platform",
154    ],
155    lint: {
156        strict_updatability_linting: true,
157        error_checks: ["NewApi"],
158    },
159}
160
161java_library {
162    name: "net-utils-device-common-struct-base",
163    srcs: [
164        "device/com/android/net/module/util/Struct.java",
165    ],
166    sdk_version: "module_current",
167    min_sdk_version: "30",
168    visibility: [
169        "//packages/modules/Connectivity:__subpackages__",
170        "//packages/modules/NetworkStack:__subpackages__",
171    ],
172    static_libs: [
173        "net-utils-framework-common",
174    ],
175    libs: [
176        "androidx.annotation_annotation",
177        "framework-annotations-lib", // Required by InetAddressUtils.java
178        "framework-connectivity.stubs.module_lib",
179    ],
180    apex_available: [
181        "com.android.tethering",
182        "//apex_available:platform",
183    ],
184    lint: {
185        strict_updatability_linting: true,
186        error_checks: ["NewApi"],
187    },
188}
189
190// The net-utils-device-common-struct library requires the callers to contain
191// net-utils-device-common-struct-base.
192java_library {
193    name: "net-utils-device-common-struct",
194    srcs: [
195        "device/com/android/net/module/util/Ipv6Utils.java",
196        "device/com/android/net/module/util/PacketBuilder.java",
197        "device/com/android/net/module/util/structs/*.java",
198    ],
199    sdk_version: "module_current",
200    min_sdk_version: "30",
201    visibility: [
202        "//packages/modules/Connectivity:__subpackages__",
203        "//packages/modules/NetworkStack:__subpackages__",
204    ],
205    libs: [
206        "androidx.annotation_annotation",
207        "framework-annotations-lib", // Required by IpUtils.java
208        "framework-connectivity.stubs.module_lib",
209        "net-utils-device-common-struct-base",
210    ],
211    apex_available: [
212        "com.android.tethering",
213        "//apex_available:platform",
214    ],
215    lint: {
216        strict_updatability_linting: true,
217        error_checks: ["NewApi"],
218    },
219}
220
221// The net-utils-device-common-netlink library requires the callers to contain
222// net-utils-device-common-struct and net-utils-device-common-struct-base.
223java_library {
224    name: "net-utils-device-common-netlink",
225    srcs: [
226        "device/com/android/net/module/util/netlink/**/*.java",
227    ],
228    sdk_version: "module_current",
229    min_sdk_version: "30",
230    visibility: [
231        "//packages/modules/Connectivity:__subpackages__",
232        "//packages/modules/NetworkStack:__subpackages__",
233    ],
234    libs: [
235        "androidx.annotation_annotation",
236        "framework-connectivity.stubs.module_lib",
237        // For libraries which are statically linked in framework-connectivity, do not
238        // statically link here because callers of this library might already have a static
239        // version linked.
240        "net-utils-device-common-struct",
241        "net-utils-device-common-struct-base",
242    ],
243    apex_available: [
244        "com.android.tethering",
245        "//apex_available:platform",
246    ],
247    lint: {
248        strict_updatability_linting: true,
249        error_checks: ["NewApi"],
250    },
251}
252
253// The net-utils-device-common-ip library requires the callers to contain
254// net-utils-device-common-struct and net-utils-device-common-struct-base.
255java_library {
256    // TODO : this target should probably be folded into net-utils-device-common
257    name: "net-utils-device-common-ip",
258    srcs: [
259        "device/com/android/net/module/util/ip/*.java",
260    ],
261    sdk_version: "module_current",
262    min_sdk_version: "30",
263    visibility: [
264        "//packages/modules/Connectivity:__subpackages__",
265        "//packages/modules/NetworkStack:__subpackages__",
266    ],
267    libs: [
268        "framework-annotations-lib",
269        "framework-connectivity.stubs.module_lib",
270    ],
271    static_libs: [
272        "net-utils-device-common",
273        "net-utils-device-common-netlink",
274        "net-utils-framework-common",
275        "netd-client",
276    ],
277    apex_available: [
278        "com.android.tethering",
279        "//apex_available:platform",
280    ],
281    lint: {
282        strict_updatability_linting: true,
283        error_checks: ["NewApi"],
284    },
285}
286
287java_library {
288    name: "net-utils-framework-common",
289    srcs: [
290        ":net-utils-framework-common-srcs",
291    ],
292    sdk_version: "module_current",
293    min_sdk_version: "30",
294    libs: [
295        "androidx.annotation_annotation",
296        "framework-annotations-lib",
297        "framework-connectivity.stubs.module_lib",
298        "framework-connectivity-t.stubs.module_lib",
299        "framework-location.stubs.module_lib",
300    ],
301    jarjar_rules: "jarjar-rules-shared.txt",
302    visibility: [
303        "//cts/tests/tests/net",
304        "//cts/tests/tests/wifi",
305        "//packages/modules/Connectivity/tests/cts/net",
306        "//packages/modules/Connectivity/Tethering",
307        "//frameworks/base/tests:__subpackages__",
308        "//frameworks/opt/net/ike",
309        "//frameworks/opt/telephony",
310        "//frameworks/base/wifi:__subpackages__",
311        "//packages/modules/Connectivity:__subpackages__",
312        "//packages/modules/NetworkStack:__subpackages__",
313        "//packages/modules/CaptivePortalLogin",
314        "//packages/modules/Wifi/framework/tests:__subpackages__",
315        "//packages/apps/Settings",
316    ],
317    lint: {
318        strict_updatability_linting: true,
319        error_checks: ["NewApi"],
320    },
321    errorprone: {
322        enabled: true,
323        // Error-prone checking only warns of problems when building. To make the build fail with
324        // these errors, list the specific error-prone problems below.
325        javacflags: [
326            "-Xep:NullablePrimitive:ERROR",
327        ],
328    },
329    apex_available: [
330        "//apex_available:platform",
331        "com.android.tethering",
332    ],
333}
334
335java_library {
336    name: "net-utils-services-common",
337    srcs: [
338        "device/android/net/NetworkFactory.java",
339        "device/android/net/NetworkFactoryImpl.java",
340        "device/android/net/NetworkFactoryLegacyImpl.java",
341        "device/android/net/NetworkFactoryShim.java",
342    ],
343    sdk_version: "module_current",
344    min_sdk_version: "30",
345    libs: [
346        "framework-annotations-lib",
347        "framework-connectivity.stubs.module_lib",
348        "modules-utils-build_system",
349    ],
350    // TODO: remove "apex_available:platform".
351    apex_available: [
352        "//apex_available:platform",
353        "com.android.btservices",
354        "com.android.tethering",
355        "com.android.wifi",
356    ],
357    visibility: [
358        // TODO: remove after NetworkStatsService moves to the module.
359        "//frameworks/base/services/net",
360        "//packages/modules/Connectivity/service",
361        "//packages/modules/Connectivity/tests:__subpackages__",
362        "//packages/modules/Bluetooth/android/app",
363        "//packages/modules/Wifi/service:__subpackages__",
364    ],
365    lint: {
366        strict_updatability_linting: true,
367        error_checks: ["NewApi"],
368    },
369}
370
371java_library {
372    name: "net-utils-device-common-async",
373    srcs: [
374        "device/com/android/net/module/util/async/*.java",
375    ],
376    sdk_version: "module_current",
377    min_sdk_version: "30",
378    visibility: [
379        "//packages/modules/Connectivity:__subpackages__",
380    ],
381    libs: [
382        "framework-annotations-lib",
383    ],
384    static_libs: [
385    ],
386    apex_available: [
387        "com.android.tethering",
388        "//apex_available:platform",
389    ],
390    lint: {
391        strict_updatability_linting: true,
392        error_checks: ["NewApi"],
393    },
394}
395
396java_library {
397    name: "net-utils-device-common-wear",
398    srcs: [
399        "device/com/android/net/module/util/wear/*.java",
400    ],
401    sdk_version: "module_current",
402    min_sdk_version: "30",
403    visibility: [
404        "//packages/modules/Connectivity:__subpackages__",
405    ],
406    libs: [
407        "framework-annotations-lib",
408    ],
409    static_libs: [
410        "net-utils-device-common-async",
411    ],
412    apex_available: [
413        "com.android.tethering",
414        "//apex_available:platform",
415    ],
416    lint: {
417        strict_updatability_linting: true,
418        error_checks: ["NewApi"],
419    },
420}
421
422// Limited set of utilities for use by service-connectivity-mdns-standalone-build-test, to make sure
423// the mDNS code can build with only system APIs.
424// The mDNS code is platform code so it should use framework-annotations-lib, contrary to apps that
425// should use sdk_version: "system_current" and only androidx.annotation_annotation. But this build
426// rule verifies that the mDNS code can be built into apps, if code transformations are applied to
427// the annotations.
428// When using "system_current", framework annotations are not available; they would appear as
429// package-private as they are marked as such in the system_current stubs. So build against
430// core_platform and add the stubs manually in "libs". See http://b/147773144#comment7.
431java_library {
432    name: "net-utils-device-common-mdns-standalone-build-test",
433    // Build against core_platform and add the stub libraries manually in "libs", as annotations
434    // are already included in android_system_stubs_current but package-private, so
435    // "framework-annotations-lib" needs to be manually included before
436    // "android_system_stubs_current" (b/272392042)
437    sdk_version: "core_platform",
438    srcs: [
439        "device/com/android/net/module/util/FdEventsReader.java",
440        "device/com/android/net/module/util/HandlerUtils.java",
441        "device/com/android/net/module/util/SharedLog.java",
442        "framework/com/android/net/module/util/ByteUtils.java",
443        "framework/com/android/net/module/util/CollectionUtils.java",
444        "framework/com/android/net/module/util/DnsUtils.java",
445        "framework/com/android/net/module/util/HexDump.java",
446        "framework/com/android/net/module/util/LinkPropertiesUtils.java",
447    ],
448    libs: [
449        "framework-annotations-lib",
450        "android_system_stubs_current",
451        "androidx.annotation_annotation",
452    ],
453    visibility: ["//packages/modules/Connectivity/service-t"],
454}
455
456// net-utils-framework-connectivity is only for framework-connectivity.
457java_library {
458    name: "net-utils-framework-connectivity",
459    srcs: [
460        ":net-utils-framework-connectivity-srcs",
461    ],
462    sdk_version: "module_current",
463    min_sdk_version: "30",
464    apex_available: [
465        "com.android.tethering",
466        "//apex_available:platform",
467    ],
468    visibility: [
469        "//packages/modules/Connectivity/framework",
470    ],
471    libs: [
472        "androidx.annotation_annotation",
473        "framework-annotations-lib",
474        "framework-configinfrastructure.stubs.module_lib",
475        "framework-connectivity.stubs.module_lib",
476    ],
477    lint: {
478        strict_updatability_linting: true,
479        error_checks: ["NewApi"],
480    },
481}
482
483java_defaults {
484    name: "net-utils-non-bootclasspath-defaults",
485    sdk_version: "module_current",
486    min_sdk_version: "30",
487    libs: [
488        "androidx.annotation_annotation",
489        "framework-annotations-lib",
490        "framework-configinfrastructure.stubs.module_lib",
491        "framework-connectivity.stubs.module_lib",
492        "framework-connectivity-t.stubs.module_lib",
493        "framework-location.stubs.module_lib",
494        "framework-tethering.stubs.module_lib",
495        "unsupportedappusage",
496    ],
497    static_libs: [
498        "modules-utils-build_system",
499        "modules-utils-statemachine",
500        "net-utils-non-bootclasspath-aidl-java",
501        "netd-client",
502    ],
503    apex_available: [
504        "com.android.tethering",
505        "//apex_available:platform",
506    ],
507    defaults_visibility: [
508        "//visibility:private",
509    ],
510    lint: {
511        strict_updatability_linting: true,
512        error_checks: ["NewApi"],
513    },
514}
515
516// net-utils-service-connectivity is only for service-connectivity.
517java_library {
518    name: "net-utils-service-connectivity",
519    srcs: [
520        ":net-utils-all-srcs",
521    ],
522    exclude_srcs: [
523        ":net-utils-framework-connectivity-srcs",
524    ],
525    libs: [
526        "net-utils-framework-connectivity",
527        "framework-connectivity.impl",
528        "framework-tethering.impl",
529    ],
530    defaults: ["net-utils-non-bootclasspath-defaults"],
531    jarjar_rules: "jarjar-rules-shared.txt",
532    visibility: [
533        "//packages/modules/Connectivity/service",
534        "//packages/modules/Connectivity/staticlibs/tests/unit",
535    ],
536}
537
538// net-utils-connectivity-apks is only for NetworkStack, CaptivePortalLogin and
539// Tethering.apk
540// It includes all the static libraries in this directory, which is safe because
541// these APKs use R8 to strip out unused code, and they do not depend on
542// bootclasspath jars that may have duplicate copies of the included classes
543// with the same jarjaring.
544// Tethering.apk does depend on a bootclasspath jar (framework-tethering.jar),
545// however it does not use any of the static libraries. If it did, Tethering.apk
546// would need to use another variant that excludes classes that are already
547// included in framework-tethering.jar (similarly to how framework-connectivity
548// and service-connectivity do it). Otherwise, static libs included in
549// framework-tethering and Tethering.apk and jarjared the same way would
550// conflict.
551java_library {
552    name: "net-utils-connectivity-apks",
553    srcs: [
554        ":net-utils-all-srcs",
555        ":framework-connectivity-shared-srcs",
556    ],
557    defaults: ["net-utils-non-bootclasspath-defaults"],
558    jarjar_rules: "jarjar-rules-shared.txt",
559    visibility: [
560        "//packages/modules/CaptivePortalLogin:__subpackages__",
561        "//packages/modules/Connectivity/Tethering",
562    ],
563}
564
565aidl_interface {
566    name: "net-utils-non-bootclasspath-aidl",
567    srcs: [
568        ":net-utils-aidl-srcs",
569    ],
570    unstable: true,
571    backend: {
572        java: {
573            enabled: true,
574            min_sdk_version: "30",
575            apex_available: [
576                "com.android.tethering",
577                "com.android.wifi",
578                "//apex_available:platform",
579            ],
580        },
581        cpp: {
582            enabled: false,
583        },
584        ndk: {
585            enabled: false,
586        },
587        rust: {
588            enabled: false,
589        },
590    },
591    include_dirs: [
592        "packages/modules/Connectivity/framework/aidl-export",
593    ],
594    visibility: [
595        "//system/tools/aidl/build",
596    ],
597}
598
599// Use a filegroup and not a library for telephony sources, as framework-annotations cannot be
600// included either (some annotations would be duplicated on the bootclasspath).
601filegroup {
602    name: "net-utils-telephony-common-srcs",
603    srcs: [
604        // Any class here *must* have a corresponding jarjar rule in the telephony build rules.
605        "device/android/net/NetworkFactory.java",
606        "device/android/net/NetworkFactoryImpl.java",
607        "device/android/net/NetworkFactoryLegacyImpl.java",
608        "device/android/net/NetworkFactoryShim.java",
609    ],
610    path: "device",
611    visibility: [
612        "//frameworks/opt/telephony",
613    ],
614}
615
616// Filegroup to build lib used by Wifi framework
617// Any class here *must* have a corresponding jarjar rule in the wifi build rules.
618filegroup {
619    name: "net-utils-framework-wifi-common-srcs",
620    srcs: [
621        "framework/com/android/net/module/util/DnsSdTxtRecord.java",
622        "framework/com/android/net/module/util/Inet4AddressUtils.java",
623        "framework/com/android/net/module/util/InetAddressUtils.java",
624        "framework/com/android/net/module/util/MacAddressUtils.java",
625        "framework/com/android/net/module/util/NetUtils.java",
626    ],
627    path: "framework",
628    visibility: ["//visibility:private"],
629}
630
631// Filegroup to build lib used by IPsec/IKE framework
632// Any class here *must* have a corresponding jarjar rule in the IPsec build rules.
633filegroup {
634    name: "net-utils-framework-ipsec-common-srcs",
635    srcs: [
636        "framework/com/android/net/module/util/HexDump.java",
637    ],
638    path: "framework",
639    visibility: ["//visibility:private"],
640}
641
642java_library {
643    name: "net-utils-framework-ipsec",
644    sdk_version: "module_current",
645    min_sdk_version: "30",
646    srcs: [":net-utils-framework-ipsec-common-srcs"],
647    libs: [
648        "androidx.annotation_annotation",
649    ],
650    visibility: [
651        "//packages/modules/IPsec",
652    ],
653    apex_available: ["com.android.ipsec"],
654}
655
656// Use a file group containing classes necessary for framework-connectivity. The file group should
657// be as small as possible because because the classes end up in the bootclasspath and R8 is not
658// used to remove unused classes.
659filegroup {
660    name: "net-utils-framework-connectivity-srcs",
661    srcs: [
662        "device/com/android/net/module/util/BpfBitmap.java",
663        "device/com/android/net/module/util/BpfDump.java",
664        "device/com/android/net/module/util/BpfMap.java",
665        "device/com/android/net/module/util/BpfUtils.java",
666        "device/com/android/net/module/util/IBpfMap.java",
667        "device/com/android/net/module/util/JniUtil.java",
668        "device/com/android/net/module/util/SingleWriterBpfMap.java",
669        "device/com/android/net/module/util/Struct.java",
670        "device/com/android/net/module/util/TcUtils.java",
671        "framework/com/android/net/module/util/HexDump.java",
672    ],
673    visibility: ["//visibility:private"],
674}
675
676// Sources outside of com.android.net.module.util should not be added because many modules depend on
677// them and need jarjar rules
678filegroup {
679    name: "net-utils-all-srcs",
680    srcs: [
681        "device/**/*.java",
682        ":net-utils-framework-common-srcs",
683    ],
684    visibility: ["//visibility:private"],
685}
686
687filegroup {
688    name: "net-utils-aidl-srcs",
689    srcs: [
690        "device/**/*.aidl",
691    ],
692    path: "device",
693    visibility: ["//visibility:private"],
694}
695
696java_library {
697    name: "net-utils-service-wifi",
698    srcs: [
699        ":net-utils-all-srcs",
700    ],
701    exclude_srcs: [":net-utils-framework-wifi-common-srcs"],
702    libs: [
703        "net-utils-framework-wifi",
704    ],
705    defaults: ["net-utils-non-bootclasspath-defaults"],
706
707    visibility: [
708        "//packages/modules/Wifi/service",
709    ],
710    apex_available: [
711        "com.android.wifi",
712    ],
713}
714
715java_library {
716    name: "net-utils-framework-wifi",
717    sdk_version: "module_current",
718    min_sdk_version: "30",
719    srcs: [":net-utils-framework-wifi-common-srcs"],
720    libs: [
721        "framework-annotations-lib",
722        "framework-connectivity.stubs.module_lib",
723        "unsupportedappusage",
724    ],
725    visibility: [
726        "//packages/modules/Wifi/framework",
727    ],
728    apex_available: ["com.android.wifi"],
729}
730
731genrule {
732    name: "statslog-framework-connectivity-java-gen",
733    tools: ["stats-log-api-gen"],
734    cmd: "$(location stats-log-api-gen) --java $(out) --module connectivity --javaPackage com.android.net.module.util --javaClass FrameworkConnectivityStatsLog",
735    out: ["com/android/net/module/util/FrameworkConnectivityStatsLog.java"],
736}
737
738java_library {
739    name: "net-utils-service-vcn",
740    sdk_version: "module_current",
741    min_sdk_version: "30",
742    srcs: [
743        "device/com/android/net/module/util/HandlerUtils.java",
744    ],
745    libs: [
746        "framework-annotations-lib",
747    ],
748    visibility: [
749        // TODO: b/374174952 Remove it when VCN modularization is released
750        "//frameworks/base/packages/Vcn/service-b",
751
752        "//packages/modules/Connectivity/service-b",
753    ],
754    apex_available: [
755        // TODO: b/374174952 Remove it when VCN modularization is released
756        "//apex_available:platform",
757
758        "com.android.tethering",
759    ],
760}
761