网络共享

Android 13 中的更新

更新 更多信息
引入了 CrossDevice CrossDevice
引入了拆分隧道技术 拆分隧道技术

概览

网络共享模块可将 Android 设备的互联网连接与连接的其他客户端设备共享,这些设备可以通过 Wi-Fi、USB、蓝牙或以太网连接到网络共享设备。此模块包含网络共享组件(USB、Wi-Fi 接入点、蓝牙等)及其依赖项(与网络共享权限、IpServeroffloadController 的交互)。此模块是可更新的,这意味着它可在 Android 常规发布周期外的时间接收功能更新。

网络共享模块可让整个 Android 生态系统中的 OEM 使用单个标准参考实现,该实现具有以下优势。

  • 最终用户可在不同 Android 设备上获得一致的体验,并可通过模块更新解决互操作性问题。

  • OEM 可以满足运营商要求,同时也可以减少进行单独自定义的费用(因为他们不需要以不同的方式实现相同的要求)。

拆分隧道技术

为了支持拆分隧道技术用例,我们在 Android 13 中新增了一个 API 来指定排除路由。

拆分隧道技术是指只让特定流量通过 VPN 的配置。一个常见示例是,组织希望常规的网上冲浪、带宽密集型应用(例如 YouTube、Netflix)或对延迟敏感的应用(例如 Office 365)绕过 VPN。在拆分隧道技术推出之前,VpnService.Builder 允许 VPN 客户端指明只能将部分子网路由到它(包含路由)。通过拆分隧道技术,您可以指定反面情况:将所有流量路由到 VPN,但特定子网除外(排除路由)。

新增的拆分隧道技术 API 的签名为:

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

Android 13 中引入的 CrossDevice 旨在使用标准协议提供跨设备通信技术。CrossDevice 为设备发现、经过身份验证的连接和其他跨设备体验提供了 API 和功能。

CrossDevice 动机

  • 与 OEM 合作伙伴展开更紧密的协作。OEM 可以将自己的账号密钥系统与 CrossDevice 实现集成,而无需使用 Google 的解决方案。
  • 协议实现更加开源透明。CrossDevice 模块是开源的,可让您更清晰地了解实现详情,并改善针对 CrossDevice 技术实现的隐私描述。

CrossDevice 模块边界

CrossDevice API packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
CrossDevice 服务 packages/modules/CrossDevice/service
  • NearbyService - 扫描 API

CrossDevice 软件包格式

此模块的主要函数包含在 APEX 软件包中。这些资源打包成了 APK。

CrossDevice 依赖项

CrossDevice 依赖于以下几项技术:

  • WiFi
  • 蓝牙
  • UWB
  • module-utils-preconditions
  • Proto 库

CrossDevice 自定义选项

我们计划允许 OEM 通过 RRO 自定义半页界面。我们不打算自定义该功能。

CrossDevice 测试策略

我们计划添加 Android 兼容性测试套件 (CTS) 测试来验证 CrossDevice 功能,并将跨设备测试加入到 MTS 中。

eBPF 网络共享分流

为了实现高速网络共享,而无需针对硬件分流做出回复,Android 11 针对 IPv6 下载(流量流向已共享网络的设备)提供了一种称为 eBPF 网络共享分流的网络共享软件分流解决方案。

从 Android 12 开始,此功能(包括 eBPF 程序代码)完全由网络共享模块提供,该模块支持以下各项操作:

  • IPv6 下载(流量流向已共享网络的设备)
  • IPv6 上传(流量来自已共享网络的设备)
  • IPv4 TCP/UDP 上传和下行(流量流向/来自已共享网络的设备)
  • eBPF 分流

此功能默认处于启用状态,用户可通过 RRO 将 config_tether_enable_bpf_offload 配置覆盖为 false;如需了解详情,请参阅自定义

IPv4 和 IPv6 支持

网络共享模块支持 IPv4 和 IPv6 双栈。

  • 对于 IPv4 网络,该模块会设置网络地址转换 (NAT),并采用动态主机配置协议 (DHCP) 进行 IP 地址分配。

  • 对于 IPv6 网络,该模块会采用 IPv6 无状态地址自动配置 (SLAAC) 进行 IP 地址分配。

模块边界

对于 Android 12 及更高版本,packages/modules/Connectivity 下的所有文件/文件夹都处于网络共享模块的作用域内。

对于 Android 11 及更低版本,网络共享模块在 packages/modules/Tethering 中具有以下 Android 10 文件。

  • frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java
  • frameworks/base/services/core/java/com/android/server/connectivity/tethering/
  • frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
  • frameworks/base/services/net/java/android/net/ip/{InterfaceController,IpServer,RouterAdvertisementDaemon}.java
  • frameworks/base/services/net/java/android/net/{netlink,dhcp}/*
  • frameworks/base/services/net/java/android/net/util/{InterfaceSet,InterfaceParams,NetdService,PrefixUtils,SharedLog,VersionedBroadcastListener}.java
  • frameworks/base/core/java/android/net/{ITetheringEventCallback,ITetheringStatsProvider}.aidl
  • frameworks/base/core/java/android/net/{NetworkUtils,util/IpUtils}.java
  • frameworks/base/core/java/com/android/internal/util/{BitUtils,IndentingPrintWriter,State,StateMachine}.java
  • frameworks/base/core/java/com/android/server/connectivity/MockableSystemProperties.java
  • frameworks/base/core/java/android/os/INetworkManagementService.aidl
  • frameworks/base/core/java/android/bluetooth/BluetoothPan.java
  • frameworks/base/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
  • packages/apps/Settings/src/com/android/settings/wifi/tether/TetherService.java
  • packages/apps/Settings/src/com/android/settings/network/TetherProvisioningActivity.java

模块格式

网络共享模块 (com.android.tethering) 采用 APEX 格式,适用于搭载 Android 11 或更高版本的设备。

添加了 ConnectivityService

从 Android 12 开始,用于实现 L3+ 连接的核心组件的 ConnectivityService 代码已添加到网络共享 APEX。网络共享的范围已扩展至连接模块。

模块依赖项

网络共享模块具有以下依赖项:

  • 系统服务器中的公共 API 和系统 API 方法
  • 与系统服务器的稳定 AIDL IPC 接口
  • tetheroffload HIDL(在 hardware/interfaces/tetheroffload/ 中定义)
  • DHCP 服务器(网络堆栈模块的一部分)

自定义

网络共享模块不支持自定义。

测试

Android 兼容性测试套件 (CTS) 可验证网络共享模块的功能。