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. Wi-Fi modülü bileşenleri ve mimarisi

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, azaltılmış platform parçalanma elde eder.

  • OEM'ler, (aynı gereksinimlerin farklı şekillerde farklı uygulamalarına ihtiyaç duymadıkları için) bireysel özelleştirme maliyetlerini düşürürken aynı zamanda taşıyıcı gereksinimlerini karşılayabilir.

Android 12 için modül sınırı

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi ( frameworks/base/wifi/java dosyalar)
      • tests/
        • android/net/wifi ( frameworks/base/wifi/tests dosyaları)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi ( frameworks/opt/net/wifi/service/java dosyalar)
      • tests/
        • com/android/server/wifi ( frameworks/opt/net/wifi/tests dosyasındaki dosyalar)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (frames frameworks/base/packages/OsuLogin gelen dosyalar)
    • ServiceResources/ (Android 12'de yeni, Overlay APK bildirimi burada saklanır)
      • res/ (Android 11'de yeni, frameworks/base/core/res/res )
      • AndroidManifest.xml
      • Android.bp

Yukarıdaki dizinler ayrıca modüler sistem bileşeninin dışında ve mevcut konumunda kalan kodu da içerir, örneğin:

  • wificond interface ( android.net.wifi.nl80211 paketindeki sınıflar, örneğin, WifiNl80211Manager )
  • Örnek Kaynak Yerleşimi uygulaması
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

OEM'ler, yamalarını orijinal proje dizinlerinden yeni proje dizinine taşımaya yardımcı olması için örnek komutları kullanabilir.

Bir yamayı çerçevelerden/temelden/wifi'den taşıma

Yama dosyasını root/frameworks/base/wifi'de oluşturma

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

Yama dosyasını kök/paketler/modüller/Wifi'ye uygulama

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

Bir yamayı çerçevelerden/opt/net/wifi'den taşıma

Yamayı frameworks/opt/net/wifi taşımak için, geçiş sırasında dizin hiyerarşisi değiştiğinden karmaşık adımlar gerekir.

frameworks/opt/net/wifi , taahhüdü, biri service/ ve diğeri tests/ için olmak üzere iki işleme bölün.

HEAD taahhüdünü taşıma

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

İki taahhüt yama dosyası oluşturuluyor

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

İki yamayı paketlere/modüllere/Wifi'ye uygulama

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

İki taahhüdü tek bir taahhüde geri ezmek

git rebase -i

İkinci taahhüdün işlemini squash olarak değiştirin.

Taahhüt mesajını uygun şekilde düzenleyin.

Android 11 için modül sınırı

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

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

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

  • system/connectivity/wificond wificond yerel bileşeni
  • wificond arayüzü ( android.net.wifi.nl80211 paketindeki sınıflar, ö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 veya resmi Android API'lerini veya AOSP kodundan ayırmak için satıcı HAL uzantılarını kullanmak için tescilli uzantıları yeniden düzenledikten sonra).

Modül formatı

Wi-Fi modülü ( com.google.android.wifi.apex ) APEX biçimindedir ve Android 11 veya sonraki sürümleri çalıştıran cihazlarda 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'sı ( 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

Bu modül, çerçeve ile yalnızca kararlı @SystemApi ( @hide API kullanımı yok) kullanarak etkileşime girer ve platform imzası yerine Google imzasıyla imzalanır.

özelleştirme

Wi-Fi modülü doğrudan özelleştirmeyi desteklemez, ancak çalışma zamanı kaynak katmanlarını (RRO'lar) veya taşıyıcı yapılandırmalarını kullanarak yapılandırmayı özelleştirebilirsiniz.

Wi-Fi özelleştirmesi

Şekil 2. Wi-Fi modülü özelleştirmesi

  • Küçük özelleştirmeler için, RRO config ayarları etkinleştirin veya devre dışı bırakın.
  • Daha fazla kontrol için, @SystemAPI olarak gösterilen herhangi bir taşıyıcı yapılandırma anahtarının yapılandırma değerlerini özelleştirin.

Ç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. Üst üste bindirilebilir yapılandırmaların bir listesi için, packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml adresine bakın. Yapılandırma davranışı ayrıntıları için, packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml adresine bakın. Örnek bir bindirme uygulaması için device/google/coral/rro_overlays/WifiOverlay/ .

device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml dosyası, targetPackage niteliğini com.android.wifi.resources olarak ayarladığından ve Wi-Fi modülü tarafından sağlanan kaynak APK'nın paket adı com.google.android.wifi.resources , Wi-Fi yapılandırmalarını başarılı bir şekilde kaplamak için APKS targetPackage yer paylaşımını com.google.android.wifi.resources olarak ayarlamalısınız.

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üştürme için gereken kancalar android.net.wifi.WifiMigration sınıfındadır.

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 daha önce (Android 10'da) cihazdaki /data/misc/wifi klasöründe depolanıyordu.

  • 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 daha önce (Android 10'da) /data/misc_ce/<userId>/wifi klasöründe depolanıyordu.

Gizli Wi-Fi API'lerine erişme

Wi-Fi modülünde @hide ile açıklamalı semboller (sınıflar, yöntemler, alanlar, vb.) halka açık API yüzeyinin bir parçası değildir ve modülün kurulu olduğu cihazlarda erişilemez. Wi-Fi modülünü içermeyen cihazlar, aşağıdaki adımları kullanarak @hide Wi-Fi API'lerini kullanmaya devam edebilir.

  1. impl_library_visibility özniteliğini silerek, packages/modules/Wifi/framework/Android.bp framework-wifi görünürlük kısıtlamalarını kaldırın.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [  // delete this attribute
            ...
        ],
        ...
    }
    
  2. Kitaplık erişimine @hide Wi-Fi API'lerine izin vermek için derleme kuralını değiştirin. Örneğin, aşağıdaki bir java_library için bir derleme kuralıdır.

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

    foo-lib için kitaplık erişimine izin vermek için derleme kuralını aşağıda gösterildiği gibi değiştirin.

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. framework-wifi.impl libs listesinde framework önce göründüğünden emin olun. libs özelliğindeki bağımlılıkların sırası önemlidir.

Gizli çerçeve API'lerine erişme

Wi-Fi modülünün dışında @hide ile açıklamalı sembollere Wi-Fi modülü içindeki kodla erişilemez. Wi-Fi modülünü içermeyen cihazlar, frameworks/opt/net/wifi/service/Android.bp aşağıdaki değişiklikleri yaparak service-wifi @hide harici API'lerini (örneğin, framework.jar 'dan) kullanmaya devam edebilir. frameworks/opt/net/wifi/service/Android.bp .

  1. Hem wifi-service-pre-jarjar hem de service-wifi içinde, sdk_version niteliğini core_platform olarak değiştirin.

  2. Hem wifi-service-pre-jarjar hem de service-wifi içinde, libs özniteliğine framework ve android_system_server_stubs_current ekleyin.

  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 Test Etme, Hata Ayıklama ve Wi-Fi Ayarı bölümünde açıklanan testleri de çalıştırabilirsiniz.