Wifi

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Wi-Fi modülü güncellenebilir, yani normal Android yayın döngüsü 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 avantajları sağlar.

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

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

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

Android 12 ve Android 13 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 dosyaları)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ ( frameworks/base/packages/OsuLogin )
    • ServiceResources/ (Android 12'de yeni, Yer Paylaşımlı APK bildirimi burada depolanır)
      • res/ (Android 11'de yeni, frameworks/base/core/res/res res'ten çıkarılan Wi-Fi yapılandırmaları)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (hizmet tarafından talep edilen kullanıcı diyaloglarını başlatmak için Android 13 Uygulamasında yeni olan burada depolanır.)
      • src/
        • com/android/wifi/dialog (Diyalogların başlatıldığı Aktiviteyi içerir)
      • AndroidManifest.xml
      • Android.bp

Yukarıdaki dizinler ayrıca modüler sistem bileşeninin dışında kalan ve geçerli 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ı root/frameworks/base/wifi içinde oluşturuluyor

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

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

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

HEAD taahhüdünü geçirme

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şturma

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 sıkıştırmak

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 işlemi içinde çalışmaya devam eder. Wi-Fi modülü, aşağıdakiler dahil olmak üzere packages/modules/Wifi 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ı olmaya devam eden aşağıdaki bileşenleri hariç tutar.

  • system/connectivity/wificond içindeki wificond yerel bileşeni
  • wificond arabirimi ( 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 taşıyabilir. Dosya konumu değişikliklerinin taşınmasıyla ilgili çabayı azaltmak için, AOSP'ye mümkün olduğunca çok değişikliğin yukarı akışını öneririz (bunları Android 11'e taşıdıktan veya tescilli uzantıları AOSP kodundan çözmek için resmi Android API'lerini veya satıcı HAL uzantılarını kullanacak şekilde yeniden düzenledikten sonra).

Modül formatı

Wi-Fi modülü ( com.android.wifi ) 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 )
  • Hizmet 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
  • Proto kitaplıkları
  • Çeşitli sistem bileşenleri
  • WiFi HAL'leri
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Bu modül, çerçeveyle yalnızca kararlı @SystemApi kullanarak etkileşime girer ( @hide API kullanımı yoktur) ve platform imzası yerine bir 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 operatör yapılandırmalarını kullanarak yapılandırmayı özelleştirebilirsiniz.

Wi-Fi özelleştirme

Ş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ı için yapılandırma değerlerini özelleştirin.

Çalışma zamanı kaynak yer paylaşımlarını kullanma

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

device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml dosyası, targetPackage özniteliğini com.android.wifi.resources olarak ayarladığından ve Wi-Fi modülü tarafından sağlanan kaynak APK, com.google.android.wifi.resources , Wi-Fi yapılandırmalarını başarıyla kaplamak için yer paylaşımı APKS targetPackage com.google.android.wifi.resources olarak ayarlamanız gerekir.

Yapılandırma depolama formatını 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 formatını (kullanıcının kayıtlı ağ listesini içeren) 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 formatına dönüştürmeniz gerekir. Bu dönüşüm 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 dosyası 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 saklanıyordu.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • AOSP formatına dönüştürülmüş Wi-Fi kullanıcısına özel mağaza dosyası içeriklerini 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 saklanıyordu.

Gizli Wi-Fi API'lerine erişme

Wi-Fi modülünde @hide ile açıklama eklenmiş semboller (sınıflar, yöntemler, alanlar vb.), genel API yüzeyinin parçası değildir ve modülün kurulu olduğu cihazlarda bunlara 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 public olarak değiştirerek, package 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: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Kitaplık erişimine izin vermek için derleme kuralını değiştirin @hide Wi-Fi API'lerini gizleyin. Örneğin, aşağıda bir java_library için bir derleme kuralı verilmiştir.

    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 framework önce göründüğünden emin olun. libs özniteliğ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 ek açıklamalı sembollere Wi-Fi modülü içinde 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 @hide harici API'leri (örneğin, framework.jar ) service-wifi wifi'de kullanmaya devam edebilir. frameworks/opt/net/wifi/service/Android.bp

  1. Hem wifi-service-pre-jarjar hem de service-wifi sdk_version özniteliğ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 dizi CTS testi çalıştırarak Wi-Fi modülünün işlevselliğini doğrular. Wi-Fi Testi, Hata Ayıklama ve Ayarlama bölümlerinde açıklanan testleri de çalıştırabilirsiniz.