Modul Wi-Fi dapat diperbarui, artinya dapat menerima pembaruan untuk fungsionalitas di luar siklus rilis Android normal. Modul ini berisi komponen-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 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 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
-
-
Direktori di atas juga berisi kode yang tetap berada di luar komponen sistem modular dan di lokasinya saat ini, misalnya:
-
wificond interface
(kelas dalam paketandroid.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
, danWifiRttService
-
OsuLogin
-
ServiceWifiResources
Modul tidak menyertakan komponen berikut, yang tetap menjadi bagian dari build AOSP OEM.
- komponen asli
wificond
disystem/connectivity/wificond
- antarmuka
wificond
(kelas 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 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.
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.
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 perpustakaan mengakses
@hide
Wi-Fi API. Misalnya, berikut ini adalah aturan build untukjava_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", ], }
Pastikan
framework-wifi.impl
muncul sebelumframework
dalam daftarlibs
. Urutan dependensi dalam atributlibs
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
.
Di wifi -
wifi-service-pre-jarjar
danservice-wifi
, ubah atributsdk_version
menjadicore_platform
.Di wifi -
wifi-service-pre-jarjar
danservice-wifi
, tambahkanframework
danandroid_system_server_stubs_current
ke 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 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 .