Modul Wi-Fi dapat diupdate, artinya modul ini dapat menerima update kemampuan di luar siklus rilis Android normal. Modul ini berisi komponen berikut.
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 update modul.
Developer aplikasi mendapatkan pengurangan fragmentasi platform.
OEM dapat memenuhi persyaratan operator sekaligus mengurangi biaya untuk penyesuaian individual (karena mereka tidak memerlukan implementasi persyaratan yang sama dengan cara yang berbeda).
Batas modul untuk Android 12 dan Android 13
packages/modules/Wififrameworkjava/android/net/wifi(files fromframeworks/base/wifi/java)
tests/android/net/wifi(files fromframeworks/base/wifi/tests)
aidl-export/api/Android.bp
service/java/com/android/server/wifi(files fromframeworks/opt/net/wifi/service/java)
tests/com/android/server/wifi(files fromframeworks/opt/net/wifi/tests)
proto/Android.bpproguard.flagswifi.rc
OsuLogin/(files fromframeworks/base/packages/OsuLogin)ServiceResources/(new in Android 12, Overlay APK manifest is stored here)res/(new in Android 11, Wi-Fi configs extracted from fromframeworks/base/core/res/res)AndroidManifest.xmlAndroid.bp
WifiDialog/(new in Android 13 App to launch user dialogs requested by the service is stored here.)src/com/android/wifi/dialog(Contains the Activity the dialogs are launched from)
AndroidManifest.xmlAndroid.bp
Direktori sebelumnya juga berisi kode yang tetap berada di luar komponen sistem modular dan di lokasi saat ini, misalnya:
wificond interface(classes in packageandroid.net.wifi.nl80211, for example,WifiNl80211Manager)- Sample Resource Overlay app
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
OEM dapat menggunakan perintah contoh untuk membantu memindahkan patch dari direktori project asli ke direktori project baru.
Memindahkan patch dari frameworks/base/wifi
Membuat file patch di root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txtMenerapkan file patch ke root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txtMemindahkan patch dari frameworks/opt/net/wifi
Untuk memindahkan patch dari frameworks/opt/net/wifi, langkah-langkah yang kompleks diperlukan karena hierarki direktori diubah selama migrasi.
Di frameworks/opt/net/wifi, pisahkan commit menjadi dua commit, satu untuk service/ dan satu untuk tests/.
Memigrasikan commit HEAD
git reset HEAD^git add service/git commit # Enter your commit message. Call this commit service-commitgit add tests/git commit # Enter your commit message. Call this commit test-commit
Membuat dua file patch commit
git format-patch -1 service-commit --stdout > service-patch.txtgit format-patch -1 test-commit --stdout > test-patch.txt
Menerapkan dua patch ke packages/modules/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
Menggabungkan dua commit kembali menjadi satu commit
git rebase -iUbah operasi commit kedua menjadi squash.
Edit pesan commit sesuai kebutuhan.
Batas modul untuk Android 11
Layanan Wi-Fi terus berjalan di dalam proses Layanan Sistem. Modul Wi-Fi mencakup semua kode di packages/modules/Wifi, termasuk kode berikut.
- Class SDK dan layanan untuk
WifiService,WifiP2pService,WifiAwareService,WifiScannerService, danWifiRttService OsuLoginServiceWifiResources
Modul ini mengecualikan komponen berikut, yang tetap menjadi bagian dari build AOSP OEM.
- Komponen native
wificonddisystem/connectivity/wificond - Antarmuka
wificond(class dalam paketandroid.net.wifi.nl80211, misalnya,WifiNl80211Manager) android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 tidak memindahkan file, tetapi rilis mendatang mungkin akan melakukannya. Untuk mengurangi upaya yang diperlukan dalam memindahkan perubahan lokasi file, sebaiknya kirimkan sebanyak mungkin perubahan ke AOSP (setelah memindahkannya ke Android 11 atau memfaktorkan ulang ekstensi eksklusif untuk menggunakan API Android formal atau ekstensi HAL vendor guna memisahkannya dari kode AOSP.
Format modul
Modul Wi-Fi (com.android.wifi) dalam
format APEX dan tersedia untuk perangkat
yang menjalankan Android 11 atau yang lebih tinggi. File APEX mencakup komponen berikut.
- Library SDK (
framework-wifi.jar) - Library layanan (
service-wifi.jar) - APK OsuLogin (
OsuLoginGoogle.apk) - APK resource (
ServiceWifiResourcesGoogle.apk) - Sertifikat WFA
Dependensi modul
Modul Wi-Fi bergantung pada komponen berikut.
- Konektivitas
- Telepon
- Library Proto
- Komponen sistem lainnya
- HAL Wi-Fi
wificondbouncycastleksoap2libnanohttpd
Modul ini berinteraksi dengan framework hanya menggunakan @SystemApi yang stabil (tidak ada penggunaan API @hide) dan ditandatangani dengan tanda tangan Google, bukan tanda tangan platform.
Penyesuaian
Modul Wi-Fi tidak mendukung penyesuaian langsung, tetapi Anda dapat menyesuaikan konfigurasi menggunakan overlay resource runtime (RRO) atau konfigurasi operator.
Gambar 2. Penyesuaian modul Wi-Fi
- Untuk penyesuaian kecil, aktifkan atau nonaktifkan setelan di
configRRO. - Untuk kontrol yang lebih besar, sesuaikan nilai konfigurasi untuk kunci konfigurasi operator yang diekspos sebagai
@SystemAPI.
Menggunakan overlay resource runtime
Anda dapat menyesuaikan modul Wi-Fi dengan mengganti konfigurasi default menggunakan RRO. Untuk mengetahui daftar konfigurasi yang dapat di-overlay, lihat packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml.
Untuk mengetahui detail perilaku konfigurasi, lihat packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml.
Untuk mengetahui contoh aplikasi overlay, lihat device/google/coral/rro_overlays/WifiOverlay/.
Karena file device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml menetapkan atribut targetPackage ke com.android.wifi.resources dan APK resource yang dikirimkan oleh modul Wi-Fi memiliki nama paket com.google.android.wifi.resources, Anda harus menetapkan targetPackage APKS overlay ke com.google.android.wifi.resources agar dapat meng-overlay konfigurasi Wi-Fi dengan 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 tersimpan pengguna), Anda harus mengonversi data tersebut ke format AOSP saat mengupgrade perangkat ke rilis Android apa pun yang menyertakan modul Wi-Fi. Hook yang diperlukan untuk konversi ini ada di class 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 ini sebelumnya (di Android 10) disimpan di folder
/data/misc/wifidi 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 ini sebelumnya (di Android 10) disimpan di folder
/data/misc_ce/<userId>/wifidi perangkat.
Mengakses API Wi-Fi tersembunyi
Simbol (class, metode, kolom, dll.) yang diberi anotasi dengan @hide di modul Wi-Fi bukan merupakan bagian dari platform API publiknya dan tidak dapat diakses di perangkat yang menginstal modul. Perangkat yang tidak menyertakan modul Wi-Fi dapat terus menggunakan API Wi-Fi @hide dengan mengikuti langkah-langkah berikut.
Hapus batasan visibilitas yang ditempatkan di
framework-wifidipackages/modules/Wifi/framework/Android.bpdengan mengubah atributimpl_library_visibilitymenjadi publik.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }Ubah aturan build untuk mengizinkan akses library
@hideWi-Fi API. Misalnya, berikut adalah aturan build untukjava_library.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }Untuk mengizinkan akses library untuk
foo-lib, ubah aturan build sebagai berikut:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }Pastikan
framework-wifi.implmuncul sebelumframeworkdalam daftarlibs. Urutan dependensi dalam atributlibsbersifat signifikan.
Mengakses API framework tersembunyi
Simbol yang diberi anotasi dengan @hide di luar modul Wi-Fi tidak dapat diakses oleh kode dalam modul Wi-Fi. Perangkat yang tidak menyertakan modul Wi-Fi dapat terus menggunakan API eksternal @hide (misalnya, dari framework.jar) di service-wifi dengan melakukan modifikasi berikut pada frameworks/opt/net/wifi/service/Android.bp.
Di kedua
wifi-service-pre-jarjardanservice-wifi, ubah atributsdk_versionmenjadicore_platform.Di kedua
wifi-service-pre-jarjardanservice-wifi, tambahkanframeworkdanandroid_system_server_stubs_currentke atributlibs.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 kemampuan modul Wi-Fi dengan menjalankan serangkaian pengujian CTS yang komprehensif pada setiap rilis modul. Anda juga dapat menjalankan pengujian yang dijelaskan dalam Menguji, men-debug, dan mengoptimalkan Wi-Fi.