Kablosuz

Wi-Fi modülü güncellenebilir. Bu sayede, normal Android sürüm döngüsü dışında özellik güncellemeleri alabilir. Bu modül aşağıdaki bileşenleri içerir.

Kablosuz modül bileşenleri

Şekil 1. Kablosuz modül bileşenleri ve mimarisi

Wi-Fi modülü aşağıdaki avantajları sunar.

  • Son kullanıcılar, Android cihazlarda tutarlı bir kablosuz deneyimi elde eder ve modül güncellemeleri sayesinde birlikte çalışabilirlik sorunları düzeltilir.

  • Uygulama geliştiriciler, platform parçalanması sorununu daha az yaşar.

  • OEM'ler, operatörlerin şartlarını karşılayabilir ve aynı zamanda bireysel özelleştirmelerin maliyetini düşürebilir (aynı şartların farklı şekillerde uygulanması gerekmediği için).

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 kaynaklı dosyalar)
      • tests/
        • com/android/server/wifi (frameworks/opt/net/wifi/tests kaynaklı dosyalar)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (frameworks/base/packages/OsuLogin dosyaları)
    • ServiceResources/ (Android 12'de yeni, yer paylaşımı APK manifesti burada saklanır)
      • res/ (Android 11'de yeni, Wi-Fi yapılandırmaları şuradan çıkarıldı: frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (Android 13'te yeni: Hizmet tarafından istenen kullanıcı iletişim kutularını başlatmak için kullanılan uygulama burada saklanır.)
      • src/
        • com/android/wifi/dialog (İletişim kutularının başlatıldığı etkinliği içerir)
      • AndroidManifest.xml
      • Android.bp

Önceki dizinler, modüler sistem bileşeninin dışında kalan ve mevcut konumunda bulunan kodu da içerir. Örneğin:

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

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

frameworks/base/wifi klasöründen bir yamayı taşıma

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

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

Yama dosyasını root/packages/modules/Wifi'ye uygulama

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

frameworks/opt/net/wifi dizininden bir yamayı taşıma

Yama, taşıma işlemi sırasında dizin hiyerarşisi değiştirildiği için frameworks/opt/net/wifi konumundan taşınırken karmaşık adımlar uygulanması gerekir.

frameworks/opt/net/wifi içinde, commit'i iki commit'e bölün. Biri service/, diğeri tests/ için olsun.

HEAD işleme noktası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 kaydetme 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 yamanın paketlere/modüllere/kablosuz ağa uygulanması

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

İki commit'i tek bir commit'te birleştirme

git rebase -i

İkinci işlemeyi squash olarak değiştirin.

Commit mesajını uygun şekilde düzenleyin.

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

Kablosuz ağ hizmeti, Sistem Hizmeti işleminde ç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 derlemesinin bir parçası olmaya devam eden aşağıdaki bileşenleri içermez.

  • system/connectivity/wificond içinde wificond yerel bileşen
  • 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ümlerde bu özellik eklenebilir. Dosya konumu değişikliklerini taşıma işleminin zorluğunu azaltmak için, mümkün olduğunca çok değişikliği AOSP'ye aktarmanızı (Android 11'e taşıdıktan veya tescilli uzantıları AOSP kodundan ayırmak için resmi Android API'leri ya da tedarikçi HAL uzantılarını kullanacak şekilde yeniden düzenledikten sonra) öneririz.

Modül biçimi

Wi-Fi modülü (com.android.wifi), APEX biçimindedir ve Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda kullanılabilir. APEX dosyası aşağıdaki bileşenleri içerir.

  • SDK kitaplığı (framework-wifi.jar)
  • Hizmet kitaplığı (service-wifi.jar)
  • OsuLogin APK'sı (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
  • Proto kitaplıkları
  • Çeşitli sistem bileşenleri
  • Kablosuz HAL'leri
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

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

Özelleştirme

Kablosuz modülü doğrudan özelleştirmeyi desteklemez ancak çalışma zamanı kaynak yer paylaşımlarını (RRO'lar) veya operatör yapılandırmalarını kullanarak yapılandırmayı özelleştirebilirsiniz.

Kablosuz ağ özelleştirme

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

  • Küçük özelleştirmeler için RRO'da config ayarları etkinleştirin veya devre dışı bırakın.
  • Daha fazla kontrol için @SystemAPI olarak sunulan herhangi bir operatör yapılandırma anahtarının yapılandırma değerlerini özelleştirin.

Çalışma zamanında kaynak eşlemelerini kullanma

RRO'ları kullanarak varsayılan yapılandırmaları geçersiz kılarak Wi-Fi modülünü özelleştirebilirsiniz. Yerleştirilebilen yapılandırmaların listesi için packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml bölümüne bakın. Yapılandırma davranışı hakkında ayrıntılı bilgi için packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml başlıklı makaleyi inceleyin. Örnek bir yer paylaşımı uygulaması için device/google/coral/rro_overlays/WifiOverlay/ sayfasına bakın.

device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml dosyası, targetPackage özelliğini com.android.wifi.resources olarak ayarladığından ve Wi-Fi modülü tarafından sunulan kaynak APK'sının paket adı com.google.android.wifi.resources olduğundan, Wi-Fi yapılandırmalarını başarılı bir şekilde yerleştirmek için yerleştirme APK'larını targetPackage olarak ayarlamanız gerekir.com.google.android.wifi.resources

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

Kablosuz modülü yalnızca AOSP kablosuz yapılandırma depolama biçimini ayrıştırabilir. Daha önce Kablosuz yapılandırma depolama biçimini (kullanıcının kayıtlı ağ listesini içerir) değiştirdiyseniz bir cihazı Kablosuz 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.

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

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • AOSP biçimine dönüştürülmüş, kablosuz bağlantı ile paylaşılan depolama alanı dosya içeriklerini almak için kablosuz bağlantı 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 biçimine dönüştürülmüş, kablosuz kullanıcıya özel mağaza dosyası içeriklerini almak için kablosuz modül tarafından çağrılır.

    • Bu dosyalar daha önce (Android 10'da) cihazdaki /data/misc_ce/<userId>/wifi klasöründe depolanıyordu.

Gizli Wi-Fi API'lerine erişme

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

  1. framework-wifi öğesine packages/modules/Wifi/framework/Android.bp konumunda uygulanan görünürlük kısıtlamalarını, impl_library_visibility özelliğini herkese açık olarak değiştirerek 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 @hide Wi-Fi API'lerinin izin verilmesi için derleme kuralını değiştirin. Örneğin, aşağıda 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 üzere derleme kuralını aşağıdaki gibi değiştirin:

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. framework-wifi.impl öğesinin, libs listesinde framework öğesinden ö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

Kablosuz modülün dışında @hide ile açıklama eklenen sembollere, kablosuz modülün içindeki kodla erişilemez. Wi-Fi modülü içermeyen cihazlar, @hide harici API'leri (ör. framework.jar) service-wifi içinde kullanmaya devam edebilir. Bunun için frameworks/opt/net/wifi/service/Android.bp'de aşağıdaki değişiklikleri yapın.

  1. wifi-service-pre-jarjar ve service-wifi'de her ikisinde de sdk_version özelliğini core_platform olarak değiştirin.

  2. wifi-service-pre-jarjar ve service-wifi her ikisinde de libs özelliğine framework ve android_system_server_stubs_current özelliklerini 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

Android Compatibility Test Suite (CTS), her bir modül sürümünde kapsamlı bir CTS testi grubu çalıştırarak kablosuz modülün özelliklerini doğrular. Test etme, hata ayıklama ve Wi-Fi'yi ayarlama bölümünde açıklanan testleri de çalıştırabilirsiniz.