Wi-Fi

Moduł Wi-Fi jest aktualizowany, co oznacza, że może otrzymywać aktualizacje funkcji. poza normalnym cyklem publikowania wersji Androida. Ten moduł zawiera te komponenty:

Komponenty modułu Wi-Fi

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

Moduł Wi-Fi ma następujące zalety.

  • Spójne działanie Wi-Fi na różnych urządzeniach z Androidem i poprawki dla użytkowników na problemy ze interoperacyjnością za pomocą aktualizacji modułów.

  • Deweloperzy aplikacji mają zmniejszoną fragmentację platformy

  • OEM może spełnić wymagania operatorów, a jednocześnie obniżać koszty dostosowania (ponieważ nie wymagają one różnych implementacji te same wymagania na różne sposoby).

Granice modułu na 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, nakładka (jest tutaj przechowywany plik manifestu pliku APK)
      • res/ (nowość w Androidzie 11, konfiguracje Wi-Fi wyodrębnione z frameworks/base/core/res/res).
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (nowość w aplikacji na Androida 13 są przechowywane w oknach uruchamiania określonych przez usługę).
      • src/
        • com/android/wifi/dialog (zawiera aktywność, której dotyczą okna dialogowe uruchomiono z)
      • AndroidManifest.xml
      • Android.bp

Poprzednie katalogi zawierają również kod, który pozostaje poza modułowym komponentem systemu bieżąca lokalizacja, na przykład:

  • wificond interface (zajęcia w pakiecie android.net.wifi.nl80211, dla przykład: WifiNl80211Manager).
  • Przykładowa aplikacja Resource Overlay
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

OEM może używać przykładowych poleceń do przenoszenia poprawek z pierwotnych katalogów projektu do katalogu nowego projektu.

Przenieś poprawkę z platformy/platformy podstawowej/Wi-Fi

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

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

Zastosowanie pliku poprawki do katalogu głównego/pakietów/modułów/Wi-Fi

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

Przenieś poprawkę z platformy Frameworks/opt/net/wifi

Przeniesienie poprawki z frameworks/opt/net/wifi wymaga wykonania złożonych kroków ponieważ hierarchia katalogów została zmieniona podczas migracji.

W frameworks/opt/net/wifi podziel zatwierdzenie na 2 zatwierdzenia, jedno dla service/ i drugi za 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 zatwierdzenia

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

Zastosowanie tych 2 poprawek do pakietów/modułów/Wi-Fi

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

Skrócenie 2 komitów do jednego

git rebase -i

Zmień operację drugiego zatwierdzenia na squash.

Odpowiednio zmodyfikuj komunikat zatwierdzenia.

