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)
  • تطبيق Sample Resource Overlay
  • 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

تطبيق الرمزين التصحيحيين على الحِزم/الوحدات/شبكة 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 الرسمية أو إضافات طبقة تجريد الأجهزة الخاصة بالمورّدين لفصلها عن رمز AOSP.

تنسيق الوحدة

وحدة Wi-Fi (com.android.wifi) بتنسيق APEX ومتاحة للأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث. يتضمّن ملف 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)، ويتم توقيعه باستخدام توقيع Google بدلاً من توقيع النظام الأساسي.

التخصيص

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

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

الشكل 2. تخصيص وحدة Wi-Fi

  • لإجراء تعديلات بسيطة، فعِّل الإعدادات أو أوقِفها في RRO config.
  • للحصول على المزيد من التحكّم، يمكنك تخصيص قيم الإعدادات لأي مفتاح إعدادات مشغّل شبكة جوّال معروض على أنّه @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، عليك ضبط حِزم 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. غيِّر قاعدة الإنشاء للسماح بالوصول إلى مكتبة واجهات برمجة تطبيقات @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 مواصلة استخدام واجهات برمجة التطبيقات الخارجية @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",
        ],
    }
    

الاختبار

تتحقّق &quot;مجموعة اختبار التوافق&quot; (CTS) لنظام التشغيل Android من إمكانات وحدة Wi-Fi من خلال إجراء مجموعة شاملة من اختبارات CTS على كل إصدار من الوحدات. يمكنك أيضًا إجراء الاختبارات الموضّحة في مقالة اختبار شبكة Wi-Fi وتصحيح أخطائها وتحسينها.