Модуль Wi-Fi является обновляемым, что означает, что он может получать обновления возможностей за пределами обычного цикла выпуска Android. Этот модуль содержит следующие компоненты.
Рисунок 1. Компоненты и архитектура модуля Wi-Fi
Модуль Wi-Fi обеспечивает следующие преимущества.
Конечные пользователи получают единообразный Wi-Fi-доступ на устройствах Android и исправление проблем взаимодействия посредством обновлений модулей.
Разработчики приложений получают снижение фрагментации платформы.
OEM-производители могут выполнять требования операторов, одновременно сокращая затраты на индивидуальную настройку (поскольку им не требуется реализовывать одни и те же требования разными способами).
Граница модуля для 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
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-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
Применение двух патчей к пакетам/модулям/Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Объединение двух коммитов обратно в один коммит
git rebase -i
Измените операцию второго коммита на squash
.
При необходимости отредактируйте сообщение о фиксации.
Граница модуля для Android 11
Служба Wi-Fi продолжает работать внутри процесса System Service. Модуль 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
) - Ресурс 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. ], ... }
Измените правило сборки, чтобы разрешить доступ библиотеки
@hide
Wi-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 Compatibility Test Suite (CTS) проверяет возможности модуля Wi-Fi, запуская комплексный набор тестов CTS для каждого выпуска модуля. Вы также можете запустить тесты, описанные в разделе Тестирование, отладка и настройка Wi-Fi .