Kablosuz

Kablosuz modül güncellenebilirdir. Yani normal Android sürüm döngüsünün dışında özelliklerle ilgili güncellemeler alabilir. Bu modül aşağıdaki bileşenleri içerir.

Kablosuz modül bileşenleri

Şekil 1. Kablosuz bağlantı modülü bileşenleri ve mimarisi

Kablosuz modül aşağıdaki avantajları sağlar.

  • Son kullanıcılar, Android cihazlarda tutarlı bir kablosuz bağlantı deneyimi elde eder ve modül güncellemeleri sayesinde birlikte çalışabilirlik sorunlarına yönelik düzeltmeler alır.

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

  • OEM'ler, operatör şartlarını karşılarken aynı zamanda bireysel özelleştirmelerin maliyetlerini de düşürebilir (aynı şartların farklı şekillerde uygulanmasına gerek olmadığı 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'dan gelen 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'dan gelen dosyalar)
      • tests/
        • com/android/server/wifi (frameworks/opt/net/wifi/tests'dan gelen dosyalar)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (frameworks/base/packages/OsuLogin'dan gelen dosyalar)
    • ServiceResources/ (Android 12'de yeni, yer paylaşımı APK manifesti burada depolanır)
      • res/ (Android 11'de yeni, kablosuz ağ yapılandırmaları şuradan alınır: frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (Android 13'te yenidir. Hizmet tarafından istenen kullanıcı iletişim kutularını başlatan 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 Resource Overlay uygulaması
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

OEM'ler, örnek komutları kullanarak yamalarını orijinal proje dizinlerinden yeni proje dizine taşıyabilir.

Bir yamayı frameworks/base/wifi'den taşıma

root/frameworks/base/wifi dizininde yama dosyası 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

Bir yamayı frameworks/opt/net/wifi'den taşıma

Dizin hiyerarşisi taşıma sırasında değiştirildiği için frameworks/opt/net/wifi'ten yamayı taşımak için karmaşık adımlar gerekir.

frameworks/opt/net/wifi uygulamasında, biri service/ ve diğeri tests/ için olmak üzere kaydı iki kayda bölün.

HEAD taahhütü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 kayı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/Kablosuz'a uygulama

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

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

git rebase -i

İkinci kaydetme işlemini squash olarak değiştirin.

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

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

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

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

Modül, OEM'nin AOSP derlemesinin bir parçası olarak kalan aşağıdaki bileşenleri hariç tutar.

  • system/connectivity/wificond bölgesinde wificond yerel bileşen
  • wificond arayüzü (android.net.wifi.nl80211 paketindeki sınıflar, ör. 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şımayla ilgili çabayı azaltmak için mümkün olduğunca fazla değişikliği AOSP'ye göndermenizi öneririz (Android 11'e taşındıktan veya özel uzantıları, resmi Android API'lerini kullanacak şekilde yeniden derlendikten sonra AOSP kodundan ayırmak için tedarikçi HAL uzantılarını kullanarak).

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 (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 kullanarak (@hide API kullanımı olmadan) ç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ında kaynak yer paylaşımlarını (RRO'lar) veya operatör yapılandırmalarını kullanarak yapılandırmayı özelleştirebilirsiniz.

Kablosuz ağ özelleştirmesi

Ş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 tüm operatör yapılandırma anahtarlarının yapılandırma değerlerini özelleştirin.

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

RRO'ları kullanarak varsayılan yapılandırmaları geçersiz kılarak kablosuz modülü ö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ışı ayrıntıları için packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml başlıklı makaleyi inceleyin. Örnek 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 ayarlar ve kablosuz modül tarafından sağlanan kaynak APK'nın paket adı com.google.android.wifi.resources olduğundan, kablosuz yapılandırmaları başarılı bir şekilde yer paylaşımı yapmak için yer paylaşımı APK'larını targetPackage olarak com.google.android.wifi.resources ayarlamanız gerekir.

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

Kablosuz modülü yalnızca AOSP kablosuz yapılandırma depolama biçimini ayrıştırabilir. Daha önce kablosuz ağ yapılandırması depolama biçimini (kullanıcı tarafından kaydedilen ağ listesini içerir) değiştirdiyseniz bir cihazı kablosuz ağ modülü 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ürme işlemini aşağıdaki yöntemlerde uygulayın.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • AOSP biçimine dönüştürülmüş kablosuz paylaşılan mağaza dosya içeriklerini almak için kablosuz 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 kullanıcıya özgü 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 ek açıklamaya sahip simgeler (sınıflar, yöntemler, alanlar vb.) herkese açık API yüzeyinin bir parçası değildir ve modülün yüklü olduğu cihazlarda bunlara erişilemez. Kablosuz bağlantı modülünü içermeyen cihazlar, aşağıdaki adımları uygulayarak @hide Wi-Fi API'lerini kullanmaya devam edebilir.

  1. impl_library_visibility özelliğini herkese açık olarak değiştirerek packages/modules/Wifi/framework/Android.bp tarihinde framework-wifi için 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. Derleme kuralını, kitaplığa @hide Wi-Fi API'lerine erişim izni verecek şekilde değiştirin. Örneğin, aşağıdakiler bir java_library için 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 ü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'ün, libs listesinde framework'ten ö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 ek açıklamaya sahip simgelere kablosuz modüldeki kod tarafından erişilemez. Kablosuz ağ modülü içermeyen cihazlar, frameworks/opt/net/wifi/service/Android.bp'da aşağıdaki değişiklikleri yaparak service-wifi'de @hide harici API'leri (ör. framework.jar'dan) kullanmaya devam edebilir.

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

  2. wifi-service-pre-jarjar ve service-wifi'te 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

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