// // 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_applicable_licenses: ["Android-Apache-2.0"], } java_defaults { name: "TetheringAndroidLibraryDefaults", sdk_version: "module_current", min_sdk_version: "30", srcs: [ "apishim/**/*.java", "src/**/*.java", ":framework-connectivity-shared-srcs", ":tethering-module-utils-srcs", ":services-tethering-shared-srcs", ], static_libs: [ "NetworkStackApiStableShims", "androidx.annotation_annotation", "modules-utils-build", "netlink-client", "networkstack-client", "android.hardware.tetheroffload.config-V1.0-java", "android.hardware.tetheroffload.control-V1.0-java", "android.hardware.tetheroffload.control-V1.1-java", "net-utils-framework-common", "net-utils-device-common", "netd-client", "NetworkStackApiCurrentShims", ], libs: [ "framework-connectivity", "framework-statsd.stubs.module_lib", "framework-tethering.impl", "framework-wifi", "unsupportedappusage", ], plugins: ["java_api_finder"], manifest: "AndroidManifestBase.xml", } // Build tethering static library, used to compile both variants of the tethering. android_library { name: "TetheringApiCurrentLib", defaults: ["TetheringAndroidLibraryDefaults"], } // Due to b/143733063, APK can't access a jni lib that is in APEX (but not in the APK). cc_library { name: "libtetherutilsjni", sdk_version: "current", apex_available: [ "//apex_available:platform", // Used by InProcessTethering "com.android.tethering", ], min_sdk_version: "30", header_libs: [ "bpf_syscall_wrappers", "bpf_tethering_headers", ], srcs: [ "jni/*.cpp", ], 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 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", sdk_version: "module_current", privileged: true, jni_libs: [ "libtetherutilsjni", ], resource_dirs: [ "res", ], libs: [ "framework-tethering", "framework-wifi", ], jarjar_rules: "jarjar-rules.txt", optimize: { proguard_flags_files: ["proguard.flags"], }, } // Non-updatable tethering running in the system server process for devices not using the module android_app { name: "InProcessTethering", defaults: ["TetheringAppDefaults"], static_libs: ["TetheringApiCurrentLib"], certificate: "platform", manifest: "AndroidManifest_InProcess.xml", // InProcessTethering is a replacement for Tethering overrides: ["Tethering"], apex_available: ["com.android.tethering"], min_sdk_version: "30", } // Updatable tethering packaged as an application android_app { name: "Tethering", defaults: ["TetheringAppDefaults"], static_libs: ["TetheringApiCurrentLib"], certificate: "networkstack", manifest: "AndroidManifest.xml", use_embedded_native_libs: true, // The permission configuration *must* be included to ensure security of the device required: [ "NetworkPermissionConfig", "privapp_whitelist_com.android.networkstack.tethering", ], apex_available: ["com.android.tethering"], min_sdk_version: "30", } sdk { name: "tethering-module-sdk", bootclasspath_fragments: ["com.android.tethering-bootclasspath-fragment"], }