وای فای

ماژول Wi-Fi قابل به‌روزرسانی است، به این معنی که می‌تواند به‌روزرسانی‌های عملکرد را خارج از چرخه انتشار عادی اندروید دریافت کند. این ماژول شامل اجزای زیر می باشد.

اجزای ماژول Wi-Fi

شکل 1. اجزای ماژول وای فای و معماری

ماژول Wi-Fi مزایای زیر را ارائه می دهد.

  • کاربران نهایی از طریق به‌روزرسانی‌های ماژول، یک تجربه Wi-Fi ثابت در سراسر دستگاه‌های Android دریافت می‌کنند و مشکلات قابلیت همکاری را برطرف می‌کنند.

  • توسعه‌دهندگان برنامه‌ها از تقسیم‌بندی پلتفرم کمتری برخوردار می‌شوند.

  • OEM ها می توانند الزامات حامل را برآورده کنند و در عین حال هزینه های شخصی سازی های فردی را نیز کاهش دهند (زیرا آنها به پیاده سازی های متفاوتی از الزامات یکسان به روش های مختلف نیاز ندارند).

مرز ماژول برای 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، مانیفست Overlay 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 )
  • نمونه برنامه Resource Overlay
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

OEM ها می توانند از دستورات نمونه برای کمک به انتقال وصله های خود از دایرکتوری های پروژه اصلی به دایرکتوری پروژه جدید استفاده کنند.

انتقال یک پچ از فریمورک/پایه/فای

تولید فایل پچ در 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

انتقال وصله از چارچوب/opt/net/wifi

برای انتقال وصله از frameworks/opt/net/wifi ، مراحل پیچیده ای لازم است زیرا سلسله مراتب دایرکتوری در حین انتقال تغییر کرده است.

در frameworks/opt/net/wifi ، commit را به دو commit تقسیم کنید، یکی برای service/ و دیگری برای tests/ .

مهاجرت HEAD commit

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

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

اعمال دو وصله روی بسته ها / ماژول ها / وای فای

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

له کردن این دو متعهد به یک کامیت باز می گردد

git rebase -i

عملیات commit دوم را به squash تغییر دهید.

پیام commit را در صورت لزوم ویرایش کنید.

مرز ماژول برای اندروید 11

سرویس Wi-Fi در داخل فرآیند System Service به کار خود ادامه می دهد. ماژول 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های رسمی 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 به اجزای زیر بستگی دارد.

  • قابلیت اتصال
  • تلفن
  • کتابخانه های اولیه
  • اجزای سیستم متفرقه
  • هال های وای فای
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

این ماژول تنها با استفاده از @SystemApi (بدون استفاده از @hide API) با چارچوب تعامل دارد و به جای امضای پلتفرم با یک امضای Google امضا می‌شود.

سفارشی کردن

ماژول Wi-Fi از سفارشی‌سازی مستقیم پشتیبانی نمی‌کند، اما می‌توانید پیکربندی را با استفاده از پوشش‌های منابع زمان اجرا (RRO) یا پیکربندی‌های حامل سفارشی کنید.

سفارشی سازی Wi-Fi

شکل 2. سفارشی سازی ماژول Wi-Fi

  • برای سفارشی‌سازی‌های کوچک، تنظیمات را در config RRO فعال یا غیرفعال کنید.
  • برای کنترل بیشتر، مقادیر پیکربندی را برای هر کلید پیکربندی حاملی که به‌عنوان @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 ، باید همپوشانی APKS targetPackage روی com.google.android.wifi.resources تنظیم کنید تا پیکربندی‌های Wi-Fi با موفقیت پوشش داده شود.

انتقال فرمت ذخیره سازی پیکربندی

ماژول Wi-Fi فقط می تواند قالب ذخیره سازی پیکربندی Wi-Fi AOSP را تجزیه کند. اگر قبلاً قالب ذخیره‌سازی پیکربندی Wi-Fi را تغییر داده‌اید (که شامل فهرست شبکه ذخیره‌شده کاربر می‌شود)، هنگام ارتقای دستگاه به هر نسخه Android که شامل ماژول Wi-Fi است، باید آن داده‌ها را به فرمت AOSP تبدیل کنید. قلاب های مورد نیاز برای این تبدیل در کلاس 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 نیستند، می‌توانند با استفاده از مراحل زیر به استفاده از @hide Wi-Fi API‌ها ادامه دهند.

  1. با تغییر ویژگی impl_library_visibility به public، محدودیت‌های دید اعمال شده بر روی framework-wifi در packages/modules/Wifi/framework/Android.bp حذف کنید.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. برای اجازه دسترسی به کتابخانه @hide Wi-Fi APIها، قانون ساخت را تغییر دهید. برای مثال، زیر یک قانون ساخت برای 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 نیستند، می‌توانند با انجام تغییرات زیر در frameworks/opt/net/wifi/service/Android.bp @hide APIهای خارجی (به عنوان مثال، از framework.jar ) در service-wifi استفاده کنند. frameworks/opt/net/wifi/service/Android.bp .

  1. هم در wifi-service-pre-jarjar و هم service-wifi ، ویژگی sdk_version را به core_platform تغییر دهید.

  2. در wifi 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",
        ],
    }
    

آزمایش کردن

مجموعه تست سازگاری اندروید (CTS) عملکرد ماژول Wi-Fi را با اجرای مجموعه ای جامع از تست های CTS در هر نسخه ماژول تأیید می کند. همچنین می‌توانید آزمایش‌های شرح داده شده در تست، اشکال‌زدایی و تنظیم Wi-Fi را اجرا کنید.