מודול ה-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
(כיתות בחבילהandroid.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-commit
git add tests/
git commit # Enter your commit message. Call this commit test-commit
יצירת שני קובצי תיקון של השמירה
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
החלת שני התיקונים על חבילות/מודולים/Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
איך מאחדים את שני השמירות לשמירה אחת
git rebase -i
משנים את הפעולה של השמירה השנייה ל-squash
.
עורכים את הודעת ה-commit לפי הצורך.
גבולות המודול ב-Android 11
שירות ה-Wi-Fi ממשיך לפעול בתוך תהליך שירות המערכת. מודול ה-Wi-Fi כולל את כל הקוד ב-packages/modules/Wifi
, כולל הקוד הבא.
- SDK וסיווגים של שירותים עבור
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
ו-WifiRttService
OsuLogin
ServiceWifiResources
המודול לא כולל את הרכיבים הבאים, שנותרים חלק מ-AOSP build של היצרן.
- רכיב מקורי של
wificond
ב-system/connectivity/wificond
- ממשק
wificond
(כיתות בחבילה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
) - OsuLogin APK (
OsuLoginGoogle.apk
) - קובץ APK של משאב (
ServiceWifiResourcesGoogle.apk
) - אישורי WFA
יחסי תלות בין מודולים
מודול ה-Wi-Fi תלוי ברכיבים הבאים.
- קישוריות
- טלפוניה
- ספריות Proto
- רכיבי מערכת שונים
- ממשקי HAL ל-Wi-Fi
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 מוסתרים
סמלים (כיתות, שיטות, שדות וכו') עם הערה @hide
במודול ה-Wi-Fi לא נכללים בממשק ה-API הציבורי שלו, ואי אפשר לגשת אליהם במכשירים שבהם המודול מותקן. במכשירים שלא כוללים את מודול ה-Wi-Fi אפשר להמשיך להשתמש בממשקי ה-API של Wi-Fi @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. ], ... }
משנים את כלל ה-build כדי לאפשר גישה לספרייה
@hide
Wi-Fi APIs. לדוגמה, הקוד הבא הוא כלל build ל-java_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
כדי לאפשר ל-
foo-lib
גישה לספרייה, משנים את כלל ה-build באופן הבא:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
מוודאים ש-
framework-wifi.impl
מופיע לפניframework
ברשימה שלlibs
. סדר התלות במאפייןlibs
הוא משמעותי.
גישה לממשקי API מוסתרים של מסגרות
לא ניתן לגשת לסמלים עם הערה @hide
מחוץ למודול ה-Wi-Fi באמצעות קוד בתוך מודול ה-Wi-Fi. במכשירים שלא כוללים את מודול ה-Wi-Fi, אפשר להמשיך להשתמש ב-@hide
ממשקי API חיצוניים (לדוגמה, מ-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.