Модуль 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-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
Модуль исключает следующие компоненты, которые остаются частью сборки 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
- Для небольших настроек включите или отключите настройки в
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
, для успешного наложения конфигураций 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. ], ... }
Измените правило сборки, чтобы разрешить библиотеке доступ к
@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 .