מודול ה-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/Wi-Fi
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
המודול לא כולל את הרכיבים הבאים, שנשארים חלק מיצרן ה-OEM גרסת build של AOSP.
- רכיב מקורי של
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
יציב בלבד (לא
@hide
שימוש ב-API) והוא חתום בחתימת 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 יכול לנתח רק את פורמט האחסון של הגדרות ה-AOSP של Wi-Fi. אם המיקום
ששינית בעבר את פורמט האחסון של תצורת 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 של framework נסתר
אי אפשר לגשת לסמלים עם הערות @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 של מודול ה-Wi-Fi. יכולות על ידי הרצת קבוצה מקיפה של בדיקות CTS בכל מודול גרסה חדשה. אפשר גם להריץ את הבדיקות שמתוארות בקטע בדיקה, ניפוי באגים וכוונון Wi-Fi.