Модуль Wi-Fi является обновляемым, то есть он может получать обновления, расширяющие его возможности вне обычного цикла выпуска Android. Этот модуль содержит следующие компоненты.

Рисунок 1. Компоненты и архитектура модуля Wi-Fi.
Модуль Wi-Fi обеспечивает следующие преимущества.
Пользователи получают стабильную работу Wi-Fi на всех устройствах Android, а также исправления проблем совместимости благодаря обновлениям модулей.
Разработчики приложений получают возможность снизить фрагментацию платформы.
Производители оригинального оборудования могут удовлетворять требованиям операторов связи, одновременно снижая затраты на индивидуальную настройку (поскольку им не требуется различное воплощение одних и тех же требований разными способами).
Границы модуля для Android 12 и Android 13
-
packages/modules/Wifi-
framework-
java/-
android/net/wifi(файлы изframeworks/base/wifi/java)
-
-
tests/-
android/net/wifi(файлы изframeworks/base/wifi/tests)
-
-
aidl-export/ -
api/ -
Android.bp
-
-
service/-
java/-
com/android/server/wifi(файлы изframeworks/opt/net/wifi/service/java)
-
-
tests/-
com/android/server/wifi(файлы изframeworks/opt/net/wifi/tests)
-
-
proto/ -
Android.bp -
proguard.flags -
wifi.rc
-
-
OsuLogin/(файлы изframeworks/base/packages/OsuLogin) -
ServiceResources/(новое в Android 12, манифест Overlay APK хранится здесь)-
res/(новое в Android 11, конфигурации Wi-Fi извлечены изframeworks/base/core/res/res) -
AndroidManifest.xml -
Android.bp
-
-
WifiDialog/(новое в Android 13 приложение для запуска диалоговых окон пользователя, запрашиваемых службой, хранится здесь.)-
src/-
com/android/wifi/dialog(Содержит Activity, из которой запускаются диалоги)
-
-
AndroidManifest.xml -
Android.bp
-
-
В указанных выше каталогах также содержится код, который остается вне модульного компонента системы и в своем текущем местоположении, например:
-
wificond interface(классы в пакетеandroid.net.wifi.nl80211, например,WifiNl80211Manager) - Пример приложения "Наложение ресурсов"
-
WifiTrackerLib -
libwifi_hal -
libwifi_system -
libwifi_system_iface
Производители оборудования могут использовать приведенные примеры команд для перемещения своих патчей из исходных каталогов проекта в новый каталог проекта.
Переместите патч из frameworks/base/wifi
Создание файла патча в root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txtПрименение файла патча к root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txtПереместите патч из frameworks/opt/net/wifi
Для переноса патча из frameworks/opt/net/wifi требуются сложные шаги, поскольку в процессе миграции изменилась иерархия каталогов.
В frameworks/opt/net/wifi разделите коммит на два: один для service/ и один для tests/ .
Перенос коммита HEAD
git reset HEAD^git add service/git commit # Enter your commit message. Call this commit service-commitgit add tests/git commit # Enter your commit message. Call this commit test-commit
Создание двух файлов патчей для коммитов.
git format-patch -1 service-commit --stdout > service-patch.txtgit format-patch -1 test-commit --stdout > test-patch.txt
Применение двух патчей к packages/modules/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
Объединение двух коммитов обратно в один.
git rebase -i Измените операцию второго коммита на squash .
Edit the commit message as appropriate.
Границы модуля для Android 11
Служба Wi-Fi продолжает работать внутри процесса системной службы. Модуль Wi-Fi включает в себя весь код в packages/modules/Wifi в том числе следующий.
- SDK и сервисные классы для
WifiService,WifiP2pService,WifiAwareService,WifiScannerServiceиWifiRttService -
OsuLogin -
ServiceWifiResources
Данный модуль исключает следующие компоненты, которые остаются частью сборки AOSP от производителя оборудования.
- встроенный компонент
wificondвsystem/connectivity/wificond - Интерфейс
wificond(классы в пакетеandroid.net.wifi.nl80211, например,WifiNl80211Manager) -
android.net.wifi.SoftApConfToXmlMigrationUtil -
android.net.wifi.WifiNetworkScoreCache -
android.net.wifi.WifiMigration -
WifiTrackerLib -
libwifi_hal -
libwifi_system -
libwifi_system_iface
В Android 11 файлы не перемещаются, но в будущих релизах это возможно. Чтобы уменьшить трудозатраты на перенос изменений в расположение файлов, мы рекомендуем вносить как можно больше изменений в основной репозиторий AOSP (после их переноса в Android 11 или рефакторинга проприетарных расширений с использованием формальных API Android или расширений HAL от поставщиков, чтобы отделить их от кода AOSP).
Формат модуля
Модуль Wi-Fi ( com.android.wifi ) имеет формат APEX и доступен для устройств под управлением Android 11 или выше. Файл APEX включает следующие компоненты.
- Библиотека SDK (
framework-wifi.jar) - Service library (
service-wifi.jar) - OsuLogin APK (
OsuLoginGoogle.apk) - Ресурсный APK (
ServiceWifiResourcesGoogle.apk) - Сертификаты WFA
Зависимости модуля
Модуль Wi-Fi зависит от следующих компонентов.
- Подключение
- Телефония
- Протобиблиотеки
- Различные системные компоненты
- Wi-Fi HALs
-
wificond -
bouncycastle -
ksoap2 -
libnanohttpd
Этот модуль взаимодействует с фреймворком, используя только стабильную аннотацию @SystemApi (без использования @hide API) и подписан подписью Google, а не платформенной подписью.
Настройка
Модуль Wi-Fi не поддерживает прямую настройку, но вы можете изменить конфигурацию с помощью наложений ресурсов во время выполнения (RRO) или конфигураций оператора связи.

