Android 13 中的更新
更新 | 更多信息 |
---|---|
已推出 CrossDevice | CrossDevice |
已推出拆分隧道 | 拆分隧道 |
概览
网络共享模块将 Android 设备的互联网连接与其他连接的客户端设备共享,客户端设备可以通过无线网络、USB、蓝牙或以太网连接到网络共享设备。此模块包括网络共享组件(USB、无线网络接入点、蓝牙等)及其依赖项(与网络共享授权、IpServer
和 offloadController
的互动)。此模块是可更新的,这意味着它可以接收正常 Android 发布周期之外的功能更新。
Tethering 模块使整个 Android 生态系统中的 OEM 能够使用单一的标准参考实现,从而带来以下优势。
最终用户可以在不同的 Android 设备上获得一致的体验,并通过模块更新来修复互操作性问题。
OEM 可以满足运营商的要求,同时还可以降低各个自定义项的成本(因为他们不需要以不同的方式为相同的要求进行不同的实现)。
拆分隧道
为了支持拆分隧道用例,Android 13 中添加了一个新的 API 来指定排除路由。
拆分隧道是指某些流量通过 VPN,而其他流量不通过 VPN 的配置。一个常见的例子是,组织希望常规网络浏览、带宽密集型应用程序(例如,YouTube、Netflix)或延迟敏感型应用程序(例如,Office 365)绕过 VPN。在拆分隧道可用之前,VpnService.Builder
允许 VPN 客户端指示只有某些子网应路由到它(包含路由)。通过拆分隧道,您可以指定相反的情况:将所有流量路由到 VPN,但特定子网(排除路由)除外。
新的拆分隧道 API 的签名是
public Builder excludeRoute(@NonNull IpPrefix prefix)
CrossDevice
Android 13 中引入的 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
- modules-utils-preconditions
- Proto 库
CrossDevice 自定义选项
我们计划允许 OEM 通过 RRO 自定义半屏 UI。目前没有计划自定义功能。
CrossDevice 测试策略
我们计划添加 Android 兼容性测试套件 (CTS) 测试来验证 CrossDevice 功能,并将跨设备测试添加到 MTS 中。
eBPF 网络共享分流
为了在不依赖硬件分流的情况下提供高速网络共享,Android 11 提供了一种名为 eBPF 网络共享分流的网络共享软件分流解决方案,用于 IPv6 下载(流向网络共享设备的流量)。
从 Android 12 开始,此功能(包括 eBPF 程序代码)完全由 Tethering 模块提供,该模块支持以下各项
- IPv6 下载(流向网络共享设备的流量)
- IPv6 上传(来自网络共享设备的流量)
- IPv4 TCP/UDP 上传和下游(流向/来自网络共享设备的流量)
- eBPF 分流
此功能默认启用,用户可以通过 RRO 将 config_tether_enable_bpf_offload
配置覆盖为 false。有关详细信息,请参阅自定义。
IPv4 和 IPv6 支持
Tethering 模块支持 IPv4 和 IPv6 双栈。
对于 IPv4 网络,该模块设置网络地址转换 (NAT),并采用动态主机配置协议 (DHCP) 进行 IP 地址分配。
对于 IPv6 网络,该模块采用 IPv6 无状态地址自动配置 (SLAAC) 进行 IP 地址分配。
模块边界
对于 Android 12 及更高版本,packages/modules/Connectivity
下的所有文件/文件夹都在 Tethering 模块范围内。
对于 Android 11 及更低版本,Tethering 模块在 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
模块格式
Tethering 模块 (com.android.tethering
) 采用 APEX 格式,适用于运行 Android 11 或更高版本的设备。
包含 ConnectivityService
从 Android 12 开始,实现 L3+ 连接中心组件的 ConnectivityService
代码已添加到 Tethering APEX 中。Tethering 的范围扩展到 Connectivity 模块。
模块依赖项
Tethering 模块具有以下依赖项
- 系统服务器中的公共和系统 API 方法
- 与系统服务器的稳定 AIDL IPC 接口
tetheroffload
HIDL(在hardware/interfaces/tetheroffload/
中定义)- DHCP 服务器(网络堆栈模块的一部分)
自定义
Tethering 模块不支持自定义。
测试
Android 兼容性测试套件 (CTS) 验证 Tethering 模块的功能。