Kablosuz ağlar

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 yaşar ve modül güncellemeleri aracılığıyla birlikte çalışabilirlik sorunlarına çözüm bulur.

  • Uygulama geliştiricileri platform parçalanmasını azaltır.

  • OEM'ler taşıyıcı gereksinimlerini karşılarken aynı zamanda bireysel özelleştirme 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 dosyasındaki dosyalar)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ ( frameworks/base/packages/OsuLogin dosyalar)
    • ServiceResources/ (Android 12'de yeni, Overlay APK bildirimi burada saklanır)
      • res/ (Android 11'deki yeni, Wi-Fi yapılandırmaları frameworks/base/core/res/res adresinden alınmıştır)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (hizmet tarafından talep edilen kullanıcı diyaloglarını başlatmak için Android 13 Uygulamasındaki yeni özellik burada saklanır.)
      • src/
        • com/android/wifi/dialog (Diyalogların başlatıldığı Etkinliği içerir)
      • AndroidManifest.xml
      • Android.bp

Yukarıdaki dizinler ayrıca modüler sistem bileşeninin dışında 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 Yer Paylaşımı uygulaması
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

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

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

Yama dosyasını root/frameworks/base/wifi konumunda 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, taşıma sırasında dizin hiyerarşisi değiştiğinden karmaşık adımlar gereklidir.

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 düzeltme eki 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 işlemin tek bir işleme dönüştürülmesi

git rebase -i

İkinci işlemin 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 de 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 bir parçası olarak kalan aşağıdaki bileşenleri hariç tutar.

  • 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 gelecek sürümlerde taşıyabilir. Dosya konumu değişikliklerini taşıma çabasını azaltmak için, AOSP'ye mümkün olduğunca çok değişiklik yapmanızı öneririz (bunları Android 11'e taşıdıktan veya resmi Android API'lerini veya satıcı HAL uzantılarını kullanarak bunları AOSP kodundan ayırmak için özel uzantıları yeniden düzenledikten sonra).

Modül formatı

Wi-Fi modülü ( com.android.wifi ) APEX formatındadır ve Android 11 veya üstünü ç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 ( 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, yalnızca kararlı @SystemApi kullanarak çerçeveyle 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ş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 katmanlarını kullanma

RRO'ları kullanarak varsayılan yapılandırmaları geçersiz kılarak Wi-Fi modülünü özelleştirebilirsiniz. Yerleştirilebilir yapılandırmaların bir listesi için 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 yer paylaşımı uygulaması için, device/google/coral/rro_overlays/WifiOverlay/ adresine bakın.

Çünkü device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml dosyası targetPackage özelliğini com.android.wifi.resources olarak ayarlar 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ıyla kaplamak için APKS targetPackage kaplamasını com.google.android.wifi.resources olarak ayarlamanız gerekir.

Yapılandırma depolama biçimini geçirme

Wi-Fi modülü yalnızca AOSP Wi-Fi yapılandırma depolama formatını 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 gereken kancalar android.net.wifi.WifiMigration sınıfındadır.

Format 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) cihazdaki /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çıklamalı 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 özelliğini public olarak değiştirerek packages/modules/Wifi/framework/Android.bp adresindeki framework-wifi uygulanan 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. Kütüphanenin @hide Wi-Fi API'lerine erişmesine 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 kütüphane 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. libs listesinde framework-wifi.impl öğesinin 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 ) kullanmaya devam edebilir. frameworks/opt/net/wifi/service/Android.bp .

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

  2. Hem wifi-service-pre-jarjar hem de service-wifi , libs özelliğ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. Ayrıca Wi-Fi Test Etme, Hata Ayıklama ve Ayarlama bölümünde açıklanan testleri de çalıştırabilirsiniz.