Рисунок 2. Настройка модуля Wi-Fi.
- Для внесения небольших изменений включите или отключите соответствующие параметры в
configRRO. - Для более полного контроля настройте значения конфигурации для любого ключа конфигурации оператора, доступного по адресу
@SystemAPI.
Use runtime resource overlays
Вы можете настроить модуль Wi-Fi, переопределив конфигурации по умолчанию с помощью RRO. Список доступных для наложения конфигураций см. в файле packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml . Подробную информацию о поведении конфигурации см. в файле packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml . Пример приложения для наложения можно найти в файле device/google/coral/rro_overlays/WifiOverlay/ .
Поскольку в файле device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml атрибут targetPackage установлен на com.android.wifi.resources , а APK-файл ресурсов, предоставляемый модулем Wi-Fi, имеет имя пакета com.google.android.wifi.resources , для успешной настройки конфигураций Wi-Fi необходимо установить атрибут targetPackage для APK-файлов наложения на com.google.android.wifi.resources .
Migrate configuration storage format
Модуль Wi-Fi может обрабатывать только формат хранения конфигурации Wi-Fi AOSP. Если вы ранее изменяли формат хранения конфигурации Wi-Fi (включая сохраненный пользователем список сетей), вам необходимо преобразовать эти данные в формат AOSP при обновлении устройства до любой версии Android, включающей модуль Wi-Fi. Необходимые для этого преобразования механизмы находятся в классе android.net.wifi.WifiMigration .
Преобразование формата следует реализовать в следующих методах.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)Эта команда вызывается модулем Wi-Fi для получения содержимого файла общего хранилища Wi-Fi, преобразованного в формат AOSP.
Ранее (в Android 10) эти файлы хранились в папке
/data/misc/wifiна устройстве.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)Вызывается модулем Wi-Fi для получения содержимого файла хранилища, специфичного для пользователя Wi-Fi, который был преобразован в формат AOSP.
Ранее (в Android 10) эти файлы хранились в папке
/data/misc_ce/<userId>/wifiна устройстве.
Получите доступ к скрытым API Wi-Fi.
Символы (классы, методы, поля и т. д.), аннотированные @hide в модуле Wi-Fi, не являются частью его публичного API и недоступны на устройствах с установленным модулем. Устройства, не содержащие модуль Wi-Fi, могут продолжать использовать API Wi-Fi @hide выполнив следующие шаги.
Снимите ограничения видимости, наложенные на
framework-wifiвpackages/modules/Wifi/framework/Android.bp, изменив атрибутimpl_library_visibilityна public.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }Измените правило сборки, чтобы разрешить доступ к библиотеке с помощью директивы
@hideWi-Fi API`. Например, ниже приведено правило сборки дляjava_library.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }Чтобы разрешить доступ к библиотеке
foo-lib, измените правило сборки следующим образом:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }Убедитесь, что
framework-wifi.implнаходится передframeworkв спискеlibs. Порядок зависимостей в атрибутеlibsимеет значение.
Получите доступ к скрытым API фреймворка.
Символы, аннотированные @hide вне модуля Wi-Fi, недоступны для кода внутри модуля Wi-Fi. Устройства, не содержащие модуль Wi-Fi, могут продолжать использовать внешние API @hide (например, из framework.jar ) в service-wifi , внеся следующие изменения в frameworks/opt/net/wifi/service/Android.bp .
В обоих модулях
wifi-service-pre-jarjarиservice-wifiизмените атрибутsdk_versionнаcore_platform.В обоих модулях
wifi-service-pre-jarjarиservice-wifiдобавьтеframeworkиandroid_system_server_stubs_currentв атрибутlibs.Убедитесь, что результат аналогичен приведенному ниже примеру кода.
java_library { name: "wifi-service-pre-jarjar", ... sdk_version: "core_platform", ... libs: [ ... "framework", "android_system_server_stubs_current", ], } ... java_library { name: "service-wifi", ... sdk_version: "core_platform", ... libs: [ ... "framework", "android_system_server_stubs_current", ], }
Тестирование
Пакет тестов совместимости Android (CTS) проверяет возможности модуля Wi-Fi, запуская полный набор тестов CTS для каждой версии модуля. Вы также можете запустить тесты, описанные в разделе «Тестирование, отладка и настройка Wi-Fi» .