Модуль 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, манифест APK Overlay хранится здесь)-
res/(новое в Android 11, конфигурации Wi-Fi извлечены изframeworks/base/core/res/res) -
AndroidManifest.xml -
Android.bp
-
-
WifiDialog/(новое приложение Android 13 для запуска пользовательских диалогов, запрошенных службой, хранится здесь).-
src/-
com/android/wifi/dialog(Содержит активность, из которой запускаются диалоги)
-
-
AndroidManifest.xml -
Android.bp
-
-
Предшествующие каталоги также содержат код, который остается за пределами компонента модульной системы и в его текущем местоположении, например:
-
wificond interface(классы в пакетеandroid.net.wifi.nl80211, например,WifiNl80211Manager) - Пример приложения Resource Overlay
-
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
Применение двух патчей к пакетам/модулям/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
Объединение двух коммитов в один
git rebase -i Измените операцию второго коммита на squash .
При необходимости отредактируйте сообщение о фиксации.
Граница модуля для Android 11
Служба Wi-Fi продолжает работать внутри процесса системной службы. Модуль Wi-Fi включает весь код в packages/modules/Wifi включая следующий.
- SDK и классы служб для
WifiService,WifiP2pService,WifiAwareService,WifiScannerServiceиWifiRttService -
OsuLogin -
ServiceWifiResources
Модуль исключает следующие компоненты, которые остаются частью сборки AOSP OEM-производителя.
- собственный компонент
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-wifi.jar) - OsuLogin APK (
OsuLoginGoogle.apk) - Resource APK (
ServiceWifiResourcesGoogle.apk) - Сертификаты WFA
Зависимости модулей
Модуль Wi-Fi зависит от следующих компонентов.
- Связность
- Телефония
- Прото-библиотеки
- Разные компоненты системы
- Wi-Fi HAL
-
wificond -
bouncycastle -
ksoap2 -
libnanohttpd
Этот модуль взаимодействует с фреймворком, используя только стабильный @SystemApi (без использования API @hide ) и подписан подписью Google вместо подписи платформы.
Настройка
Модуль Wi-Fi не поддерживает прямую настройку, но вы можете настроить конфигурацию с помощью наложений ресурсов времени выполнения (RRO) или конфигураций оператора.

Рисунок 2. Настройка модуля Wi-Fi
- Для небольших настроек включите или отключите параметры в
configRRO. - Для большего контроля настройте значения конфигурации для любого ключа конфигурации оператора, представленного как
@SystemAPI.
Использовать наложения ресурсов времени выполнения
Вы можете настроить модуль 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 , необходимо установить для атрибута наложения APKS targetPackage значение com.google.android.wifi.resources для успешного наложения конфигураций Wi-Fi.
Формат хранения конфигурации миграции
Модуль 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. ], ... }Измените правило сборки, чтобы разрешить библиотеке доступ к API
@hideWi-Fi. Например, ниже приведено правило сборки для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 .