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

شکل 1. اجزا و معماری ماژول Wi-Fi
ماژول Wi-Fi مزایای زیر را ارائه میدهد.
کاربران نهایی از طریق بهروزرسانیهای ماژول، تجربه وایفای پایداری را در دستگاههای اندروید خود دریافت میکنند و مشکلات مربوط به قابلیت همکاری برطرف میشود.
توسعهدهندگان اپلیکیشن، کاهش پراکندگی پلتفرم را تجربه میکنند.
تولیدکنندگان اصلی تجهیزات (OEM) میتوانند الزامات اپراتورها را برآورده کنند و در عین حال هزینههای سفارشیسازیهای فردی را کاهش دهند (زیرا نیازی به پیادهسازیهای مختلف از الزامات یکسان به روشهای مختلف ندارند).
مرز ماژول برای اندروید ۱۲ و اندروید ۱۳
-
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/(در اندروید ۱۲ جدید است، فایل APK روی هم قرار گرفته در اینجا ذخیره میشود)-
res/(در اندروید ۱۱ جدید است، پیکربندیهای وایفای ازframeworks/base/core/res/resاستخراج شدهاند) -
AndroidManifest.xml -
Android.bp
-
-
WifiDialog/(اپلیکیشن جدید در اندروید ۱۳ برای اجرای دیالوگهای کاربر که توسط سرویس درخواست میشوند، در اینجا ذخیره میشود.)-
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) میتوانند از دستورات نمونه برای انتقال پچهای خود از دایرکتوریهای پروژه اصلی به دایرکتوری پروژه جدید استفاده کنند.
یک پچ را از frameworks/base/wifi منتقل کنید
تولید فایل پچ در root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txtاعمال فایل پچ به ریشه/بستهها/ماژولها/وایفای
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-commitgit add tests/git commit # Enter your commit message. Call this commit test-commit
تولید دو فایل پچ کامیت
git format-patch -1 service-commit --stdout > service-patch.txtgit format-patch -1 test-commit --stdout > test-patch.txt
اعمال دو وصله به بستهها/ماژولها/وایفای
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
تبدیل دو کامیت به یک کامیت
git rebase -i عملیات کامیت دوم را به squash تغییر دهید.
پیام کامیت را به صورت مناسب ویرایش کنید.
مرز ماژول برای اندروید ۱۱
سرویس 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
اندروید ۱۱ فایلها را جابجا نمیکند، اما نسخههای آینده ممکن است این کار را انجام دهند. برای کاهش زحمت مربوط به انتقال تغییرات مکان فایل، توصیه میکنیم تا حد امکان تغییرات را به AOSP منتقل کنید (پس از انتقال آنها به اندروید ۱۱ یا اصلاح افزونههای اختصاصی برای استفاده از APIهای رسمی اندروید یا افزونههای HAL فروشنده برای جدا کردن آنها از کد AOSP).
قالب ماژول
ماژول وایفای ( com.android.wifi ) با فرمت APEX است و برای دستگاههایی که اندروید ۱۱ یا بالاتر دارند در دسترس است. فایل APEX شامل اجزای زیر است.
- کتابخانه SDK (
framework-wifi.jar) - کتابخانه سرویس (
service-wifi.jar) - OsuLogin APK (
OsuLoginGoogle.apk) - APK منابع (
ServiceWifiResourcesGoogle.apk) - گواهینامههای WFA
وابستگیهای ماژول
ماژول وایفای به اجزای زیر بستگی دارد.
- اتصال
- تلفن
- کتابخانههای اولیه
- اجزای سیستم متفرقه
- HAL های وای فای
-
wificond -
bouncycastle -
ksoap2 -
libnanohttpd
این ماژول تنها با استفاده از @SystemApi پایدار (بدون استفاده از @hide API) با چارچوب تعامل میکند و به جای امضای پلتفرم، با امضای گوگل امضا شده است.
سفارشیسازی
ماژول وایفای از سفارشیسازی مستقیم پشتیبانی نمیکند، اما میتوانید پیکربندی را با استفاده از پوششهای منابع زمان اجرا (RRO) یا پیکربندیهای اپراتور، سفارشی کنید.

