网络

Android 10 包含以下网络模块:

  • 网络组件模块,用于提供通用 IP 服务、网络连接监控和强制登录门户检测。
  • 网络堆栈权限配置模块,定义了一种可让模块执行网络相关任务的权限。

网络组件模块

网络组件模块可以确保 Android 能够适应不断完善的网络标准,并支持与新实现进行互操作。例如,通过针对强制门户检测和登录代码的更新,Android 能够及时了解不断变化的强制门户模型;通过针对高级政策防火墙 (APF) 的更新,Android 能够在新型数据包普及的同时节省 WLAN 耗电量。

Android 10 中的变化

网络组件模块包含以下组件。

  • IP 服务。IpClient(以前称为 IpManager)组件负责处理 IP 层配置和维护。在 Android 9 中,它被蓝牙等组件用于进程间处理,被 WLAN 等组件用于进程内处理。DhcpClient 组件从 DHCP 服务器获取 IP 地址,以便将它们分配给接口。
  • NetworkMonitor。NetworkMonitor 组件会在连接到新网络或出现网络故障时、检测强制门户时以及验证网络时测试互联网可达性。
  • 强制门户登录应用。强制门户登录应用是一款预安装应用,负责管理强制门户的登录操作。从 Android 5.0 开始,此应用一直是一款独立应用,但它会与 NetworkMonitor 交互,以将一些用户选项转发到系统。

在使用网络组件模块的设备上,系统会将上述服务重构为其他进程,并使用稳定的 AIDL 接口进行访问。重构路径如下表所示。

IP 服务重构路径

Android 9 及更低版本 frameworks/base/services/net/java/android/net/ 中:
  • apf
  • dhcp
  • ip
  • netlink
  • util(部分)
Android 10 及更高版本 packages/modules/NetworkStack

强制门户登录重构路径

Android 9 及更低版本 frameworks/base/ 中:
  • core/java/android/net/captiveportal/
  • services/core/java/com/android/server/connectivity/NetworkMonitor.java
  • packages/CaptivePortalLogin/*(其中 * 表示通配符)
Android 10 及更高版本 packages/modules/CaptivePortalLogin(以及一些其他共享位置)

格式和依赖项

网络组件模块以三个 APK 的形式提供:一个用于 IP 服务,一个用于强制门户登录,一个用于网络堆栈权限配置

网络组件模块依赖于以下各项:

  • 系统服务器中的特权 @hide 方法(如 IConnectivityManager.aidl 中的此类方法)。这些 API 带有 @SystemApi 注释并受到适当保护,这样一来,该模块可以访问它们,但其他特权应用(如使用新签名权限的应用)则不能。
  • INetd.aidl 中定义的指向 netd 的 Binder IPC。此接口已转换为稳定的 AIDL,并且需要进行符合性测试。

网络堆栈权限配置模块

网络堆栈权限配置模块不包含任何代码,而是定义了一种供网络堆栈模块和强制门户登录模块使用的权限。系统允许已获得此权限的模块在设备上执行相关的网络配置任务。