Wifi

Modul Wi-Fi dapat diperbarui, artinya dapat menerima pembaruan untuk fungsionalitas di luar siklus rilis Android normal. Modul ini berisi komponen-komponen berikut.

Komponen modul Wi-Fi

Gambar 1. Komponen dan arsitektur modul Wi-Fi

Modul Wi-Fi memberikan manfaat berikut.

  • Pengguna akhir mendapatkan pengalaman Wi-Fi yang konsisten di seluruh perangkat Android dan perbaikan masalah interoperabilitas melalui pembaruan modul.

  • Pengembang aplikasi mendapatkan pengurangan fragmentasi platform.

  • OEM dapat memenuhi persyaratan operator sekaligus mengurangi biaya untuk penyesuaian individual (karena mereka tidak memerlukan implementasi berbeda dari persyaratan yang sama dengan cara yang berbeda).

Batas modul untuk Android 12

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi (file dari frameworks/base/wifi/java )
      • tests/
        • android/net/wifi (file dari frameworks/base/wifi/tests )
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (file dari frameworks/opt/net/wifi/service/java )
      • tests/
        • com/android/server/wifi (file dari frameworks/opt/net/wifi/tests )
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (file dari frameworks/base/packages/OsuLogin )
    • ServiceResources/ (baru di Android 12, manifes APK Overlay disimpan di sini)
      • res/ (baru di Android 11, konfigurasi Wi-Fi diekstrak dari frameworks/base/core/res/res )
      • AndroidManifest.xml
      • Android.bp

Direktori di atas juga berisi kode yang tetap berada di luar komponen sistem modular dan di lokasinya saat ini, misalnya:

  • wificond interface (kelas dalam paket android.net.wifi.nl80211 , misalnya, WifiNl80211Manager )
  • Contoh aplikasi Resource Overlay
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

OEM dapat menggunakan contoh perintah untuk membantu memindahkan patch mereka dari direktori proyek asli ke direktori proyek baru.

Memindahkan tambalan dari kerangka kerja/basis/wifi

Membuat file patch di root/frameworks/base/wifi

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

Menerapkan file tambalan ke root/paket/modul/Wifi

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

Memindahkan patch dari frameworks/opt/net/wifi

Untuk memindahkan patch dari frameworks/opt/net/wifi , diperlukan langkah-langkah kompleks karena hierarki direktori berubah selama migrasi.

Dalam frameworks/opt/net/wifi , bagi komit menjadi dua komit, satu untuk service/ dan satu untuk tests/ .

Migrasi komit HEAD

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

Menghasilkan dua file patch komit

git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt

Menerapkan dua tambalan ke paket/modul/Wifi

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

Menekan dua komit kembali menjadi satu komit

git rebase -i

Ubah operasi komit kedua menjadi squash .

Edit pesan komit yang sesuai.

Batas modul untuk Android 11

Layanan Wi-Fi terus berjalan di dalam proses Layanan Sistem. Modul Wi-Fi mencakup semua kode dalam packages/modules/Wifi termasuk yang berikut ini.

  • SDK dan kelas layanan untuk WifiService , WifiP2pService , WifiAwareService , WifiScannerService , dan WifiRttService
  • OsuLogin
  • ServiceWifiResources

