Modul Wi-Fi dapat diperbarui, artinya dapat menerima update untuk 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.
Fragmentasi platform developer aplikasi berkurang.
OEM dapat memenuhi persyaratan operator sekaligus mengurangi biaya untuk penyesuaian individual (karena mereka tidak memerlukan implementasi yang berbeda dari persyaratan yang sama dengan cara yang berbeda).
Batas modul untuk Android 12 dan Android 13
packages/modules/Wifi
framework
java/
android/net/wifi
(file dariframeworks/base/wifi/java
)
tests/
android/net/wifi
(file dariframeworks/base/wifi/tests
)
aidl-export/
api/
Android.bp
service/
java/
com/android/server/wifi
(file dariframeworks/opt/net/wifi/service/java
)
tests/
com/android/server/wifi
(file dariframeworks/opt/net/wifi/tests
)
proto/
Android.bp
proguard.flags
wifi.rc
OsuLogin/
(file dariframeworks/base/packages/OsuLogin
)ServiceResources/
(baru di Android 12, manifes APK Overlay disimpan di sini)res/
(baru di Android 11, konfigurasi Wi-Fi diekstrak dariframeworks/base/core/res/res
)AndroidManifest.xml
Android.bp
WifiDialog/
(baru di Aplikasi Android 13 untuk meluncurkan dialog pengguna yang diminta oleh layanan disimpan di sini.)src/
com/android/wifi/dialog
(Berisi Aktivitas tempat dialog diluncurkan)
AndroidManifest.xml
Android.bp
Direktori sebelumnya juga berisi kode yang tetap berada di luar komponen sistem modular dan di lokasinya saat ini, misalnya:
wificond interface
(class dalam paketandroid.net.wifi.nl80211
, misalnya,WifiNl80211Manager
)- Contoh aplikasi Overlay Resource
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
OEM dapat menggunakan contoh perintah untuk membantu memindahkan patch mereka dari direktori project asli ke direktori project baru.
Memindahkan patch dari framework/base/wifi
Membuat file patch di root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Menerapkan file patch ke root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Memindahkan patch dari framework/opt/net/wifi
Untuk memindahkan patch dari frameworks/opt/net/wifi
, langkah-langkah kompleks diperlukan
karena hierarki direktori diubah selama migrasi.
Di frameworks/opt/net/wifi
, bagi 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-commit
git 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.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Menerapkan dua patch ke paket/modul/Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Menggabungkan dua commit kembali menjadi satu commit
git rebase -i
Ubah operasi commit kedua menjadi squash
.
Edit pesan commit yang sesuai.
Batas modul untuk Android 11
Layanan Wi-Fi terus berjalan di dalam proses Layanan Sistem. Modul Wi-Fi
menyertakan semua kode di packages/modules/Wifi
termasuk kode berikut.
- Class SDK dan layanan untuk
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
, danWifiRttService
OsuLogin
ServiceWifiResources
Modul ini mengecualikan komponen berikut, yang tetap menjadi bagian dari build AOSP OEM.
- Komponen native
wificond
disystem/connectivity/wificond
- Antarmuka
wificond
(class dalam paketandroid.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 melakukan porting perubahan lokasi file, sebaiknya lakukan perubahan upstream sebanyak mungkin ke AOSP (setelah melakukan porting ke Android 11 atau memfaktorkan ulang ekstensi eksklusif untuk menggunakan API Android formal atau ekstensi HAL vendor untuk melepaskannya 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 menyertakan
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
wificond
bouncycastle
ksoap2
libnanohttpd
Modul ini berinteraksi dengan framework hanya menggunakan @SystemApi
stabil (tidak ada
penggunaan @hide
API) dan ditandatangani dengan tanda tangan Google, bukan tanda tangan
platform.
Penyesuaian
Modul Wi-Fi tidak mendukung penyesuaian langsung, tetapi Anda dapat menyesuaikan konfigurasi menggunakan runtime resource overlay (RRO) atau konfigurasi operator.
Gambar 2. Penyesuaian modul Wi-Fi
- Untuk penyesuaian kecil, aktifkan atau nonaktifkan setelan di
config
RRO. - Untuk kontrol lebih lanjut, sesuaikan nilai konfigurasi untuk kunci konfigurasi operator apa pun
yang ditampilkan sebagai
@SystemAPI
.
Menggunakan overlay resource runtime
Anda dapat menyesuaikan modul Wi-Fi dengan mengganti konfigurasi default
menggunakan RRO. Untuk daftar konfigurasi yang dapat ditempatkan, 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 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 APK overlay
targetPackage
ke com.google.android.wifi.resources
agar konfigurasi Wi-Fi
berhasil di-overlay.
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
menyertakan 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/wifi
pada 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>/wifi
di perangkat.
Mengakses API Wi-Fi tersembunyi
Simbol (class, metode, kolom, dll.) yang dianotasi dengan @hide
di modul Wi-Fi
bukan bagian dari platform API publiknya dan tidak dapat diakses di
perangkat dengan modul yang diinstal. Perangkat yang tidak menyertakan modul
Wi-Fi dapat terus menggunakan API Wi-Fi @hide
menggunakan langkah-langkah berikut.
Hapus batasan visibilitas yang ditempatkan pada
framework-wifi
dipackages/modules/Wifi/framework/Android.bp
dengan mengubah atributimpl_library_visibility
menjadi 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
@hide
Wi-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.impl
muncul sebelumframework
dalam daftarlibs
. Urutan dependensi dalam atributlibs
bersifat signifikan.
Mengakses API framework tersembunyi
Simbol yang dianotasi 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-jarjar
danservice-wifi
, ubah atributsdk_version
menjadicore_platform
.Di kedua
wifi-service-pre-jarjar
danservice-wifi
, tambahkanframework
danandroid_system_server_stubs_current
ke atributlibs
.Pastikan bahwa 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 di Menguji, men-debug, dan menyesuaikan Wi-Fi.