Wi-Fi

Modul Wi-Fi dapat diperbarui, artinya dapat menerima update untuk kemampuan di luar siklus rilis Android normal. Modul ini berisi 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 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 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
    • 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 paket android.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, dan WifiRttService
  • OsuLogin
  • ServiceWifiResources

Modul ini mengecualikan komponen berikut, yang tetap menjadi bagian dari build AOSP OEM.

  • Komponen native wificond di system/connectivity/wificond
  • Antarmuka wificond (class 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 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.

Penyesuaian Wi-Fi

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.

  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 library @hide Wi-Fi API. Misalnya, berikut adalah aturan build untuk java_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",
        ],
    }
    
  3. Pastikan framework-wifi.impl muncul sebelum framework dalam daftar libs. Urutan dependensi dalam atribut libs 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.

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

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

  3. 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.