Wifi

Wi-Fi modülü güncellenebilir, yani normal Android sürüm döngüsünün dışındaki işlevsellik güncellemelerini alabilir. Bu modül aşağıdaki bileşenleri içerir.

Wi-Fi modülü bileşenleri

Şekil 1. Kablosuz modül bileşenleri ve mimarlık

Wi-Fi modülü aşağıdaki faydaları sağlar.

  • Son kullanıcılar, Android cihazlarda tutarlı bir Wi-Fi deneyimi elde eder ve modül güncellemeleri aracılığıyla birlikte çalışabilirlik sorunlarına yönelik düzeltmeler elde eder.

  • Uygulama geliştiricileri daha az platform parçalanması elde eder.

  • OEM'ler, taşıyıcı gereksinimlerini karşılarken aynı zamanda bireysel özelleştirme maliyetlerini de azaltabilir (çünkü aynı gereksinimlerin farklı şekillerde farklı uygulamalarına ihtiyaç duymazlar).

Modül sınırı

Wi-Fi hizmeti, Sistem Hizmeti süreci içinde çalışmaya devam eder. Wi-Fi modülü tüm kodu içerir packages/modules/Wifi aşağıda dahil.

  • SDK ve hizmet sınıfları WifiService , WifiP2pService , WifiAwareService , WifiScannerService ve WifiRttService
  • OsuLogin
  • ServiceWifiResources

Modül, OEM'in AOSP yapısının parçası olarak kalan aşağıdaki bileşenleri içermez.

  • wificond natif bileşen system/connectivity/wificond
  • wificond arabirimi (paket sınıfları android.net.wifi.nl80211 örneğin WifiNl80211Manager )
  • android.net.wifi.SoftApConfToXmlMigrationUtil
  • android.net.wifi.WifiNetworkScoreCache
  • android.net.wifi.WifiMigration
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Android 11 dosyaları taşımaz, ancak gelecekteki sürümler olabilir. Dosya konumu değişikliklerinin taşınmasıyla ilgili çabayı azaltmak için, AOSP'ye mümkün olduğunca çok değişiklik yapılmasını öneririz (bunları Android 11'e taşıdıktan sonra veya AOSP kodundan ayırmak için resmi Android API'lerini veya satıcı HAL uzantılarını kullanmak için tescilli uzantıları yeniden düzenledikten sonra).

Modül formatı

Kablosuz modülü ( com.google.android.wifi.apex ) yer alır APEX formatı ve Android 11 veya üstünü çalıştıran cihazlar için kullanılabilir. APEX dosyası aşağıdaki bileşenleri içerir.

  • SDK kitaplığı ( framework-wifi.jar )
  • Servis kitaplığı ( service-wifi.jar )
  • OsuLogin APK ( OsuLoginGoogle.apk )
  • Kaynak APK ( ServiceWifiResourcesGoogle.apk )
  • WFA sertifikaları

Modül bağımlılıkları

Wi-Fi modülü aşağıdaki bileşenlere bağlıdır.

  • bağlantı
  • telefon
  • Ön kitaplıklar
  • Çeşitli sistem bileşenleri
  • WiFi HAL'leri
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Sadece kararlı kullanarak çerçeve Bu modül etkileşimde @SystemApi (hayır @hide API kullanım) ile Google imza yerine bir platformdur imzasıyla imzalanır.

özelleştirme

Kablosuz modül direk özelleştirilmesini desteklemez, ancak kullandığınız yapılandırma özelleştirebilirsiniz çalışma zamanı kaynak bindirmeleri (RROs) veya taşıyıcı yapılandırmaları.

Wi-Fi özelleştirmesi

Şekil 2. Kablosuz ana hat modülü özelleştirme

  • Küçük özelleştirmeler için, etkinleştirmek veya RRO devre dışı bırakın ayarları config .
  • Olarak ortaya herhangi bir taşıyıcı konfigürasyonu anahtarı için daha fazla kontrol, özelleştirmek yapılandırma değerleri için @SystemAPI .

Çalışma zamanı kaynak kaplamalarını kullanma

