ويمكن تحديث وحدة Wi-Fi، ما يعني أنّه يمكنها تلقّي تحديثات بشأن الإمكانات خارج دورة إصدار Android العادية. تحتوي هذه الوحدة على المكوّنات التالية.
الشكل 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 التخصيص المباشر، ولكن يمكنك تخصيص الإعدادات باستخدام تراكبات موارد وقت التشغيل أو إعدادات مشغّل شبكة الجوّال.
الشكل 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 باتّباع الخطوات التالية.
أزِل القيود المفروضة على مستوى عرض
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. ], ... }
غيِّر قاعدة الإنشاء للسماح بالوصول إلى مكتبة واجهات برمجة تطبيقات
@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", ], }
تأكَّد من ظهور
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
.
في كلّ من
wifi-service-pre-jarjar
وservice-wifi
، غيِّر السمةsdk_version
إلىcore_platform
.في كلّ من
wifi-service-pre-jarjar
وservice-wifi
، أضِفframework
وandroid_system_server_stubs_current
إلى السمةlibs
.تأكَّد من أنّ النتيجة مشابهة لنموذج الرمز التالي.
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) لنظام التشغيل Android من إمكانات وحدة Wi-Fi من خلال إجراء مجموعة شاملة من اختبارات CTS على كل إصدار من الوحدات. يمكنك أيضًا إجراء الاختبارات الموضّحة في مقالة اختبار شبكة Wi-Fi وتصحيح أخطائها وتحسينها.