学习记录:Android14中的Wifi_Direct(P2P)

Wi-Fi Direct(直连)

术语背景: Miracast 是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的 无线显示标准 。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。

Wi-Fi直连 (英语:Wi-Fi Direct),之前曾被称为 Wi-Fi点对点 (Wi-Fi Peer-to-Peer),是一套无线网络互连协议,让wifi设备可以不必透过 无线热点(Access Point,AP),以点对点的方式,直接与另一个wifi设备连线,进行高速数据传输。这个协议由Wi-Fi联盟发展、支持、授与认证,通过认证的产品将可获得Wi-Fi CERTIFIED Wi-Fi Direct®标志。

无线通信技术综合对比:

基本工作原理

Wi-Fi Direct 基于 IEEE 802.11 协议族,并引入了一些新的机制来实现点对点通信:

1.Group Formation(组形成)

两个设备协商谁作为 Group Owner【群组所有者】【简称GO】 。GO 负责管理 IP 分配、信道选择、安全认证等。其他设备为 Client,连接到 GO。

  1. 服务发现(Service Discovery)

支持 SSDP、DNS-SD 等协议,用于查找其他设备上可用的服务(如打印机、媒体服务器)。用户可以通过搜索找到附近的设备并发起连接。

  1. 安全连接机制(WPS/WPA2/WPA3)

使用 WPS(Wi-Fi Protected Setup) 进行快速配对。使用 WPA2/WPA3 加密保证数据传输的安全性。

Wi-Fi Direct 的所有新增机制(P2P 发现、GO 协商、WPS 配对)都只在 wifi---802.11 的 MAC 子层(数据链路层)里完成,上层仍跑标准 TCP/IP 协议栈,不引入任何额外"传输层"。

关键概念解释

  • Group Owner (简称GO) :类似临时 AP,负责管理连接和网络配置
  • Client :连接到 GO 的设备
  • Device Discovery :发现附近支持 Wi-Fi Direct 的设备
  • Negotiation【协商】 :协商哪个设备成为 GO
  • WPS(Wi-Fi Protected Setup) :快速配对机制,包括 PBC(按钮连接)、PIN 码配对等方式
  • RTSP / Miracast :常见的应用层协议,用于视频投屏

WiFi Direct 主要特性:

WiFi Direct 应用场景:

Wi-Fi Alliance(Wifi联盟、WFA) 向成员厂商/芯片厂提供 Wi-Fi Direct 认证测试套件与参考 SDK(常称 Wi-Fi Direct SDK 或 P2P SDK),里面封装了:

  • P2P 设备发现(Device Discovery)
  • 服务发现(Service Discovery,可选)
  • Group Owner 协商与 WPS 配对
  • 连接建立、密钥管理(WPA2/WPA3)
  • L2 层数据路径初始化(Ethernet-like)

厂商拿到 SDK 后,在驱动/固件里实现 P2P-MLME 动作帧,并向上暴露统一接口(Linux 下即 nl80211 命令与 wpa_supplicant 的 P2P_* 命令集)。Android 再把 wpa_supplicant 封装成 WifiP2pManager API,应用层直接调用即可,无需再管底层细节

Wi-Fi Display(无线显示)

Wi-Fi Display 是Wi-Fi联盟制定的一个标准协议, 简称WFD,它结合了Wi-Fi标准和H.264视频编码技术。利用这种技术,消费者可以从一个移动设备将音视频内容实时镜像到大型屏幕,随时、随地、在各种设备之间可靠地传输和观看内容。Miracast实际上就是Wi-Fi联盟对支持WiFi Display功能的设备的认证名称,产品通过认证后会打上Miracast标签

Wifi Display 涉及的技术及协议框图

Miracast使用的 应用层 技术协议栈

常见的投屏方案与协议组合

不同的投屏技术方案会选择不同的协议组合:

Android14中的WiFi---P2P

Google文档:

中文:source.android.google.cn/docs/core/c...

英文:source.android.google.cn/docs/core/c...

