Wi-Fi

Moduł Wi-Fi można aktualizować, co oznacza, że może on otrzymywać aktualizacje funkcji niezależnie od normalnego cyklu wydawania Androida. Moduł ten zawiera te komponenty:

Komponenty modułu Wi-Fi

Rysunek 1. Komponenty i architektura modułu Wi-Fi

Moduł Wi-Fi zapewnia te korzyści:

  • Użytkownicy mają spójne działanie Wi-Fi na urządzeniach z Androidem, a aktualizacje modułów rozwiązują problemy z interoperacyjnością.

  • Deweloperzy aplikacji mogą ograniczyć fragmentację platformy.

  • Producenci OEM mogą spełniać wymagania operatorów, a jednocześnie obniżać koszty indywidualnych dostosowań (ponieważ nie potrzebują różnych implementacji tych samych wymagań na różne sposoby).

Granica modułu w Androidzie 12 i 13

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi (pliki z frameworks/base/wifi/java)
      • tests/
        • android/net/wifi (pliki z frameworks/base/wifi/tests)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (pliki z frameworks/opt/net/wifi/service/java)
      • tests/
        • com/android/server/wifi (pliki z frameworks/opt/net/wifi/tests)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (pliki z frameworks/base/packages/OsuLogin)
    • ServiceResources/ (nowość w Androidzie 12, tutaj jest przechowywany manifest pliku APK nakładki)
      • res/ (nowość w Androidzie 11, konfiguracje Wi-Fi wyodrębnione z frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (nowość w Androidzie 13. Aplikacja do uruchamiania okien dialogowych użytkownika, o które prosi usługa, jest przechowywana tutaj).
      • src/
        • com/android/wifi/dialog (Zawiera aktywność, z której uruchamiane są okna)
      • AndroidManifest.xml
      • Android.bp

W poprzednich katalogach znajdują się też kody, które pozostają poza modułowym komponentem systemu i w swojej obecnej lokalizacji, np.:

  • wificond interface (klasy w pakiecie android.net.wifi.nl80211, np. WifiNl80211Manager)
  • Przykładowa aplikacja nakładki zasobów
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Producenci OEM mogą używać przykładowych poleceń, aby przenieść poprawki z oryginalnych katalogów projektów do nowego katalogu projektu.

Przenoszenie poprawki z katalogu frameworks/base/wifi

Generowanie pliku poprawki w katalogu root/frameworks/base/wifi

git format-patch -1 commit --stdout > patch-file.txt

Stosowanie pliku z poprawką do katalogu root/packages/modules/Wifi

git am -p2 --directory=framework/ patch-file.txt

Przenoszenie poprawki z folderu frameworks/opt/net/wifi

Przeniesienie poprawki z frameworks/opt/net/wifi wymaga skomplikowanych działań, ponieważ podczas migracji zmieniono hierarchię katalogów.

W frameworks/opt/net/wifi podziel zatwierdzenie na 2 zatwierdzenia: jedno dla service/ i jedno dla tests/.

Migracja zatwierdzenia 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

Generowanie 2 plików poprawek do zatwierdzenia

git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt

Stosowanie dwóch poprawek do pakietów/modułów/Wifi

git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt

Scalanie dwóch commitów w jeden

git rebase -i

Zmień operację drugiego zatwierdzenia na squash.

W razie potrzeby zmień wiadomość o zatwierdzeniu.

Granica modułu w Androidzie 11

Usługa Wi-Fi nadal działa w ramach procesu usługi systemowej. Moduł Wi-Fi zawiera cały kod w packages/modules/Wifi, w tym:

  • Pakiety SDK i klasy usług dla WifiService, WifiP2pService, WifiAwareService, WifiScannerServiceWifiRttService
  • OsuLogin
  • ServiceWifiResources

Moduł nie obejmuje tych komponentów, które pozostają częścią kompilacji AOSP producenta OEM.

  • wificond komponent natywny w: system/connectivity/wificond
  • wificond interfejs (klasy w pakiecie android.net.wifi.nl80211, np. WifiNl80211Manager);
  • android.net.wifi.SoftApConfToXmlMigrationUtil
  • android.net.wifi.WifiNetworkScoreCache
  • android.net.wifi.WifiMigration
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Android 11 nie przenosi plików, ale w przyszłych wersjach może się to zmienić. Aby zmniejszyć nakład pracy związany z przenoszeniem zmian w lokalizacji plików, zalecamy przekazywanie jak największej liczby zmian do AOSP (po przeniesieniu ich do Androida 11 lub po refaktoryzacji zastrzeżonych rozszerzeń w celu używania formalnych interfejsów API Androida lub rozszerzeń HAL dostawcy, aby oddzielić je od kodu AOSP).

Format modułu

Moduł Wi-Fi (com.android.wifi) jest w formacie APEX i jest dostępny na urządzeniach z Androidem 11 lub nowszym. Plik APEX zawiera te komponenty:

  • Biblioteka pakietu SDK (framework-wifi.jar)
  • Biblioteka usług (service-wifi.jar)
  • Plik APK OsuLogin (OsuLoginGoogle.apk)
  • Pakiet APK zasobów (ServiceWifiResourcesGoogle.apk)
  • Certyfikaty WFA

Zależności modułów

Moduł Wi-Fi zależy od tych komponentów:

  • Łączność
  • Połączenia telefoniczne
  • Biblioteki proto
  • Różne komponenty systemu
  • Warstwy HAL Wi-Fi
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Ten moduł wchodzi w interakcję z platformą tylko za pomocą stabilnych interfejsów @SystemApi (nie korzysta z interfejsów @hide API) i jest podpisany podpisem Google, a nie podpisem platformy.

Dostosowywanie

Moduł Wi-Fi nie obsługuje bezpośredniego dostosowywania, ale możesz dostosować konfigurację za pomocą nakładek zasobów w czasie działania lub konfiguracji operatora.

Dostosowywanie Wi-Fi

Rysunek 2. Dostosowywanie modułu Wi-Fi

  • W przypadku drobnych zmian włącz lub wyłącz ustawienia w RRO config.
  • Aby mieć większą kontrolę, dostosuj wartości konfiguracji dla dowolnego klucza konfiguracji operatora, który jest widoczny jako @SystemAPI.

Używanie nakładek zasobów środowiska wykonawczego

Moduł Wi-Fi możesz dostosować, zastępując konfiguracje domyślne za pomocą nakładek RRO. Listę konfiguracji, które można nakładać, znajdziesz w sekcji packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml. Szczegółowe informacje o zachowaniu konfiguracji znajdziesz w sekcji packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml. Przykładową aplikację nakładkową znajdziesz w sekcji device/google/coral/rro_overlays/WifiOverlay/.

Ponieważ plik device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml ustawia atrybut targetPackage na com.android.wifi.resources, a plik APK zasobu dostarczany przez moduł Wi-Fi ma nazwę pakietu com.google.android.wifi.resources, musisz ustawić nakładkę APKS targetPackage na com.google.android.wifi.resources, aby prawidłowo nałożyć konfiguracje Wi-Fi.

Migracja formatu miejsca na dane konfiguracji

Moduł Wi-Fi może analizować tylko format pamięci konfiguracji Wi-Fi AOSP. Jeśli wcześniej zmodyfikowano format przechowywania konfiguracji Wi-Fi (który obejmuje listę zapisanych sieci użytkownika), podczas uaktualniania urządzenia do dowolnej wersji Androida, która zawiera moduł Wi-Fi, musisz przekonwertować te dane do formatu AOSP. Haczyki potrzebne do tej konwersji znajdują się w klasie android.net.wifi.WifiMigration.

Wdróż konwersję formatu za pomocą tych metod.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Wywoływany przez moduł Wi-Fi w celu pobrania zawartości pliku magazynu udostępnionego Wi-Fi, która została przekonwertowana do formatu AOSP.

    • Wcześniej (w Androidzie 10) te pliki były przechowywane w folderze /data/misc/wifi na urządzeniu.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Wywoływana przez moduł Wi-Fi w celu pobrania zawartości pliku sklepu specyficznego dla użytkownika Wi-Fi, która została przekonwertowana na format AOSP.

    • Wcześniej (w Androidzie 10) te pliki były przechowywane w folderze /data/misc_ce/<userId>/wifi na urządzeniu.

Dostęp do ukrytych interfejsów API Wi-Fi

Symbole (klasy, metody, pola itp.) oznaczone w module Wi-Fi adnotacją @hide nie są częścią jego publicznego interfejsu API i nie można do nich uzyskać dostępu na urządzeniach z zainstalowanym modułem. Urządzenia, które nie mają modułu Wi-Fi, mogą nadal korzystać z interfejsów @hide Wi-Fi API, wykonując te czynności.

  1. Usuń ograniczenia widoczności nałożone na framework-wifi w packages/modules/Wifi/framework/Android.bp, zmieniając atrybut impl_library_visibility na publiczny.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Zmień regułę kompilacji, aby zezwolić na dostęp do biblioteki @hide interfejsów API Wi-Fi. Na przykład poniżej znajduje się reguła kompilacji dla java_library.

    java_library {
        name: "foo-lib",
    
        // no sdk_version attribute defined
    
        libs: [
            "dependency1",
            "dependency2",
        ],
    }
    

    Aby zezwolić na dostęp do biblioteki w przypadku foo-lib, zmień regułę kompilacji w ten sposób:

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. Sprawdź, czy framework-wifi.impl znajduje się przed framework na liście libs. Kolejność zależności w atrybucie libs ma znaczenie.

Dostęp do ukrytych interfejsów API platformy

Do symboli oznaczonych symbolem @hide poza modułem Wi-Fi nie można uzyskać dostępu za pomocą kodu w module Wi-Fi. Urządzenia, które nie mają modułu Wi-Fi, mogą nadal korzystać z @hide zewnętrznych interfejsów API (np. z framework.jar) w service-wifi, wprowadzając te zmiany w frameworks/opt/net/wifi/service/Android.bp.

  1. W obu przypadkach wifi-service-pre-jarjar i service-wifi zmień atrybut sdk_version na core_platform.

  2. W obu wifi-service-pre-jarjarservice-wifi dodaj frameworkandroid_system_server_stubs_current do atrybutu libs.

  3. Sprawdź, czy wynik jest podobny do tego w przykładowym kodzie poniżej.

    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",
        ],
    }
    

Testowanie

Pakiet testów zgodności z Androidem (CTS) weryfikuje możliwości modułu Wi-Fi, przeprowadzając kompleksowy zestaw testów CTS na każdej wersji modułu. Możesz też przeprowadzić testy opisane w sekcji Testowanie, debugowanie i dostrajanie sieci Wi-Fi.