מודול ה-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, לדוגמה,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
המודול לא כולל את הרכיבים הבאים, שנשארים חלק מהגרסה של AOSP של יצרן ה-OEM.
- רכיב מקורי ב-
system/connectivity/wificondwificond - ממשק
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
- רכיבים שונים של המערכת
- Wi-Fi HALs
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, אפשר להמשיך להשתמש ב-@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.