מודול ה-Wi-Fi ניתן לעדכון, כלומר הוא יכול לקבל עדכונים ליכולות שלו מחוץ למחזור הרגיל של גרסאות Android. המודול הזה מכיל את הרכיבים הבאים.
 
 
איור 1. רכיבים וארכיטקטורה של מודול Wi-Fi
מודול ה-Wi-Fi מספק את היתרונות הבאים.
- משתמשי קצה מקבלים חוויית Wi-Fi עקבית במכשירי Android, ועדכוני מודולים פותרים בעיות של פעולה הדדית. 
- מפתחי אפליקציות נהנים מפיצול פלטפורמה מופחת. 
- יצרני ציוד מקורי יכולים לעמוד בדרישות של ספקי הסלולר וגם להפחית את העלויות של התאמות אישיות ספציפיות (כי הם לא צריכים ליישם את אותן דרישות בדרכים שונות). 
גבולות המודולים ב-Android 12 וב-Android 13
- packages/modules/Wifi- framework- java/- android/net/wifi(קבצים מ-- frameworks/base/wifi/java)
 
- tests/- android/net/wifi(קבצים מ-- frameworks/base/wifi/tests)
 
- aidl-export/
- api/
- Android.bp
 
- service/- java/- com/android/server/wifi(קבצים מ-frameworks/opt/net/wifi/service/java)
 
- 
- tests/- com/android/server/wifi(קבצים מ-frameworks/opt/net/wifi/tests)
 
- 
- proto/
- Android.bp
- proguard.flags
- wifi.rc
 
- OsuLogin/(קבצים מ-- frameworks/base/packages/OsuLogin)
- ServiceResources/(חדש ב-Android 12, מניפסט ה-APK של שכבת-העל מאוחסן כאן)- res/(חדש ב-Android 11, הגדרות Wi-Fi שחולצו מתוךframeworks/base/core/res/res)
- AndroidManifest.xml
- Android.bp
 
- 
- WifiDialog/(חדש ב-Android 13: האפליקציה להפעלת תיבות דו-שיח לבקשת המשתמש מאוחסנת כאן).- src/- com/android/wifi/dialog(מכיל את הפעילות שממנה נפתחות תיבות הדו-שיח)
 
