Wi-Fi

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

اجزای واحد Wi-Fi

شکل ۱. معماری و اجزای واحد Wi-Fi

واحد Wi-Fi مزایای زیر را ارائه می‌دهد.

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

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

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

مرز واحد برای 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 جدید است، مانیفست APK رونهاد در اینجا ذخیره می‌شود)
      • res/ (جدید در Android 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

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

انتقال وصله از 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-commit
git add tests/
git commit # Enter your commit message. Call this commit test-commit

درحال تولید کردن دو فایل وصله تعهد

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

اعمال دو وصله به packages/modules/Wifi

git am service-patch.txt
git 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
  • OsuLogin
  • ServiceWifiResources

این واحد شامل مؤلفه‌های زیر نمی‌شود، که همچنان بخشی از ساخت AOSP سازنده تجهیزات اصلی باقی می‌مانند.

  • ‫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

‫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
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

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

سفارشی‌سازی

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

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

شکل ۲. سفارشی‌سازی واحد Wi-Fi

  • برای سفارشی‌سازی‌های کوچک، تنظیمات را در config RRO فعال یا غیرفعال کنید.
  • برای کنترل بیشتر، مقادیر پیکربندی را برای هر کلید پیکربندی شرکت مخابراتی نمایان‌شده به‌عنوان @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 ادامه دهند.

  1. محدودیت‌های رؤیت‌پذیری اعمال‌شده بر 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.
        ],
        ...
    }
    
  2. قانون ساخت را تغییر دهید تا به کتابخانه اجازه دسترسی به @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",
        ],
    }
    
  3. مطمئن شوید 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 استفاده کنند.

  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» (CTS) قابلیت‌های واحد Wi-Fi را با اجرای مجموعه جامعی از آزمایش‌های CTS در هر نسخه واحد تأیید می‌کند. همچنین می‌توانید آزمایش‌های شرح‌داده‌شده در آزمایش، اشکال‌زدایی، و تنظیم Wi-Fi را اجرا کنید.