Wi-Fi

يمكن تحديث وحدة Wi-Fi، ما يعني أنّه يمكنها تلقّي تحديثات للميزات خارج دورة إصدار Android العادية. تحتوي هذه الوحدة على المكونات التالية:

مكونات وحدة Wi-Fi

الشكل 1: مكونات وحدة 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

تطبيق ملف التصحيح على الجذر/الحزم/الوحدات/شبكة Wifi

git am -p2 --directory=framework/ patch-file.txt

نقل تصحيح من frameworks/opt/net/wifi

لنقل التصحيح من frameworks/opt/net/wifi، نحتاج إلى خطوات معقدة لأن التسلسل الهرمي للدليل قد تم تغييره أثناء عملية النقل.

في frameworks/opt/net/wifi، قسِّم عملية الإضافة إلى عمليتَي إضافة، واحدة لملف service/ وأخرى لملف tests/.

نقل بيانات العميل الرئيسي

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

تطبيق الرموز الإصلاحية على الحِزم/الوحدات/Wi-Fi

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، بما في ذلك ما يلي:

  • فئات حزمة تطوير البرامج (SDK) وخدمات 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 الرسمية أو الإضافات HAL الخاصة بالمورّدين لفصلها عن رمز AOSP.

تنسيق الوحدة

وحدة Wi-Fi (com.android.wifi) بتنسيق APEX وهي متاحة للأجهزة التي تعمل بنظام التشغيل Android 11 أو إصدار أحدث. يتضمّن ملف APEX المكوّنات التالية.

  • مكتبة حزمة تطوير البرامج (SDK) (framework-wifi.jar)
  • مكتبة الخدمات (service-wifi.jar)
  • حزمة APK الخاصة بتطبيق OsuLogin (OsuLoginGoogle.apk)
  • حزمة APK للموارد (ServiceWifiResourcesGoogle.apk)
  • شهادات WFA

تبعيات الوحدة

تعتمد وحدة Wi-Fi على المكوّنات التالية.

  • إمكانية الاتصال
  • الاتصالات الهاتفية
  • مكتبات Proto
  • مكونات النظام الأخرى
  • واجهات برمجة التطبيقات لشبكة Wi-Fi
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

تتفاعل هذه الوحدة مع الإطار باستخدام @SystemApi الثابت فقط (بدون استخدام @hide API) ويتم توقيعها بتوقيع Google بدلاً من توقيع منصّة.

التخصيص

لا تتيح وحدة Wi-Fi التخصيص المباشر، ولكن يمكنك تخصيص الإعدادات باستخدام عمليات تراكب موارد وقت التشغيل (RRO) أو إعدادات مشغّل شبكة الجوّال.

تخصيص شبكة Wi-Fi

الشكل 2. تخصيص وحدة 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، عليك ضبط ملف APK المتراكب targetPackage على com.google.android.wifi.resources لكي يتمّ تراكب إعدادات Wi-Fi بنجاح.

نقل تنسيق تخزين الإعدادات

لا يمكن لوحدة Wi-Fi تحليل تنسيق تخزين إعدادات Wi-Fi في AOSP إلا. إذا سبق أن عدّلت تنسيق تخزين إعدادات Wi-Fi (الذي يشمل قائمة الشبكات المحفوظة للمستخدم)، يجب تحويل هذه البيانات إلى تنسيق AOSP عند ترقية جهاز إلى أي إصدار من Android يتضمّن وحدة Wi-Fi. إنّ العناصر التي تحتاجها هذه الإحالة الناجحة متوفّرة في فئة 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 باتّباع الخطوات التالية.

  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. يمكنك تغيير قاعدة الإصدار للسماح للمكتبة بالوصول إلى واجهات برمجة تطبيقات 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 يظهر قبل framework في قائمة libs. إنّ ترتيب التبعيات في سمة libs مهم.

الوصول إلى واجهات برمجة تطبيقات الإطارات المخفية

لا يمكن الوصول إلى الرموز التي تمّت إضافة تعليقات توضيحية لها باستخدام @hide خارج وحدة Wi-Fi باستخدام رمز ضمن وحدة Wi-Fi. بالنسبة إلى الأجهزة التي لا تتضمّن وحدة Wi-Fi، يمكنها مواصلة استخدام واجهات برمجة التطبيقات الخارجية @hide (مثلاً من framework.jar) في service-wifi من خلال إجراء التعديلات التالية على frameworks/opt/net/wifi/service/Android.bp.

  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 وتصحيحها وضبطها.