Модуль 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-commit
git add tests/
git commit # Enter your commit message. Call this commit test-commit
Создание двух файлов патча коммита
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Применение двух патчей к пакетам/модулям/Wifi
git am service-patch.txt
git 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
- Для небольших настроек включите или отключите параметры в
config
RRO. - Для большего контроля настройте значения конфигурации для любого ключа конфигурации оператора, представленного как
@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
@hide
Wi-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 .