Wi-Fi

Modul Wi-Fi dapat diperbarui, artinya dapat menerima pembaruan fungsi di luar siklus rilis normal Android. 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 penerapan 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 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 diekstraksi dari frameworks/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 di atas juga berisi kode yang berada di luar komponen sistem modular dan berada 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 perintah sampel untuk membantu memindahkan patch mereka dari direktori proyek asli ke direktori proyek baru.

Memindahkan patch dari framework/base/wifi

Menghasilkan 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 frameworks/opt/net/wifi

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

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

Memigrasikan 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 patch ke paket/modul/Wifi

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

Menekan kedua komit kembali menjadi satu komit

git rebase -i

Ubah operasi komit kedua menjadi squash .

Edit pesan komit sebagaimana mestinya.

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 ini tidak termasuk 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 memindahkannya. Untuk mengurangi upaya yang diperlukan dalam melakukan porting perubahan lokasi file, kami merekomendasikan sebanyak mungkin perubahan pada AOSP di bagian hulu (setelah mem-portingnya ke Android 11 atau memfaktorkan ulang ekstensi kepemilikan untuk menggunakan API Android formal atau ekstensi HAL vendor untuk memisahkannya dari kode AOSP.

Format modul

Modul Wi-Fi ( com.android.wifi ) 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 )
  • OsuLogin APK ( OsuLoginGoogle.apk )
  • APK Sumber Daya ( ServiceWifiResourcesGoogle.apk )
  • Sertifikat WFA

Ketergantungan modul

Modul Wi-Fi bergantung pada komponen berikut.

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

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

Menyesuaikan

Modul Wi-Fi tidak mendukung penyesuaian langsung, namun Anda dapat menyesuaikan konfigurasi menggunakan runtime resource overlay (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 runtime

Anda dapat menyesuaikan modul Wi-Fi dengan mengganti konfigurasi default menggunakan RRO. Untuk daftar konfigurasi yang dapat dihamparkan, 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 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 mengatur 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 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 kelas android.net.wifi.WifiMigration .

Terapkan konversi format dengan 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 di perangkat yang memasang modul tersebut. 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 akses perpustakaan @hide API Wi-Fi. 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 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 ketergantungan pada atribut libs sangatlah 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 melakukan 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. Verifikasi 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 .