وای فای

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

اجزای ماژول وای فای

شکل 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-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

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

git am service-patch.txt
git 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. سفارشی‌سازی ماژول وای‌فای

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

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

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

  2. در هر دو wifi-service-pre-jarjar و service-wifi ، به ویژگی libs framework و android_system_server_stubs_current را اضافه کنید.

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