Android 10 introduces support for the Wi-Fi Easy Connect protocol, also known as the device provisioning protocol (DPP). Wi-Fi Easy Connect was introduced by the Wi-Fi Alliance (WFA) as an alternative to Wi-Fi Protected Setup (WPS). WPS was deprecated in Android 9.
Wi-Fi Easy Connect provides a simple and secure method to:
- Onboard Wi-Fi devices (including headless devices) to a network without entering a password.
- Join Wi-Fi networks without knowing or entering a password.
Bootstrapping and authentication is configured using a URI, which is acquired by scanning a QR code (using a camera), or is configured out-of-band, for example, using BLE or NFC.
Wi-Fi Easy Connect uses an encrypted channel to send Wi-Fi credentials between devices, and because public action frames are used, devices can use existing access points.
Android 10 supports Wi-Fi Easy Connect only in initiator mode (responder mode is not supported). These modes of operation are supported:
- Initiator-Configurator: Send network credentials to a new device by scanning its QR code.
- Initiator-Enrollee: Join a network by scanning the network QR code.
Android 10 supports the pre-shared key (PSK) protocol for WPA2 and the simultaneous authentication of equals (SAE) protocol for WPA3.
Wi-Fi Easy Connect is only supported in client mode (SoftAP mode is not supported).
Implementation
To support Wi-Fi Easy Connect, implement the supplicant interface provided in the Android Open Source Project (AOSP). Depending on the interface that was implemented, this is at:
hardware/interfaces/wifi/supplicant/1.2/
or a later version for HIDLhardware/interfaces/wifi/supplicant/aidl/
for AIDL
The following are required to support DPP:
Linux kernel patches to support DPP:
- cfg80211
- nl80211
wpa_supplicant
with support for DPPWi-Fi driver with support for DPP
Wi-Fi firmware with support for DPP
Public APIs are available in Android 10 for use by apps:
WifiManager#isEasyConnectSupported
: Queries the framework to determine whether the device supports Wi-Fi Easy Connect.Activity#startActivityForResult(ACTION_PROCESS_WIFI_EASY_CONNECT_URI)
: Allows apps to integrate Wi-Fi Easy Connect into their onboarding/setup flow.
Enable Wi-Fi Easy Connect
To enable Wi-Fi Easy Connect in the Android framework, include the
CONFIG_DPP
compilation
option in the wpa_supplicant
configuration file,
android.config
:
# Easy Connect (Device Provisioning Protocol - DPP) CONFIG_DPP=y
Validation
To test your implementation, run the following tests.
Unit tests
Run
DppManagerTest
to verify the behavior of the capability flags for DPP.
atest DppManagerTest
VTS tests
If the HIDL interface is implemented, run
VtsHalWifiSupplicantV1_2TargetTest
to test the behavior of the supplicant HAL v1.2.
If the AIDL interface is implemented, run
VtsHalWifiSupplicantStaIfaceTargetTest
to test the behavior of the supplicant HAL.