يمكن تحديث وحدة 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
)- مثال على تطبيق "تراكب الموارد"
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) أو إعدادات مشغّل شبكة الجوّال.
الشكل 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 باتّباع الخطوات التالية.
يمكنك إزالة القيود المفروضة على إذن الوصول التي تم فرضها على
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. ], ... }
يمكنك تغيير قاعدة الإصدار للسماح للمكتبة بالوصول إلى واجهات برمجة تطبيقات 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", ], }
تأكَّد من أنّ
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", ], }
الاختبار
تتحقّق مجموعة اختبار التوافق مع Android (CTS) من قدرات ملف تعريف برمجي لوحدة Wi-Fi من خلال تنفيذ مجموعة شاملة من اختبارات CTS على كل إصدار من إصدارات ملف التعريف. يمكنك أيضًا إجراء الاختبارات الموضّحة في مقالة اختبار شبكة Wi-Fi وتصحيحها وضبطها.