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

يمكن للمصنّعين الأصليين للأجهزة استخدام نماذج الأوامر للمساعدة في نقل التصحيحات الخاصة بهم من أدلة المشروع الأصلية إلى دليل المشروع الجديد.

نقل رمز التصحيح من أُطر العمل/القاعدة/شبكة Wi-Fi

إنشاء ملف التصحيح في الجذر/frameworks/base/wifi

git format-patch -1 commit --stdout > patch-file.txt

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

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

نقل رمز التصحيح من إطار العمل/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

تطبيق رمزَي التصحيح على الحِزم/الوحدات/شبكة 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 بما في ذلك ما يلي.

  • حزمة تطوير البرامج (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
  • مكوّنات النظام المتنوّع
  • طبقة تجريد الأجهزة (HAL) لشبكة Wi-Fi
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

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

التخصيص

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

تخصيص Wi-Fi

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

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

  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