Android 13 中的更新
| 更新 | 更多信息 | 
|---|---|
| 引入了 CrossDevice | CrossDevice | 
| 引入了拆分隧道技术 | 拆分隧道技术 | 
概览
网络共享模块可将 Android 设备的互联网连接与连接的其他客户端设备共享,这些设备可以通过 Wi-Fi、USB、蓝牙或以太网连接到网络共享设备。此模块包含网络共享组件(USB、Wi-Fi 接入点、蓝牙等)及其依赖项(与网络共享权限、IpServer 和 offloadController 的交互)。此模块是可更新的,这意味着它可在 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中
 | 
| CrossDevice 服务 | 在 packages/modules/CrossDevice/service中
 | 
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 接口
- tetheroffloadHIDL(在- hardware/interfaces/tetheroffload/中定义)
- DHCP 服务器(网络堆栈模块的一部分)
自定义
网络共享模块不支持自定义。
测试
Android 兼容性测试套件 (CTS) 可验证网络共享模块的功能。
