מודול ה-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-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
החלת שני התיקונים על packages/modules/Wifi
git am service-patch.txt
git 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/wificond
wificond
- ממשק
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. ], ... }
משנים את כלל הבנייה כדי לאפשר גישה לספריית
@hide
Wi-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.