Modul tidak menyertakan komponen berikut, yang tetap menjadi bagian dari build AOSP OEM.

  • komponen asli wificond di system/connectivity/wificond
  • antarmuka wificond (kelas dalam paket android.net.wifi.nl80211 , misalnya, WifiNl80211Manager )
  • android.net.wifi.SoftApConfToXmlMigrationUtil
  • android.net.wifi.WifiNetworkScoreCache
  • android.net.wifi.WifiMigration
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Android 11 tidak memindahkan file, tetapi rilis mendatang mungkin. Untuk mengurangi upaya yang terlibat dalam mem-porting perubahan lokasi file, kami merekomendasikan upstream sebanyak mungkin perubahan ke AOSP (setelah mem-porting-nya ke Android 11 atau memfaktorkan ulang ekstensi kepemilikan untuk menggunakan API Android formal atau ekstensi HAL vendor untuk melepaskannya dari kode AOSP.

Format modul

Modul Wi-Fi ( com.google.android.wifi.apex ) dalam format APEX dan tersedia untuk perangkat yang menjalankan Android 11 atau lebih tinggi. File APEX mencakup komponen berikut.

  • Pustaka SDK ( framework-wifi.jar )
  • Perpustakaan layanan ( service-wifi.jar )
  • APK OsuLogin ( OsuLoginGoogle.apk )
  • APK Sumber Daya ( ServiceWifiResourcesGoogle.apk )
  • sertifikat WFA

Ketergantungan modul

Modul Wi-Fi tergantung pada komponen berikut.

  • Konektivitas
  • Telepon
  • Perpustakaan prototipe
  • Komponen sistem lain-lain
  • WiFi HAL
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Modul ini berinteraksi dengan kerangka kerja hanya menggunakan @SystemApi yang stabil (tanpa penggunaan API @hide ) dan ditandatangani dengan tanda tangan Google, bukan tanda tangan platform.

Menyesuaikan

Modul Wi-Fi tidak mendukung penyesuaian langsung, tetapi Anda dapat menyesuaikan konfigurasi menggunakan overlay sumber daya runtime (RRO) atau konfigurasi operator.

Kustomisasi Wi-Fi

Gambar 2. Kustomisasi modul Wi-Fi

  • Untuk penyesuaian kecil, aktifkan atau nonaktifkan pengaturan di config RRO.
  • Untuk kontrol lebih lanjut, sesuaikan nilai konfigurasi untuk kunci konfigurasi operator apa pun yang diekspos sebagai @SystemAPI .

Menggunakan hamparan sumber daya waktu proses

Anda dapat menyesuaikan modul Wi-Fi dengan mengganti konfigurasi default menggunakan RRO. Untuk daftar konfigurasi overlay, lihat packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml . Untuk detail perilaku konfigurasi, lihat packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml . Untuk contoh aplikasi overlay, lihat device/google/coral/rro_overlays/WifiOverlay/ .

Karena file device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml menyetel atribut targetPackage ke com.android.wifi.resources dan APK sumber daya yang dikirimkan oleh modul Wi-Fi memiliki nama paket com.google.android.wifi.resources , Anda harus menyetel overlay APKS targetPackage ke com.google.android.wifi.resources agar konfigurasi Wi-Fi overlay berhasil.

Memigrasikan format penyimpanan konfigurasi

Modul Wi-Fi hanya dapat mengurai format penyimpanan konfigurasi Wi-Fi AOSP. Jika sebelumnya Anda telah mengubah format penyimpanan konfigurasi Wi-Fi (yang mencakup daftar jaringan yang disimpan pengguna), Anda harus mengonversi data tersebut ke format AOSP saat memutakhirkan perangkat ke rilis Android apa pun yang menyertakan modul Wi-Fi. Kait yang diperlukan untuk konversi ini ada di kelas android.net.wifi.WifiMigration .

Terapkan konversi format dalam metode berikut.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Dipanggil oleh modul Wi-Fi untuk mengambil konten file penyimpanan bersama Wi-Fi yang telah dikonversi ke format AOSP.

    • File-file ini sebelumnya (di Android 10) disimpan di folder /data/misc/wifi di perangkat.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Dipanggil oleh modul Wi-Fi untuk mengambil konten file penyimpanan khusus pengguna Wi-Fi yang telah dikonversi ke format AOSP.

    • File-file ini sebelumnya (di Android 10) disimpan di folder /data/misc_ce/<userId>/wifi di perangkat.

Mengakses API Wi-Fi tersembunyi

Simbol (kelas, metode, bidang, dll.) yang dianotasi dengan @hide di modul Wi-Fi bukan bagian dari permukaan API publiknya dan tidak dapat diakses pada perangkat yang modulnya terpasang. Perangkat yang tidak menyertakan modul Wi-Fi dapat terus menggunakan @hide Wi-Fi API menggunakan langkah-langkah berikut.

  1. Hapus batasan visibilitas yang ditempatkan pada framework-wifi di packages/modules/Wifi/framework/Android.bp dengan mengubah atribut impl_library_visibility menjadi publik.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Ubah aturan build untuk mengizinkan perpustakaan mengakses @hide Wi-Fi API. Misalnya, berikut ini adalah aturan build untuk java_library .

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

    Untuk mengizinkan akses perpustakaan untuk foo-lib , ubah aturan build seperti yang ditunjukkan di bawah ini.

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. Pastikan framework-wifi.impl muncul sebelum framework dalam daftar libs . Urutan dependensi dalam atribut libs adalah signifikan.

Mengakses API kerangka kerja tersembunyi

Simbol yang dianotasi dengan @hide di luar modul Wi-Fi tidak dapat diakses dengan kode di dalam modul Wi-Fi. Perangkat yang tidak menyertakan modul Wi-Fi dapat terus menggunakan @hide API eksternal (misalnya, dari framework.jar ) di service-wifi dengan membuat modifikasi berikut pada frameworks/opt/net/wifi/service/Android.bp .

  1. Di wifi - wifi-service-pre-jarjar dan service-wifi , ubah atribut sdk_version menjadi core_platform .

  2. Di wifi - wifi-service-pre-jarjar dan service-wifi , tambahkan framework dan android_system_server_stubs_current ke atribut libs .

  3. Pastikan hasilnya mirip dengan contoh kode berikut.

    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",
        ],
    }
    

Pengujian

Android Compatibility Test Suite (CTS) memverifikasi fungsionalitas modul Wi-Fi dengan menjalankan serangkaian pengujian CTS yang komprehensif pada setiap rilis modul. Anda juga dapat menjalankan pengujian yang dijelaskan dalam Pengujian, Debugging, dan Penyetelan Wi-Fi .