Kablosuz bağlantı

Wi-Fi modülü güncellenebilir, yani özelliklerle ilgili güncellemeleri alabilir sayısını artırır. Bu modül şunları içerir: bileşenlerine ayıralım.

Kablosuz bağlantı modülü bileşenleri

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

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

  • Son kullanıcılar, Android cihazlar genelinde tutarlı bir kablosuz ağ deneyimi yaşayıp bunları düzeltir. .

  • Uygulama geliştiriciler daha az platform parçalılığı elde eder.

  • OEM'ler taşıyıcı gereksinimlerini karşılayabilir, aynı zamanda için ayrı ayrı özelleştirmeler (çünkü şekillerde kullanabilirsiniz).

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 (dosyalar: frameworks/opt/net/wifi/service/java)
      • tests/
        • com/android/server/wifi (dosyalar: frameworks/opt/net/wifi/tests)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (frameworks/base/packages/OsuLogin dosyaları)
    • ServiceResources/ (Android 12'de yeni, Yer Paylaşımlı APK manifesti burada depolanır)
      • res/ (Android 11'de yeni, kablosuz yapılandırmalarda) şuradan alındı: frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (Android 13 uygulamasında yeni hizmet tarafından istenen kullanıcı başlatma iletişim kutuları burada saklanır.)
      • src/
        • com/android/wifi/dialog (İletişim kutularının bulunduğu Etkinliği içerir başlatılmıştır)
      • AndroidManifest.xml
      • Android.bp

Önceki dizinler Ayrıca, modüler sistem bileşeninin dışında ve onun kendisinde bulunan geçerli konumunuz, örneğin:

  • wificond interface (android.net.wifi.nl80211 paketindeki sınıflar, örnek, WifiNl80211Manager)
  • Örnek Resource Overlay uygulaması
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

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

Çerçevelerden/ana/kablosuz bağlantıdan yama 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

Çerçevelerden/opt/net/wifi adresinden yama taşıma

Yamayı frameworks/opt/net/wifi kaynağından taşımak için karmaşık adımlar gerekiyor çünkü taşıma sırasında dizin hiyerarşisi değiştiğinden.

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

HEAD kaydı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/Wifi'ye uygulama

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

İki kaydı tekrar tek bir kayda geçirmek

git rebase -i

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

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

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

Kablosuz hizmeti, Sistem Hizmeti işleminin içinde çalışmaya devam eder. Kablosuz ağ modülü, aşağıdakiler de dahil olmak üzere packages/modules/Wifi ürünündeki tüm kodları içerir.

  • WifiService, WifiP2pService ve WifiAwareService, WifiScannerService ve WifiRttService
  • OsuLogin
  • ServiceWifiResources

Modül, OEM'in şu bileşenlerine dahil değildir: AOSP derlemesi.

  • system/connectivity/wificond bölgesinde wificond yerel bileşen
  • wificond arayüzü (android.net.wifi.nl80211 paketindeki sınıflar, örnek, 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 kullanıma sunulacak sürümleri taşımaz olabilir. Dosya konumu değişikliklerini taşımayla ilgili çabayı azaltmak için AOSP'ye mümkün olduğunca fazla değişiklik öner (bunları Android 11 veya özel uzantıların yeniden düzenlenmesi resmi Android API'leri veya tedarikçi HAL uzantıları kullanarak bunların AOSP kodundan uzaklaşmasını sağlayın.

Modül biçimi

Kablosuz bağlantı modülü (com.android.wifi) şurada: APEX biçimindedir ve cihazlarda kullanılabilir Android 11 veya sonraki sürümleri çalıştıran. APEX dosyasında şunlar yer alır: aşağıdaki bileşenlerde kullanılabilir.

  • 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 bağlantı 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 (hiçbiri @hide API kullanımı) ve platform yerine Google imzası ile imzalanır. imzası var.

Özelleştirme

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

Kablosuz özelleştirme

Şekil 2. Kablosuz bağlantı modülü özelleştirme

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

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

Varsayılan yapılandırmaları geçersiz kılarak Wi-Fi modülünü özelleştirebilirsiniz nasıl yardımcı olacağını daha iyi anlarsınız. Yer paylaşımlı yapılandırmaların listesi için packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml Yapılandırma davranışıyla ilgili ayrıntılar için packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml Örnek bir bindirme uygulaması için device/google/coral/rro_overlays/WifiOverlay/

Çünkü device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml dosyası, targetPackage özelliğini com.android.wifi.resources ve Wi-Fi modülü tarafından yayınlanan kaynak APK'sının paket adı var com.google.android.wifi.resources, yer paylaşımlı APK'ları ayarlamanız gerekir Kablosuz ağ yer paylaşımı için targetPackage - com.google.android.wifi.resources yapılandırma başarıyla tamamlandı.

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

Kablosuz bağlantı modülü yalnızca AOSP kablosuz ağ yapılandırma depolama alanı biçimini ayrıştırabilir. Eğer Kablosuz yapılandırmasının depolama biçimini daha önce kullanıcının kayıtlı ağ listesini içeriyorsa) bu verileri AOSP'ye dönüştürmeniz gerekir. biçimi modülünü kullanabilirsiniz. Bu dönüşüm için gereken kancalar android.net.wifi.WifiMigration sınıf.

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

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Kablosuz paylaşılan mağaza dosya içeriklerini almak için Wi-Fi modülü tarafından çağrıldı AOSP biçimine dönüştürülmüştür.

    • Bu dosyalar daha önce (Android 10'da) /data/misc/wifi bölümünde depolanıyordu adlı bir klasör içerir.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Kablosuz ağ kullanıcısına özel mağaza dosya içeriklerini almak için Wi-Fi modülü tarafından çağrıldı AOSP biçimine dönüştürülmüştür.

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

Gizli Wi-Fi API'lerine erişme

Kablosuz ağda @hide ile açıklama eklenen semboller (sınıflar, yöntemler, alanlar vb.) modülü, genel API yüzeyinin bir parçası değildir ve cihazlarınızın hepsine Google'dan erişebileceksiniz. Kablosuz ağ bağlantısı olmayan cihazlar modülü aşağıdaki adımları uygulayarak @hide Wi-Fi API'lerini kullanmaya devam edebilir.

  1. framework-wifi tarihinde uygulanan görünürlük kısıtlamalarını şu saatte kaldırın: packages/modules/Wifi/framework/Android.bp impl_library_visibility özelliği herkese açık olarak ayarlandı.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Derleme kuralını, kitaplık erişimine @hide Wi-Fi API'lerine izin verecek şekilde değiştirin. Örneğin, Örneğin, aşağıda bir java_library derleme kuralı gösterilmektedir.

    java_library {
        name: "foo-lib",
    
        // no sdk_version attribute defined
    
        libs: [
            "dependency1",
            "dependency2",
        ],
    }
    

    foo-lib için kitaplık erişimine izin vermek istiyorsanız 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 listede framework öğesinden önce göründüğünden emin olun / libs. libs özelliğindeki bağımlılıkların sırası önemlidir.

Gizli çerçeve API'lerine erişme

Kablosuz bağlantı modülünün dışında, ek açıklaması olan @hide sembollerine Wi-Fi modülünde yer alır. Wi-Fi modülünü içermeyen cihazlar şurada @hide harici API'yi (ör. framework.jar API'leri) kullanmaya devam edin: service-wifi frameworks/opt/net/wifi/service/Android.bp.

  1. wifi-service-pre-jarjar ve service-wifi içinde, core_platform ile sdk_version özelliği.

  2. wifi-service-pre-jarjar ve service-wifi ikisine framework ekleyin libs özelliğine android_system_server_stubs_current ve.

  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), kablosuz ağ modülünün her modülde kapsamlı bir dizi CTS testi çalıştırarak kullanabilirsiniz. Ayrıca, Test etme, hata ayıklama ve ayarlama Kablosuz bağlantı.