מודול ה-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 לא מעבירה קבצים, אבל יכול להיות שגרסאות עתידיות. כדי לצמצם את המאמץ שכרוך בניוד שינויים במיקום הקבצים, אנחנו ממליצים לבצע כמה שיותר שינויים ב-upstream ל-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
המודול הזה מקיים אינטראקציה עם ה-framework באמצעות שימוש יציב בלבד ב-@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 מוסתרים
סמלים (מחלקות, methods, שדות וכו') עם הערות @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.