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 依赖于以下几项技术:
- Wi-Fi
- 蓝牙
- 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) 可验证网络共享模块的功能。