ماژول 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
یک وصله را از Frameworks/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) یا پیکربندیهای حامل سفارشی کنید.
شکل 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ها ادامه دهند.
با تغییر ویژگی
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. ], ... }
برای اجازه دسترسی به کتابخانه
@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", ], }
اطمینان حاصل کنید که
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
.
هم در
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", ], }
تست کردن
مجموعه تست سازگاری اندروید (CTS) قابلیتهای ماژول Wi-Fi را با اجرای مجموعهای جامع از تستهای CTS در هر نسخه منتشر شده تأیید میکند. همچنین میتوانید آزمایشهای توضیحدادهشده در تست، اشکالزدایی، و تنظیم Wi-Fi را اجرا کنید.