Wi-Fi

מודול ה-Wi-Fi ניתן לעדכון, כלומר הוא יכול לקבל עדכונים לפונקציונליות מחוץ למחזור השחרור הרגיל של אנדרואיד. מודול זה מכיל את הרכיבים הבאים.

רכיבי מודול Wi-Fi

איור 1. רכיבים וארכיטקטורה של מודול Wi-Fi

מודול ה-Wi-Fi מספק את היתרונות הבאים.

  • משתמשי קצה מקבלים חוויית Wi-Fi עקבית בכל מכשירי אנדרואיד ותיקונים לבעיות יכולת פעולה הדדית באמצעות עדכוני מודול.

  • מפתחי אפליקציות מקבלים פיצול פלטפורמה מופחת.

  • יצרני ציוד מקורי יכולים למלא את דרישות הספק תוך הפחתת עלויות עבור התאמות אישיות בודדות (כיוון שהם לא צריכים יישומים שונים של אותן דרישות בדרכים שונות).

גבול מודול עבור אנדרואיד 12 ואנדרואיד 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/ (חדש באנדרואיד 12, מניפסט כיסוי APK מאוחסן כאן)
      • res/ (חדש באנדרואיד 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

יצרני OEM יכולים להשתמש בפקודות לדוגמה כדי לסייע בהעברת התיקונים שלהם מספריות הפרויקט המקוריות לספריית הפרויקט החדשה.

העברת תיקון ממסגרות/בסיס/wifi

יצירת קובץ התיקון ב-root/frameworks/base/wifi

git format-patch -1 commit --stdout > patch-file.txt

החלת קובץ התיקון לשורש/חבילות/מודולים/Wifi

git am -p2 --directory=framework/ patch-file.txt

העברת תיקון מ-frameworks/opt/net/wifi

כדי להעביר את התיקון מ- frameworks/opt/net/wifi , יש צורך בצעדים מורכבים מכיוון שההיררכיה של הספריות שונתה במהלך ההעברה.

ב- frameworks/opt/net/wifi , פצל את ה-commit לשני commits, אחד 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

יצירת שני קבצי commit patch

git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt

החלת שני התיקונים על חבילות/מודולים/Wifi

git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt

מעיכת שני המחויבות חזרה למחוייבות אחת

git rebase -i

שנה את פעולת ה-commit השני ל- squash .

ערוך את הודעת ההתחייבות לפי הצורך.

גבול מודול עבור אנדרואיד 11

שירות ה-Wi-Fi ממשיך לפעול בתוך תהליך שירות מערכת. מודול ה-Wi-Fi כולל את כל הקוד packages/modules/Wifi כולל הקוד הבא.

  • SDK ושיעורי שירות עבור WifiService , WifiP2pService , WifiAwareService , WifiScannerService ו- WifiRttService
  • OsuLogin
  • ServiceWifiResources

המודול אינו כולל את הרכיבים הבאים, שנותרו חלק מה-AOSP של ה-OEM.

  • רכיב מקורי 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

אנדרואיד 11 לא מעביר קבצים, אבל אולי מהדורות עתידיות. כדי לצמצם את המאמץ הכרוך בהעברת שינויים במיקום הקבצים, אנו ממליצים על כמה שיותר שינויים במעלה הזרם ל-AOSP (לאחר העברתם ל-Android 11 או עיבוד מחדש של הרחבות קנייניות לשימוש בממשקי API פורמליים של אנדרואיד או הרחבות HAL של ספקים כדי לנתק אותם מקוד AOSP.

פורמט מודול

מודול ה-Wi-Fi ( com.android.wifi ) הוא בפורמט APEX וזמין עבור מכשירים עם אנדרואיד 11 ומעלה. קובץ APEX כולל את הרכיבים הבאים.

  • ספריית SDK ( framework-wifi.jar )
  • ספריית שירותים ( service-wifi.jar )
  • OsuLogin APK ( OsuLoginGoogle.apk )
  • APK של משאבים ( ServiceWifiResourcesGoogle.apk )
  • תעודות WFA

תלות במודול

מודול ה-Wi-Fi תלוי ברכיבים הבאים.

  • קישוריות
  • טלפוניה
  • ספריות פרוטו
  • רכיבי מערכת שונים
  • WiFi HALs
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

מודול זה מקיים אינטראקציה עם המסגרת באמצעות @SystemApi יציב בלבד (ללא שימוש @hide API) והוא חתום בחתימת Google במקום בחתימת פלטפורמה.

התאמה אישית

מודול ה-Wi-Fi אינו תומך בהתאמה אישית ישירה, אך אתה יכול להתאים אישית את התצורה באמצעות שכבות על משאבי זמן ריצה (RRO) או תצורות ספק.

התאמה אישית של Wi-Fi

איור 2. התאמה אישית של מודול Wi-Fi

  • עבור התאמות אישיות קטנות, הפעל או השבת הגדרות config RRO .
  • לשליטה רבה יותר, התאם אישית ערכי תצורה עבור כל מפתח תצורת ספק שנחשף כ- @SystemAPI .

שימוש בשכבות-על של משאבי זמן ריצה

אתה יכול להתאים אישית את מודול ה-Wi-Fi על ידי ביטול תצורות ברירת המחדל באמצעות RROs. לרשימה של תצורות הניתנות לשכבה, עיין 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 , עליך להגדיר את השכבה APKS targetPackage ל- com.google.android.wifi.resources כדי לשכב את תצורות ה-Wi-Fi בהצלחה.

העברת פורמט אחסון של תצורה

מודול ה-Wi-Fi יכול לנתח רק את פורמט האחסון של תצורת Wi-Fi של AOSP. אם שינית בעבר את פורמט האחסון של תצורת ה-Wi-Fi (הכוללת את רשימת הרשתות השמורות של המשתמש), עליך להמיר נתונים אלה לפורמט AOSP בעת שדרוג מכשיר לכל מהדורת אנדרואיד הכוללת את מודול ה-Wi-Fi. הווים הדרושים להמרה זו נמצאים במחלקת android.net.wifi.WifiMigration .

יישם את המרת הפורמט בשיטות הבאות.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • מופעל על ידי מודול Wi-Fi כדי לאחזר את תוכן קובץ החנות המשותפת של Wi-Fi שהומר לפורמט AOSP.

    • קבצים אלה אוחסנו בעבר (באנדרואיד 10) בתיקייה /data/misc/wifi במכשיר.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • מופעל על ידי מודול Wi-Fi כדי לאחזר תוכן קובץ חנות ספציפי למשתמש של Wi-Fi שהומר לפורמט AOSP.

    • קבצים אלה אוחסנו בעבר (באנדרואיד 10) בתיקיית /data/misc_ce/<userId>/wifi במכשיר.

גישה לממשקי API נסתרים של Wi-Fi

סמלים (מחלקות, שיטות, שדות וכו') המסומנים ב- @hide במודול ה-Wi-Fi אינם חלק ממשטח ה-API הציבורי שלו ולא ניתן לגשת אליהם במכשירים שבהם המודול מותקן. מכשירים שאינם כוללים את מודול ה-Wi-Fi יכולים להמשיך להשתמש בממשקי ה-API @hide Wi-Fi באמצעות השלבים הבאים.

  1. הסר את מגבלות החשיפה המוטלות על framework-wifi ב- packages/modules/Wifi/framework/Android.bp על ידי שינוי התכונה impl_library_visibility ל-public.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. שנה את כלל הבנייה כדי לאפשר גישה לספרייה @hide Wi-Fi APIs. לדוגמה, להלן כלל בנייה עבור 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",
        ],
    }
    
  3. ודא ש- framework-wifi.impl מופיע לפני framework ברשימת ה- libs . סדר התלות בתכונת libs הוא משמעותי.

גישה לממשקי API של מסגרת נסתרים

לא ניתן לגשת לסמלים המסומנים ב- @hide מחוץ למודול ה-Wi-Fi באמצעות קוד בתוך מודול ה-Wi-Fi. מכשירים שאינם כוללים את מודול ה-Wi-Fi יכולים להמשיך להשתמש @hide APIs חיצוניים (לדוגמה, מ- framework.jar ) ב- service-wifi על ידי ביצוע השינויים הבאים ל- frameworks/opt/net/wifi/service/Android.bp .

  1. גם ב- wifi-service-pre-jarjar וגם service-wifi , שנה את התכונה sdk_version ל- core_platform .

  2. גם ב- wifi-service-pre-jarjar וגם service-wifi , הוסף framework ואת android_system_server_stubs_current לתכונה libs .

  3. ודא שהתוצאה דומה לדוגמת הקוד הבאה.

    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 Compatibility Test Suite (CTS) מאמת את הפונקציונליות של מודול ה-Wi-Fi על ידי הפעלת קבוצה מקיפה של בדיקות CTS בכל מהדורת מודול. אתה יכול גם להפעיל את הבדיקות המתוארות בבדיקה, איתור באגים וכוונון Wi-Fi .