אפשר לעדכן את מודול ה-Wi-Fi, כלומר הוא יכול לקבל עדכונים ליכולות שלו מחוץ למחזור הרגיל של גרסאות Android. המודול הזה מכיל את הרכיבים הבאים.
איור 1. רכיבים וארכיטקטורה של מודול Wi-Fi
מודול ה-Wi-Fi מספק את היתרונות הבאים.
משתמשי קצה מקבלים חוויית Wi-Fi עקבית במכשירי Android, ועדכוני מודולים פותרים בעיות של פעולה הדדית.
מפתחי אפליקציות נהנים מפיצול פלטפורמה מופחת.
יצרני ציוד מקורי יכולים לעמוד בדרישות של ספקי הסלולר וגם להפחית את העלויות של התאמות אישיות ספציפיות (כי הם לא צריכים ליישם את אותן דרישות בדרכים שונות).
גבולות המודולים ב-Android 12 וב-Android 13
packages/modules/Wififrameworkjava/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.bpproguard.flagswifi.rc
OsuLogin/(קבצים מ-frameworks/base/packages/OsuLogin)-
ServiceResources/(חדש ב-Android 12, מניפסט ה-APK של שכבת-העל מאוחסן כאן)-
res/(חדש ב-Android 11, הגדרות Wi-Fi שחולצו מתוךframeworks/base/core/res/res) AndroidManifest.xmlAndroid.bp
-
-
WifiDialog/(חדש ב-Android 13: אפליקציה להפעלת תיבות דו-שיח למשתמשים שנדרשות על ידי השירות מאוחסנת כאן).src/-
com/android/wifi/dialog(מכיל את הפעילות שממנה נפתחות תיבות הדו-שיח)
-
AndroidManifest.xmlAndroid.bp
הספריות שלמעלה מכילות גם קוד שנשאר מחוץ לרכיב המערכת המודולרי ובמיקום הנוכחי שלו, למשל:
-
wificond interface(classes in packageandroid.net.wifi.nl80211, for example,WifiNl80211Manager) - דוגמה לאפליקציה של שכבת-על של משאבים
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_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 OsuLoginServiceWifiResources
המודול לא כולל את הרכיבים הבאים, שנשארים חלק מ-build ה-AOSP של יצרן הציוד המקורי.
- רכיב מקורי ב-
wificondsystem/connectivity/wificond - ממשק
wificond(classes בחבילהandroid.net.wifi.nl80211, לדוגמה,WifiNl80211Manager) android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_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
- רכיבים שונים של המערכת
- שכבות HAL של Wi-Fi
wificondbouncycastleksoap2libnanohttpd
המודול הזה מתקשר עם המסגרת באמצעות @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, אפשר להמשיך להשתמש ב-Wi-Fi APIs באמצעות השלבים הבאים.@hide
כדי להסיר את הגבלות החשיפה שהוגדרו ל-
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חשוב.
גישה לממשקי API מוסתרים של 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", ], }
בדיקה
חבילת הבדיקות לתאימות של Android (CTS) מאמתת את היכולות של מודול ה-Wi-Fi על ידי הרצת קבוצה מקיפה של בדיקות CTS בכל גרסת מודול. אפשר גם להריץ את הבדיקות שמתוארות במאמר בדיקה, ניפוי באגים וכוונון של Wi-Fi.