شکل 2. سفارشیسازی ماژول وایفای
- برای سفارشیسازیهای کوچک، تنظیمات را در
configRRO فعال یا غیرفعال کنید. - برای کنترل بیشتر، مقادیر پیکربندی را برای هر کلید پیکربندی حامل که به عنوان
@SystemAPIنمایش داده میشود، سفارشی کنید.
استفاده از همپوشانی منابع زمان اجرا
شما میتوانید ماژول وایفای را با لغو پیکربندیهای پیشفرض با استفاده از 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 است، شما باید targetPackage به APKS overlay را روی com.google.android.wifi.resources تنظیم کنید تا پیکربندیهای Wi-Fi با موفقیت روی هم قرار گیرند.
انتقال فرمت ذخیرهسازی پیکربندی
ماژول Wi-Fi فقط میتواند فرمت ذخیرهسازی پیکربندی Wi-Fi با فرمت AOSP را تجزیه و تحلیل کند. اگر قبلاً فرمت ذخیرهسازی پیکربندی Wi-Fi (که شامل لیست شبکههای ذخیره شده کاربر است) را تغییر دادهاید، هنگام ارتقاء دستگاه به هر نسخه اندرویدی که شامل ماژول Wi-Fi است، باید آن دادهها را به فرمت AOSP تبدیل کنید. قلابهای مورد نیاز برای این تبدیل در کلاس android.net.wifi.WifiMigration قرار دارند.
تبدیل فرمت را به روشهای زیر پیادهسازی کنید.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)توسط ماژول Wi-Fi فراخوانی میشود تا محتوای فایل اشتراکگذاریشدهی Wi-Fi را که به فرمت AOSP تبدیل شدهاند، بازیابی کند.
این فایلها قبلاً (در اندروید ۱۰) در پوشه
/data/misc/wifiدر دستگاه ذخیره میشدند.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)توسط ماژول Wi-Fi فراخوانی میشود تا محتوای فایل ذخیره شده مخصوص کاربر Wi-Fi را که به فرمت AOSP تبدیل شدهاند، بازیابی کند.
این فایلها قبلاً (در اندروید ۱۰) در پوشه
/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به public حذف کنید.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }قانون ساخت را تغییر دهید تا به کتابخانه اجازه دسترسی به APIهای Wi-Fi
@hideداده شود. برای مثال، قانون ساخت زیر برای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در لیستlibsقبل ازframeworkظاهر میشود. ترتیب وابستگیها در ویژگیlibsمهم است.
دسترسی به APIهای پنهان فریمورک
نمادهایی که با @hide در خارج از ماژول Wi-Fi حاشیهنویسی شدهاند، نمیتوانند توسط کد درون ماژول Wi-Fi قابل دسترسی باشند. دستگاههایی که ماژول Wi-Fi را شامل نمیشوند، میتوانند با ایجاد تغییرات زیر در frameworks/opt/net/wifi/service/Android.bp ، همچنان از APIهای خارجی @hide (به عنوان مثال، from framework.jar ) در service-wifi استفاده کنند.
در هر دو
wifi-service-pre-jarjarوservice-wifi، ویژگیsdk_versionرا بهcore_platformتغییر دهید.در هر دو
wifi-service-pre-jarjarوservice-wifi، به ویژگیlibsframeworkوandroid_system_server_stubs_currentرا اضافه کنید.تأیید کنید که نتیجه مشابه نمونه کد زیر است.
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) با اجرای مجموعهای جامع از تستهای CTS روی هر نسخه از ماژول، قابلیتهای ماژول Wi-Fi را تأیید میکند. همچنین میتوانید تستهای شرح داده شده در بخش «تست، اشکالزدایی و تنظیم Wi-Fi» را اجرا کنید.