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

Рисунок 1. Компоненты и архитектура модуля Wi-Fi
Модуль Wi-Fi обеспечивает следующие преимущества.
Конечные пользователи получают стабильную работу Wi-Fi на всех устройствах Android и устраняют проблемы совместимости с помощью обновлений модулей.
Разработчики приложений получают меньшую фрагментацию платформы.
OEM-производители могут выполнять требования операторов, одновременно снижая затраты на индивидуальные настройки (поскольку им не нужны разные реализации одних и тех же требований по-разному).
Граница модуля для Android 12
-
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
-
-
Вышеупомянутые каталоги также содержат код, который остается вне компонента модульной системы и в его текущем местоположении, например:
-
wificond interface(классы в пакетеandroid.net.wifi.nl80211, например,WifiNl80211Manager) - Пример приложения Resource Overlay
-
WifiTrackerLib -
libwifi_hal -
libwifi_system -
libwifi_system_iface
OEM-производители могут использовать примеры команд для перемещения своих исправлений из исходных каталогов проекта в новый каталог проекта.
Перенос патча из 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
Модуль исключает следующие компоненты, которые остаются частью сборки OEM 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.google.android.wifi.apex ) имеет формат APEX и доступен для устройств под управлением Android 11 или выше. Файл APEX включает следующие компоненты.
- Библиотека SDK (
framework-wifi.jar) - Сервисная библиотека (
service-wifi.jar) - OsuLogin APK (
OsuLoginGoogle.apk) - Ресурс APK (
ServiceWifiResourcesGoogle.apk) - сертификаты WFA
Зависимости модуля
Модуль Wi-Fi зависит от следующих компонентов.
- Связь
- Телефония
- Прото библиотеки
- Разные компоненты системы
- HAL Wi-Fi
-
wificond -
bouncycastle -
ksoap2 -
libnanohttpd
Этот модуль взаимодействует с фреймворком, используя только стабильный @SystemApi (без использования @hide API) и подписан подписью 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 , для успешного наложения конфигураций Wi-Fi необходимо установить для targetPackage targetPackage оверлея значение com.google.android.wifi.resources .
Миграция формата хранения конфигурации
Модуль 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 могут продолжать использовать @hide Wi-Fi, выполнив следующие действия.
Удалите ограничения видимости, наложенные на
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. Например, ниже приведено правило сборки для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 .