Granice modułu na Androidzie 11

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

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

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

  • wificond komponent natywny w jednostce organizacyjnej system/connectivity/wificond
  • Interfejs wificond (klasy w pakiecie android.net.wifi.nl80211, dla przykład: 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 nowe wersje być może. Aby zmniejszyć nakład pracy związany z przenoszeniem zmian lokalizacji plików, zalecamy przesyłanie do AOSP jak największej liczby zmian (po przeportowaniu ich do Androida 11 lub przeprojektowaniu zastrzeżonych rozszerzeń w celu użycia oficjalnych interfejsów API Androida lub rozszerzeń HAL dostawcy, aby odseparować je od kodu AOSP.

Format modułu

Moduł Wi-Fi (com.android.wifi) jest Format APEX jest dostępny dla urządzeń. z Androidem 11 lub nowszym, Plik APEX zawiera poniższe komponenty.

  • Biblioteka SDK (framework-wifi.jar)
  • Biblioteka usługi (service-wifi.jar)
  • Plik APK OsuLogin (OsuLoginGoogle.apk)
  • Plik APK zasobu (ServiceWifiResourcesGoogle.apk)
  • Certyfikaty WFA

Zależności modułu

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

  • Łączność
  • Telefonia
  • Biblioteki prototypowe
  • Różne komponenty systemu
  • Listy HAL Wi-Fi
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Ten moduł korzysta tylko ze stabilnej platformy @SystemApi (nie @hide) i jest podpisany podpisem Google, a nie platformą. podpis.

Dostosowywanie

Moduł Wi-Fi nie obsługuje bezpośredniego dostosowywania, ale możesz konfigurowanie przy użyciu nakładek zasobów środowiska wykonawczego (RRO) lub konfiguracji operatora.

Personalizacja Wi-Fi

Rysunek 2. Dostosowanie modułu Wi-Fi

  • W przypadku niewielkich dostosowań włącz lub wyłącz ustawienia w RRO config.
  • Aby mieć większą kontrolę, dostosuj wartości konfiguracji dla dowolnego klucza konfiguracji operatora widoczne jako @SystemAPI.

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

Możesz dostosować moduł Wi-Fi, zastępując konfiguracje domyślne za pomocą RRO. Listę konfiguracji z nakładaniem znajdziesz tutaj: packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml Szczegółowe informacje o działaniu konfiguracji znajdziesz tutaj: packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml Przykładową aplikację do nakładek znajdziesz tutaj: device/google/coral/rro_overlays/WifiOverlay/

Ponieważ device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml ustawia atrybut targetPackage na com.android.wifi.resources, a atrybut plik APK zasobu dostarczony przez moduł Wi-Fi ma nazwę pakietu com.google.android.wifi.resources, musisz skonfigurować pliki APK dla nakładki Z targetPackage do com.google.android.wifi.resources, aby połączyć się z Wi-Fi .

Format pamięci masowej konfiguracji migracji

Moduł Wi-Fi może analizować tylko format pamięci konfiguracji Wi-Fi AOSP. Jeśli jeśli wcześniej zmodyfikowano format pamięci masowej konfiguracji Wi-Fi (który obejmuje listę zapisanych sieci użytkownika), musisz przekonwertować te dane na AOSP przy aktualizacji urządzenia do dowolnej wersji Androida, która zawiera . Elementy przyciągające uwagę potrzebne do tej konwersji znajdują się android.net.wifi.WifiMigration zajęcia.

Konwersję formatu można zaimplementować na 2 sposoby:

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Wywoływana przez moduł Wi-Fi w celu pobrania zawartości pliku udostępnionego magazynu Wi-Fi które zostały przekonwertowane na format AOSP.

    • W wersji 10 te pliki były przechowywane w folderze /data/misc/wifina urządzeniu.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Wywoływane przez moduł Wi-Fi w celu pobrania zawartości pliku magazynu powiązanego z siecią Wi-Fi użytkownika które zostały przekonwertowane na format AOSP.

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

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

Symbole (klasy, metody, pola itp.) oznaczone w Wi-Fi adnotacjami @hide moduł nie jest częścią jego publicznej platformy API i nie można uzyskać do niego dostępu na urządzeniach z zainstalowanym modułem. Urządzenia bez sieci Wi-Fi moduł może nadal używać interfejsów API Wi-Fi w usłudze @hide, wykonując czynności opisane poniżej.

  1. Usuń ograniczenia widoczności nałożone framework-wifi na packages/modules/Wifi/framework/Android.bp, zmieniając impl_library_visibility atrybut 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 @hideinterfejsów API Wi-Fi. Dla: poniżej znajdziesz regułę kompilacji dla java_library.

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

    Aby zezwolić usłudze foo-lib na dostęp do biblioteki, 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 na liście znajduje się pozycja framework-wifi.impl przed framework z libs. Kolejność zależności w atrybucie libs jest znacząca.

Dostęp do ukrytych interfejsów API platformy

Kod w module Wi-Fi nie ma dostępu do symboli oznaczonych @hide poza modułem Wi-Fi. Urządzenia bez modułu Wi-Fi mogą nadal używaj @hide zewnętrznych interfejsów API (np. framework.jar) w service-wifi przez wprowadzenie tych zmian w frameworks/opt/net/wifi/service/Android.bp

  1. W zarówno wifi-service-pre-jarjar, jak i service-wifi zmień sdk_version do core_platform.

  2. Do atrybutu libs w obu tagach wifi-service-pre-jarjar i service-wifi dodaj wartości framework i android_system_server_stubs_current.

  3. Sprawdź, czy wynik jest podobny do tego przykładowego kodu.

    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

Android Compatibility Test Suite (CTS) sprawdza zgodność modułu Wi-Fi możliwości przez przeprowadzenie kompleksowego zestawu testów CTS w każdym module wersji. Możesz też przeprowadzać testy opisane w sekcji Testowanie, debugowanie i dostrajanie Wi-Fi.