Модуль 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, манифест Overlay APK хранится здесь)-
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.
Создание файла исправления в корне/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Применение файла патча в корне/пакетах/модулях/Wi-Fi
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 продолжает работать внутри процесса системной службы. Модуль 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
) - Сертификаты ВФА
Зависимости модулей
Модуль 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 необходимо установить для наложенного APKS 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, могут продолжать использовать API @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 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 (CTS) проверяет возможности модуля Wi-Fi, выполняя полный набор тестов CTS для каждой версии модуля. Вы также можете запустить тесты, описанные в разделе «Тестирование, отладка и настройка Wi-Fi» .