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