Android 13 中的更新
更新 | 更多信息 |
---|---|
引入 CrossDevice | 跨设备 |
引入分裂隧道 | 拆分隧道 |
概述
Tethering 模块与其他连接的客户端设备共享 Android 设备的 Internet 连接,这些客户端设备可以通过 Wi-Fi、USB、蓝牙或以太网连接到 Tethering 设备。该模块包括网络共享组件(USB、Wi-Fi 接入点、蓝牙等)及其依赖项(与网络共享权利、 IpServer
和offloadController
的交互)。此模块是可更新的,这意味着它可以接收正常 Android 发布周期之外的功能更新。
Tethering 模块使整个 Android 生态系统中的 OEM 能够使用具有以下优势的单一标准参考实现。
最终用户在 Android 设备上获得一致的体验,并通过模块更新修复互操作性问题。
OEM 可以满足运营商的要求,同时还可以降低个性化定制的成本(因为他们不需要以不同的方式对相同的要求进行不同的实现)。
拆分隧道
为了支持拆分隧道用例,Android 13 添加了一个新 API 来指定排除路由。
拆分隧道是指某些流量通过 VPN 而其他流量不通过的配置。一个常见的例子是,组织希望一般网络冲浪、带宽密集型(例如,YouTube、Netflix)或延迟敏感的应用程序(例如, Office 365 )绕过 VPN。在拆分隧道可用之前, VpnService.Builder
允许 VPN 客户端指示只有一些子网应该路由到它(包括路由)。使用拆分隧道,您可以指定反向:将所有流量路由到 VPN,特定子网除外(排除路由)。
新拆分隧道 API 的签名是:
public Builder excludeRoute(@NonNull IpPrefix prefix)
跨设备
在 Android 13 中引入的 CrossDevice 旨在提供使用标准协议的跨设备通信技术。它为设备发现、经过身份验证的连接和其他跨设备体验提供 API 和功能。
跨设备动机
- 与 OEM 合作伙伴更紧密的合作。 OEM 可以将自己的帐户密钥系统与 CrossDevice 实现集成,而无需使用 Google 的解决方案。
- 协议的更明显的实现。 CrossDevice 模块是开源的,为 CrossDevice 技术的实施提供了对实施细节的更多可见性和更好的隐私故事。
CrossDevice 模块边界
跨设备 API | 在packages/modules/CrossDevice/framework
|
跨设备服务 | 在packages/modules/CrossDevice/service
|
CrossDevice 封装格式
该模块的主要功能包含在 APEX 包中。资源打包在一个 APK 中。
跨设备依赖
CrossDevice 依赖于以下内容:
- 无线上网
- 蓝牙
- 超宽带
- modules-utils-preconditions
- 原型库
跨设备自定义选项
我们计划允许 OEM 通过 RRO 自定义半张 UI。没有定制功能的计划。
跨设备测试策略
我们计划添加 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 或更高版本的设备。
包括连接服务
从 Android 12 开始,实现 L3+ 连接的中心组件的ConnectivityService
代码被添加到 Tethering APEX。网络共享的范围扩展到连接模块。
模块依赖
Tethering 模块具有以下依赖项:
- 系统服务器中的公共和系统 API 方法
- 稳定的 AIDL IPC 与系统服务器接口
tetheroffload
HIDL(在hardware/interfaces/tetheroffload/
中定义)- DHCP 服务器(网络堆栈模块的一部分)
定制
Tethering 模块不支持自定义。
测试
Android 兼容性测试套件 (CTS) 验证 Tethering 模块的功能。