RRO'ları kullanarak varsayılan yapılandırmaları geçersiz kılarak Wi-Fi modülünü özelleştirebilirsiniz. Overlayable yapılandırmaları listesi için bakınız packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml . Yapılandırma davranış Detaylar için bakınız packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml . Örnek bir bindirme uygulama için, bkz device/google/coral/rro_overlays/WifiOverlay/ .

Çünkü device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml dosya setleri targetPackage için özellik com.android.wifi.resources ve Wi-Fi modülü tarafından teslim kaynak APK paket adı vardır com.google.android.wifi.resources , Yer paylaşımını APK'larını ayarlamalısınız targetPackage için com.google.android.wifi.resources başarıyla Kablosuz yapılandırmaları bindirmek için.

Yapılandırma depolama biçimini taşıma

Wi-Fi modülü yalnızca AOSP Wi-Fi yapılandırma depolama biçimini ayrıştırabilir. Wi-Fi yapılandırma depolama biçimini (kullanıcının kayıtlı ağ listesini içerir) daha önce değiştirdiyseniz, bir cihazı Wi-Fi modülünü içeren herhangi bir Android sürümüne yükseltirken bu verileri AOSP biçimine dönüştürmeniz gerekir. Bu dönüşüm için gerekli kancalar vardır android.net.wifi.WifiMigration sınıfında.

Biçim dönüştürmeyi aşağıdaki yöntemlerle uygulayın.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • AOSP formatına dönüştürülmüş Wi-Fi paylaşımlı mağaza dosya içeriğini almak için Wi-Fi modülü tarafından çağrılır.

    • Bu dosyalar saklanır (Android 10'da) daha önceden vardı /data/misc/wifi cihazda klasörde.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • AOSP formatına dönüştürülmüş Wi-Fi kullanıcıya özel mağaza dosyası içeriğini almak için Wi-Fi modülü tarafından çağrılır.

    • Bu dosyalar saklanır (Android 10'da) daha önceden vardı /data/misc_ce/<userId>/wifi cihazda klasörü.

Gizli Wi-Fi API'lerine erişme

İle açıklamalı Semboller (sınıflar, yöntemler, alanlar, vb) @hide Wi-Fi modülü kendi genel API yüzeyinin bir parçası değildir ve kurulu modülü ile cihazlarda erişilemiyor. Yok Cihazlar Wi-Fi modülü kullanmaya devam edebilirsiniz dahil @hide aşağıdaki adımları izleyerek Kablosuz API'ler.

  1. Yerleştirilen görünürlük kısıtlamaları kaldırın framework-wifi de packages/modules/Wifi/framework/Android.bp silerek impl_library_visibility niteliğini.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [  // delete this attribute
            ...
        ],
        ...
    }
    
  2. Kütüphane erişime izin vermek için yapım kural değiştirin @hide Kablosuz API'leri. Örneğin, aşağıdaki bir için bir yapı kuraldır java_library .

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

    İçin kütüphane erişimine izin vermek için foo-lib aşağıda gösterildiği gibi, yapı kuralı değiştirin.

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. Emin olun framework-wifi.impl önce görünür framework listesinde libs . İçinde bağımlılıkları sırası libs özniteliği önemlidir.

Gizli çerçeve API'lerine erişme

İle açıklamalı Semboller @hide dışarıdan Wi-Fi modülü, Wi-Fi modülü içinde kodla erişilemez. Yok Cihazlar Wi-Fi modülü kullanmaya devam edebilirsiniz dahil @hide (dan, örneğin dış API'ler framework.jar olarak) service-wifi aşağıdaki değişiklikleri yaparak frameworks/opt/net/wifi/service/Android.bp .

  1. İkisinde de wifi-service-pre-jarjar ve service-wifi , değiştirmek sdk_version için niteliğini core_platform .

  2. İkisinde de wifi-service-pre-jarjar ve service-wifi , eklenti framework ve android_system_server_stubs_current için libs özniteliği.

  3. Sonucun aşağıdaki kod örneğine benzer olduğunu doğrulayın.

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

Test yapmak

Android Uyumluluk Test Paketi (CTS), her modül sürümünde kapsamlı bir CTS testi seti çalıştırarak Wi-Fi modülünün işlevselliğini doğrular. Ayrıca açıklanan testleri çalıştırabilirsiniz Test Debugging'ı ve Ayar Wi-Fi .