P2P HIDL 定义:

bash 复制代码
android14/
    hardware/interfaces/wifi/1.0/***.hal
    hardware/interfaces/wifi/1.1/***.hal
    hardware/interfaces/wifi/1.2/***.hal
    hardware/interfaces/wifi/1.3/***.hal
    hardware/interfaces/wifi/1.4/***.hal
    hardware/interfaces/wifi/1.5/***.hal
    hardware/interfaces/wifi/1.6/***.hal
>>>android14/hardware/interfaces/wifi/1.0/IWifiP2pIface.hal    

P2P AIDL 定义:

ruby 复制代码
android14/
    hardware/interfaces/wifi/aidl/*/***.aidl
>>>android14/hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiP2pIface.aidl    

P2P Supplicant HIDL 定义:

bash 复制代码
android14/
    hardware/interfaces/wifi/supplicant/1.0/***.hal
    hardware/interfaces/wifi/supplicant/1.1/***.hal
    hardware/interfaces/wifi/supplicant/1.2/***.hal
    hardware/interfaces/wifi/supplicant/1.3/***.hal
    hardware/interfaces/wifi/supplicant/1.4/***.hal

P2P Supplicant AIDL 定义:

shell 复制代码
android14/
    hardware/interfaces/wifi/supplicant/aidl/*/***.aidl
>>>P2pGroupCapabilityMask.aidl
>>>ISupplicantP2pIface.aidl
>>>P2pStatusCode.aidl
>>>ISupplicantP2pNetwork.aidl
>>>P2pGroupStartedEventParams.aidl
>>>P2pClientEapolIpAddressInfo.aidl
>>>P2pProvDiscStatusCode.aidl
>>>ISupplicantP2pIfaceCallback.aidl
>>>P2pFrameTypeMask.aidl

WiFi---P2P 支持

AOSP(Android 开源项目)代码,启用 Wi-Fi Direct 的功能。具体操作是:在位于 device/<oem>/<device> 目录下的 device.mk 文件中,修改 PRODUCT_COPY_FILES 环境变量,以添加对 Wi-Fi Direct 功能的支持:

bash 复制代码
PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml

android.hardware.wifi.direct.xml

xml 复制代码
<!-- This is the standard feature indicating that the device includes WiFi Direct. -->
<permissions>
    <feature name="android.hardware.wifi.direct" />
</permissions>

WiFi---P2P 应用创建

  1. WiFi---P2P 初始设置
  2. WiFi---P2P 发现
  3. WiFi---P2P 连接
  4. WiFi---P2P 数据传输

具体参考Google文档: developer.android.google.cn/develop/con...

本文参考学习:

Miracast技术详解(一):Wi-Fi Display | codezjx's Home

WIFI无线网络之Wi-Fi Direct(Wi-Fi P2P)协议 | DD'Notes

WifiDisplay(Miracast)技术原理及实现

相关推荐
找藉口是失败者的习惯2 小时前
【Android】Android 车机 + AI Agent 有没有搞头?
android·人工智能
用户004452159302 小时前
从 Gradle 到 Transform:Android 编译开发 Part 1 - Gradle 构建初探
android
用户004452159302 小时前
Android studio连接GitLab及使用(Windows版本)
android
zhouping@2 小时前
polarctf2025秋
android·web安全·php
0xSec笔记本挖呀瓦呀挖2 小时前
OpenClawWeComzh 实战:安卓 APK 分析与手机取证全自动化基础玩法
android·web安全·网络安全·智能手机·自动化·取证·电子数据取证
jolimark3 小时前
【mysql部署】在ubuntu22.04上安装和配置mysql教程
android·mysql·adb
YSoup3 小时前
MAT最新下载地址及Android内存泄露排查简单使用
android
71-33 小时前
Android studio的安装下载(Android Studio Panda 1 | 2025.3.1 Patch 1 )
android·笔记·学习·android studio
俩个逗号。。3 小时前
Compose 预览报错:java.lang.NoSuchMethodError
android·android jetpack