Kablosuz

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

Kablosuz modül bileşenleri

1. şekil. 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 kablosuz deneyimi elde eder ve modül güncellemeleri sayesinde birlikte çalışabilirlik sorunları düzeltilir.

  • Uygulama geliştiriciler, platform parçalanmasından daha az etkilenir.

  • OEM'ler, operatörlerin şartlarını karşılayabilir ve aynı zamanda bireysel özelleştirmelerin maliyetini düşürebilir (çünkü aynı şartların farklı şekillerde uygulanmasına gerek yoktur).

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

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi (frameworks/base/wifi/java cihazından alınan dosyalar)
      • tests/
        • android/net/wifi (frameworks/base/wifi/tests cihazından alınan dosyalar)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (frameworks/opt/net/wifi/service/java cihazından alınan dosyalar)
      • tests/
        • com/android/server/wifi (frameworks/opt/net/wifi/tests cihazından alınan dosyalar)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (frameworks/base/packages/OsuLogin cihazından alınan 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 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 Eşleme uygulaması
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

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

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

Kök/frameworks/base/wifi dizininde yama dosyasını 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, işlemeyi iki işleme ayırı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 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 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ş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'de dosyalar taşınmaz 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'lerini 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ü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'sı (OsuLoginGoogle.apk)
  • Kaynak APK'sı (ServiceWifiResourcesGoogle.apk)
  • WFA sertifikaları

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

Kablosuz modül aşağıdaki bileşenlere bağlıdır.

  • Bağlantı
  • Telefon Hizmeti
  • Proto kitaplıkları
  • Çeşitli sistem bileşenleri
  • Kablosuz HAL'ler
  • 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ştirilebilir 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/ bölümüne 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 de 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 bağlantıya özel mağaza dosyası 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_ce/<userId>/wifi klasöründe depolanıyordu.

Gizli Wi-Fi API'lerine erişme

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

  1. framework-wifi kimlikli öğe için 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, libs listesinde framework öğesinden önce görünüyor olmalıdır. 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 (örneğin, 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. Hem wifi-service-pre-jarjar hem de service-wifi öğesinde libs özelliğine framework ve android_system_server_stubs_current özelliklerini ekleyin.

  3. Sonucun aşağıdaki kod örneğine benzediğini 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 Uyumluluk Test Paketi (CTS), her modül sürümünde kapsamlı bir CTS testi grubu çalıştırarak kablosuz modülünü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.