- 
- AndroidManifest.xml
- Android.bp
 
 
הספריות שלמעלה מכילות גם קוד שנשאר מחוץ לרכיב המערכת המודולרי ובמיקום הנוכחי שלו, למשל:
- wificond interface(classes in packageandroid.net.wifi.nl80211, לדוגמה,WifiNl80211Manager)
- דוגמה לאפליקציית שכבת-על של משאבים
- WifiTrackerLib
- libwifi_hal
- libwifi_system
- libwifi_system_iface
יצרני ציוד מקורי יכולים להשתמש בפקודות לדוגמה כדי להעביר את התיקונים שלהם מספריות הפרויקט המקוריות לספריית הפרויקט החדשה.
העברת תיקון מ-frameworks/base/wifi
יצירת קובץ התיקון ב-root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txtהחלת קובץ התיקון על root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txtהעברת תיקון מ-frameworks/opt/net/wifi
כדי להעביר את התיקון מ-frameworks/opt/net/wifi, צריך לבצע שלבים מורכבים
כי ההיררכיה של הספריות השתנתה במהלך ההעברה.
ב-frameworks/opt/net/wifi, מפצלים את הקומיט לשני קומיטים, אחד ל-service/ ואחד ל-tests/.
העברת הקומיט של 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
יצירת שני קובצי תיקון של קומיט
git format-patch -1 service-commit --stdout > service-patch.txtgit format-patch -1 test-commit --stdout > test-patch.txt
החלת שני התיקונים על packages/modules/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
איחוד שתי ההתחייבויות להתחייבות אחת
git rebase -iמשנים את הפעולה של הקומיט השני ל-squash.
עורכים את הודעת הקומיט לפי הצורך.
גבולות המודולים ב-Android 11
שירות ה-Wi-Fi ממשיך לפעול בתהליך של שירות המערכת. מודול ה-Wi-Fi כולל את כל הקוד ב-packages/modules/Wifi, כולל הקודים הבאים.
- SDK וסיווגים של שירותים ל-WifiService,WifiP2pService,WifiAwareService,WifiScannerServiceו-WifiRttService
- OsuLogin
- ServiceWifiResources
המודול לא כולל את הרכיבים הבאים, שנשארים חלק מהגרסה של AOSP של יצרן ה-OEM.
- רכיב מקורי ב-system/connectivity/wificondwificond
- ממשק wificond(classes בחבילהandroid.net.wifi.nl80211, לדוגמה,WifiNl80211Manager)
- android.net.wifi.SoftApConfToXmlMigrationUtil
- android.net.wifi.WifiNetworkScoreCache
- android.net.wifi.WifiMigration
- WifiTrackerLib
- libwifi_hal
- libwifi_system
- libwifi_system_iface
ב-Android 11, הקבצים לא מועברים, אבל יכול להיות שבגרסאות עתידיות הם כן יועברו. כדי לצמצם את המאמץ שנדרש לניוד שינויים במיקום הקובץ, מומלץ להעביר כמה שיותר שינויים ל-AOSP (אחרי ניוד שלהם ל-Android 11 או אחרי שינוי המבנה של תוספים קנייניים כדי להשתמש בממשקי API רשמיים של Android או בתוספי HAL של ספקים כדי להפריד אותם מקוד AOSP).
פורמט המודול
מודול ה-Wi-Fi (com.android.wifi) הוא בפורמט APEX והוא זמין למכשירים עם Android גרסה 11 ואילך. קובץ ה-APEX כולל את הרכיבים הבאים.
- ספריית SDK (framework-wifi.jar)
- ספריית שירותים (service-wifi.jar)
- קובץ APK של OsuLogin  (OsuLoginGoogle.apk)
- קובץ APK של משאבים (ServiceWifiResourcesGoogle.apk)
- אישורי WFA
יחסי תלות בין מודולים
מודול ה-Wi-Fi תלוי ברכיבים הבאים.
- קישוריות
- טלפוניה
- ספריות Proto
- רכיבים שונים של המערכת
- Wi-Fi HALs
- wificond
- bouncycastle
- ksoap2
- libnanohttpd
המודול הזה מתקשר עם המסגרת באמצעות @SystemApi יציבים בלבד (ללא שימוש ב-API @hide) והוא חתום בחתימה של Google במקום בחתימה של הפלטפורמה.
התאמה אישית
מודול ה-Wi-Fi לא תומך בהתאמה אישית ישירה, אבל אפשר להתאים אישית את ההגדרה באמצעות שכבות-על של משאבי זמן ריצה (RRO) או הגדרות של ספקי סלולר.
 
 
איור 2. התאמה אישית של מודול ה-Wi-Fi
- כדי לבצע התאמות אישיות קטנות, מפעילים או משביתים הגדרות ב-RRO config.
- כדי לקבל שליטה רבה יותר, אפשר להתאים אישית את ערכי ההגדרות לכל מפתח הגדרה של ספק שמוצג כ-@SystemAPI.
שימוש בשכבות-על של משאבים בזמן ריצה
אפשר להתאים אישית את מודול ה-Wi-Fi על ידי שינוי הגדרות ברירת המחדל באמצעות RRO. רשימה של הגדרות שאפשר להוסיף להן שכבת-על מופיעה במאמר packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml.
לפרטים על התנהגות ההגדרה, אפשר לעיין במאמר packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml.
דוגמה לאפליקציית שכבת-על זמינה בכתובת device/google/coral/rro_overlays/WifiOverlay/.
כי קובץ device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
מגדיר את המאפיין targetPackage לערך com.android.wifi.resources, ול-APK של המשאב שמועבר על ידי מודול ה-Wi-Fi יש שם חבילה com.google.android.wifi.resources, לכן צריך להגדיר את ה-APK של שכבת העל targetPackage לערך com.google.android.wifi.resources כדי להוסיף שכבת על להגדרות ה-Wi-Fi בהצלחה.
העברת פורמט אחסון ההגדרות
מודול ה-Wi-Fi יכול לנתח רק את פורמט האחסון של הגדרות ה-Wi-Fi ב-AOSP. אם שיניתם בעבר את פורמט האחסון של הגדרות ה-Wi-Fi (שכולל את רשימת הרשתות השמורות של המשתמש), אתם צריכים להמיר את הנתונים האלה לפורמט AOSP כשמשדרגים מכשיר לכל גרסת Android שכוללת את מודול ה-Wi-Fi. ה-hooks שנדרשים להמרה הזו נמצאים במחלקה android.net.wifi.WifiMigration.
מטמיעים את המרת הפורמט בשיטות הבאות.
- WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)- מופעל על ידי מודול ה-Wi-Fi כדי לאחזר את התוכן של קובץ האחסון המשותף של ה-Wi-Fi שהומר לפורמט AOSP. 
- בעבר (ב-Android 10) הקבצים האלה אוחסנו בתיקייה - /data/misc/wifiבמכשיר.
 
- WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)- מופעל על ידי מודול ה-Wi-Fi כדי לאחזר את התוכן של קובץ החנות שספציפי למשתמש ה-Wi-Fi, שהומר לפורמט AOSP. 
- בעבר (ב-Android 10) הקבצים האלה אוחסנו בתיקייה - /data/misc_ce/<userId>/wifiבמכשיר.
 
גישה לממשקי API נסתרים של Wi-Fi
סמלים (classes, methods, fields וכו') שמסומנים בהערה @hide במודול Wi-Fi
לא נכללים בממשק ה-API הציבורי שלו, ואי אפשר לגשת אליהם במכשירים שבהם המודול מותקן. במכשירים שלא כוללים את מודול ה-Wi-Fi, אפשר להמשיך להשתמש ב-@hide Wi-Fi APIs באמצעות השלבים הבאים.
- כדי להסיר את הגבלות החשיפה שהוגדרו ל - framework-wifiבשעה- packages/modules/Wifi/framework/Android.bp, צריך לשנות את מאפיין- impl_library_visibilityל'גלוי לכולם'.- java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
- משנים את כלל הבנייה כדי לאפשר גישה לספריית - @hideWi-Fi APIs. לדוגמה, הכלל הבא הוא כלל build עבור- java_library.- java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }- כדי לאפשר גישה לספרייה עבור - foo-lib, משנים את כלל הבנייה באופן הבא:- java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
- מוודאים ש- - framework-wifi.implמופיע לפני- frameworkברשימה של- libs. סדר התלויות במאפיין- libsחשוב.
גישה ל-APIs מוסתרים של Framework
לא ניתן לגשת לסמלים שמסומנים ב-@hide מחוץ למודול ה-Wi-Fi באמצעות קוד בתוך מודול ה-Wi-Fi. במכשירים שלא כוללים את מודול ה-Wi-Fi, אפשר להמשיך להשתמש ב-API חיצוניים של @hide (לדוגמה, מ-framework.jar) ב-service-wifi על ידי ביצוע השינויים הבאים ב-frameworks/opt/net/wifi/service/Android.bp.
- בשני הפידים, - wifi-service-pre-jarjarו- service-wifi, משנים את המאפיין- sdk_versionלערך- core_platform.
- בשני המקרים, - wifi-service-pre-jarjarו- service-wifi, מוסיפים את- frameworkואת- android_system_server_stubs_currentלמאפיין- libs.
- מוודאים שהתוצאה דומה לדוגמת הקוד הבאה. - 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", ], }
בדיקה
חבילת בדיקות התאימות (CTS) של Android מאמתת את היכולות של מודול ה-Wi-Fi על ידי הפעלת קבוצה מקיפה של בדיקות CTS בכל מהדורה של מודול. אפשר גם להריץ את הבדיקות שמתוארות במאמר בדיקה, ניפוי באגים וכוונון של Wi-Fi.
