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