واحد Wi-Fi قابلبهروزرسانی است، یعنی میتواند بهروزرسانیهای مربوط به قابلیتها را خارج از چرخه انتشار عادی Android دریافت کند. این واحد شامل مؤلفههای زیر است.
شکل ۱. معماری و اجزای واحد Wi-Fi
واحد Wi-Fi مزایای زیر را ارائه میدهد.
کاربران نهایی تجربه Wi-Fi ثابتی در دستگاههای Android دریافت میکنند و مشکلات قابلیت همکاری ازطریق بهروزرسانیهای واحد برطرف میشود.
توسعهدهندگان برنامه با تکهتکه شدن کمتر پلاتفرم مواجه میشوند.
تولیدکنندگان تجهیزات اصلی میتوانند الزامات شرکت مخابراتی را برآورده کنند و درعینحال هزینههای سفارشیسازیهای فردی را کاهش دهند (زیرا نیازی به پیادهسازیهای مختلف از الزامات یکسان به روشهای مختلف ندارند).
مرز واحد برای Android 12 و Android 13
packages/modules/Wififrameworkjava/-
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.bpproguard.flagswifi.rc
-
OsuLogin/(فایل ازframeworks/base/packages/OsuLogin) ServiceResources/(در Android 12 جدید است، مانیفست APK رونهاد در اینجا ذخیره میشود)res/(جدید در Android 11، پیکربندیهای Wi-Fi استخراجشده ازframeworks/base/core/res/res)AndroidManifest.xmlAndroid.bp
WifiDialog/(جدید در Android 13، برنامه برای راهاندازی کادرهای گفتگوی کاربر که سرویس درخواست کرده است در اینجا ذخیره میشود.)src/com/android/wifi/dialog(حاوی «فعالیتی» است که کادرهای گفتگو از آن راهاندازی میشوند)
AndroidManifest.xmlAndroid.bp
دایرکتوریهای قبلی همچنین حاوی کدی است که خارج از عنصر سیستم مدولار و در مکان فعلی آن باقی میماند، برای مثال:
-
wificond interface(کلاسهای موجود در بستهandroid.net.wifi.nl80211، برای مثال،WifiNl80211Manager) - برنامه نمونه رونهاد منبع
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
تولیدکنندگان تجهیزات اصلی میتوانند از فرمانهای نمونه برای کمک به انتقال وصلههای خود از دایرکتوریهای پروژه اصلی به دایرکتوری پروژه جدید استفاده کنند.
انتقال وصله از frameworks/base/wifi
درحال تولید فایل وصله در 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، تعهد را به دو تعهد تقسیم کنید، یکی برای
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
اعمال دو وصله به packages/modules/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
فشرده کردن دو تعهد به یک تعهد
git rebase -iعملکرد تعهد دوم را به squash تغییر دهید.
پیام تعهد را بهصورت مناسب ویرایش کنید.
مرز واحد برای Android 11
سرویس Wi-Fi همچنان در فرایند «سرویس سیستم» اجرا میشود. واحد Wi-Fi
شامل همه کدها در packages/modules/Wifi ازجمله موارد زیر است.
- کیت توسعه نرمافزار و کلاسهای سرویس برای
WifiService،WifiP2pService،WifiAwareService،WifiScannerService، وWifiRttService OsuLoginServiceWifiResources
این واحد شامل مؤلفههای زیر نمیشود، که همچنان بخشی از ساخت AOSP سازنده تجهیزات اصلی باقی میمانند.
-
wificondعنصر بومی درsystem/connectivity/wificond -
wificondمیانای (کلاسهای بستهandroid.net.wifi.nl80211، برای مثال،WifiNl80211Manager) android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 فایلها را منتقل نمیکند، اما نسخههای آینده ممکن است این کار را انجام دهند. برای کاهش تلاش موردنیاز برای انتقال تغییرات مکان فایل، توصیه میکنیم تا حد امکان تغییرات را به AOSP منتقل کنید (پساز انتقال آنها به Android 11 یا بازسازی افزونههای اختصاصی برای استفاده از میاناهای برنامهسازی کاربردی رسمی Android یا افزونههای لایه انتزاع سختافزار فروشنده برای جدا کردن آنها از کد AOSP).
قالب واحد
واحد Wi-Fi (com.android.wifi) در قالب
APEX است و برای دستگاههای
دارای Android 11 یا بالاتر دردسترس است. فایل APEX شامل
اجزای زیر است.
- کتابخانه کیت توسعه نرمافزار (
framework-wifi.jar) - کتابخانه سرویس (
service-wifi.jar) - فایل OsuLogin APK (
OsuLoginGoogle.apk) - فایل APK منبع (
ServiceWifiResourcesGoogle.apk) - گواهینامههای WFA
وابستگیهای واحد
واحد Wi-Fi به مؤلفههای زیر بستگی دارد.
- اتصالپذیری
- تلفن
- کتابخانههای Proto
- اجزای متفرقه سیستم
- Wi-Fi HALs
wificondbouncycastleksoap2libnanohttpd
این واحد فقط بااستفاده از @SystemApi پایدار (بدون استفاده از میانای برنامهسازی کاربردی @hide) با چارچوب تعامل دارد و بهجای امضای پلاتفرم، با امضای Google امضا شده است.
سفارشیسازی
واحد Wi-Fi از سفارشیسازی مستقیم پشتیبانی نمیکند، اما میتوانید پیکربندی را بااستفاده از رونهادهای منبع زمان اجرا (RRO) یا پیکربندیهای شرکت مخابراتی سفارشیسازی کنید.
شکل ۲. سفارشیسازی واحد Wi-Fi
- برای سفارشیسازیهای کوچک، تنظیمات را در
configRRO فعال یا غیرفعال کنید. - برای کنترل بیشتر، مقادیر پیکربندی را برای هر کلید پیکربندی شرکت مخابراتی
نمایانشده بهعنوان
@SystemAPIسفارشیسازی کنید.
استفاده از رونهادهای منبع زمان اجرا
میتوانید با لغو پیکربندیهای پیشفرض بااستفاده از «همپوشانی منبع زمان اجرا»، واحد Wi-Fi را سفارشیسازی کنید. برای مشاهده فهرست پیکربندیهای رونهادپذیر، به
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 فایلهای APK رونهاد را روی 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 تبدیل شده است فراخوانی میشود.
این فایلها قبلاً (در Android 10) در پوشه
/data/misc/wifiدر دستگاه ذخیره شدهاند.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)توسط واحد Wi-Fi فراخوانده میشود تا محتوای فایل فروشگاه مختص کاربر Wi-Fi را که به قالب AOSP تبدیل شده است بازیابی کند.
این فایلها قبلاً (در Android 10) در پوشه
/data/misc_ce/<userId>/wifiدر دستگاه ذخیره شدهاند.
دسترسی به میاناهای برنامهسازی کاربردی Wi-Fi پنهان
نمادها (کلاسها، روشها، فیلدها، و غیره) که با @hide در ماژول Wi-Fi حاشیهنویسی شدهاند، بخشی از سطح میانای برنامهسازی کاربردی عمومی آن نیستند و در دستگاههایی که این ماژول را نصب کردهاند قابلدسترسی نیستند. دستگاههایی که واحد Wi-Fi ندارند میتوانند بااستفاده از مراحل زیر به استفاده از @hide Wi-Fi APIs ادامه دهند.
محدودیتهای رؤیتپذیری اعمالشده بر
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. ], ... }قانون ساخت را تغییر دهید تا به کتابخانه اجازه دسترسی به
@hideمیاناهای برنامهسازی کاربردی Wi-Fi داده شود. برای مثال، در زیر قانون ساخت برای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مهم است.
دسترسی به میاناهای برنامهسازی کاربردی چارچوب پنهان
کدهای نمادهای حاشیهنویسیشده با @hide در خارج از واحد Wi-Fi نمیتوانند به
کدهای درون واحد Wi-Fi دسترسی داشته باشند. دستگاههایی که واحد Wi-Fi ندارند میتوانند با ایجاد تغییرات زیر در frameworks/opt/net/wifi/service/Android.bp، همچنان از @hide میانای برنامهسازی کاربردی خارجی (برای مثال، از framework.jar) در service-wifi استفاده کنند.
در هر دو
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 را با اجرای مجموعه جامعی از آزمایشهای CTS در هر نسخه واحد تأیید میکند. همچنین میتوانید آزمایشهای شرحدادهشده در آزمایش، اشکالزدایی، و تنظیم Wi-Fi را اجرا کنید.