android_packages_modules_Co.../Tethering/Android.bp

262 lines
7.9 KiB
Text
Raw Normal View History

//
// 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.
//
package {
default_team: "trendy_team_fwk_core_networking",
default_applicable_licenses: ["Android-Apache-2.0"],
}
java_defaults {
name: "TetheringApiLevel",
sdk_version: "module_current",
min_sdk_version: "30",
}
java_defaults {
name: "TetheringReleaseTargetSdk",
target_sdk_version: "33",
}
java_defaults {
name: "TetheringExternalLibs",
defaults: [
"TetheringApiLevel",
],
// Libraries not including Tethering's own framework-tethering (different flavors of that one
// are needed depending on the build rule)
libs: [
"connectivity-internal-api-util",
"framework-configinfrastructure.stubs.module_lib",
"framework-connectivity.stubs.module_lib",
"framework-connectivity-t.stubs.module_lib",
"framework-statsd.stubs.module_lib",
"framework-wifi.stubs.module_lib",
"framework-bluetooth.stubs.module_lib",
"unsupportedappusage",
],
defaults_visibility: ["//visibility:private"],
}
java_defaults {
name: "TetheringAndroidLibraryDefaults",
srcs: [
"apishim/**/*.java",
"src/**/*.java",
":framework-connectivity-shared-srcs",
":services-tethering-shared-srcs",
":statslog-connectivity-java-gen",
":statslog-framework-connectivity-java-gen",
":statslog-tethering-java-gen",
],
static_libs: [
"androidx.annotation_annotation",
Move struct {Clat*, Tether4*, TetherStats*} to connectivity module Needed because these struct classes should not be exposed. Only used for the connectivity module and its tests. Bug: 234160319 Test: atest ConnectivityCoverageTests The moved files are identical. diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/ClatEgress4Key.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/ClatEgress4Key.java diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/ClatEgress4Value.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/ClatEgress4Value.java diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/ClatIngress6Key.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/ClatIngress6Key.java diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/ClatIngress6Value.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/ClatIngress6Value.java diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/Tether4Key.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/Tether4Key.java diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/Tether4Value.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/Tether4Value.java diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/TetherStatsKey.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/TetherStatsKey.java diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/TetherStatsValue.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/TetherStatsValue.java diff packages/modules/Connectivity/common/src/com/android/net/module/util/bpf/ClatEgress4Key.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/ClatEgress4Key.java (no diff) Change-Id: I4ce8045150bdbf04c63c5262c58a0ebcc30d395c
2022-06-28 22:47:00 +08:00
"connectivity-net-module-utils-bpf",
"com.android.net.flags-aconfig-java",
"modules-utils-build",
"modules-utils-statemachine",
"networkstack-client",
// AIDL tetheroffload implementation
"android.hardware.tetheroffload-V1-java",
// HIDL tetheroffload implementation
"android.hardware.tetheroffload.config-V1.0-java",
"android.hardware.tetheroffload.control-V1.0-java",
"android.hardware.tetheroffload.control-V1.1-java",
"android.hidl.manager-V1.2-java",
"net-utils-connectivity-apks",
"netd-client",
"tetheringstatsprotos",
],
defaults: ["TetheringExternalLibs"],
libs: [
"framework-annotations-lib",
Switch framework-tethering to use java_sdk_library The names of the individual modules do not quite follow the pattern that java_sdk_library uses so this temporarily sets the following: naming_scheme: "frameworks-modules" That causes java_sdk_library to use a naming scheme that matches the one used by the individual modules of this. It will be cleaned up later. Part of the purpose of the java_sdk_library is to hide the implementation code and force users of the library to depend on stubs for a well defined API. Ideally, it would allow access to the implementation in those cases where it is safe, e.g. from within the same APEX, or from tests for the implementation. Unfortunately, due to limitations in the build it does not yet have enough information to make that decision correctly which means that any code that needs to compile against the implementation is broken which would prevent us from converting the module to java_sdk_library. However, the only way to provide the additional information to allow the implementation to be correctly exposed is to convert the modules to java_sdk_library; a cycle. In order to break that cycle the java_sdk_library creates a special <module>.impl target which is used directly by tests and any other code that needs it. Once all the modules have been converted to a java_sdk_library then we can resolve the limitations in the build and remove the direct references to <module>.impl. Test: m update-api Bug: 155164730 Merged-In: If5c115f482751f9f4b5f047e9e401a18e36799ef Merged-In: Id1c2e848430c49a2da7402244814cd084f5da77c Change-Id: Id1c2e848430c49a2da7402244814cd084f5da77c
2020-05-13 12:28:49 +01:00
"framework-tethering.impl",
],
manifest: "AndroidManifestBase.xml",
lint: {
error_checks: ["NewApi"],
},
}
// build tethering static library, used to compile both variants of the tethering.
android_library {
name: "TetheringApiCurrentLib",
defaults: [
"ConnectivityNextEnableDefaults",
"TetheringAndroidLibraryDefaults",
"TetheringReleaseTargetSdk",
],
static_libs: [
"NetworkStackApiCurrentShims",
],
apex_available: ["com.android.tethering"],
lint: {
baseline_filename: "lint-baseline.xml",
},
}
android_library {
name: "TetheringApiStableLib",
defaults: [
"TetheringAndroidLibraryDefaults",
"TetheringReleaseTargetSdk",
],
static_libs: [
"NetworkStackApiStableShims",
],
apex_available: ["com.android.tethering"],
lint: {
baseline_filename: "lint-baseline.xml",
},
}
// Due to b/143733063, APK can't access a jni lib that is in APEX (but not in the APK).
cc_library {
name: "libcom_android_networkstack_tethering_util_jni",
sdk_version: "current",
apex_available: [
"com.android.tethering",
],
min_sdk_version: "30",
header_libs: [
"bpf_connectivity_headers",
],
srcs: [
"jni/*.cpp",
],
shared_libs: [
"liblog",
"libnativehelper_compat_libc++",
],
static_libs: [
"libnet_utils_device_common_bpfjni",
"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 Tethering 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".
stl: "c++_static",
cflags: [
"-Wall",
"-Werror",
"-Wno-unused-parameter",
"-Wthread-safety",
],
ldflags: ["-Wl,--exclude-libs=ALL,--error-limit=0"],
}
// Common defaults for compiling the actual APK.
java_defaults {
name: "TetheringAppDefaults",
privileged: true,
jni_libs: [
"libcom_android_networkstack_tethering_util_jni",
],
resource_dirs: [
"res",
],
// Libs are not actually needed to build here since build rules using these defaults are just
// packaging the TetheringApiXLibs in APKs, but they are necessary so that R8 has the right
// references to optimize the code. Without these, there will be missing class warnings and code
// may be wrongly optimized.
// R8 runs after jarjar, so the framework-X libraries need to be the post-jarjar artifacts
// (framework-tethering.impl), if they are not just stubs, so that the name of jarjared
// classes match.
// TODO(b/229727645): ensure R8 fails the build fully if libraries are missing
defaults: ["TetheringExternalLibs"],
libs: [
"framework-tethering.impl",
],
jarjar_rules: "jarjar-rules.txt",
optimize: {
proguard_flags_files: ["proguard.flags"],
},
}
// Updatable tethering packaged for finalized API
android_app {
name: "Tethering",
defaults: [
"TetheringAppDefaults",
],
static_libs: ["TetheringApiStableLib"],
certificate: "networkstack",
manifest: "AndroidManifest.xml",
use_embedded_native_libs: true,
privapp_allowlist: ":privapp_allowlist_com.android.tethering",
apex_available: ["com.android.tethering"],
updatable: true,
}
android_app {
name: "TetheringNext",
defaults: [
"TetheringAppDefaults",
"ConnectivityNextEnableDefaults",
],
static_libs: ["TetheringApiCurrentLib"],
certificate: "networkstack",
manifest: "AndroidManifest.xml",
use_embedded_native_libs: true,
privapp_allowlist: ":privapp_allowlist_com.android.tethering",
apex_available: ["com.android.tethering"],
lint: {
error_checks: ["NewApi"],
},
updatable: true,
}
sdk {
name: "tethering-module-sdk",
apexes: [
// Adds exportable dependencies of the APEX to the sdk,
// e.g. *classpath_fragments.
"com.android.tethering",
],
native_shared_libs: [
"libcom.android.tethering.dns_helper",
"libnetd_updatable",
],
}
java_library_static {
name: "tetheringstatsprotos",
proto: {
type: "lite",
},
srcs: [
"src/com/android/networkstack/tethering/metrics/stats.proto",
],
static_libs: ["tetheringprotos"],
apex_available: ["com.android.tethering"],
min_sdk_version: "30",
}
genrule {
name: "statslog-tethering-java-gen",
tools: ["stats-log-api-gen"],
cmd: "$(location stats-log-api-gen) --java $(out) --module network_tethering" +
" --javaPackage com.android.networkstack.tethering.metrics --javaClass TetheringStatsLog",
out: ["com/android/networkstack/tethering/metrics/TetheringStatsLog.java"],
}