وحدة 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، يتم تخزين بيان Overlay 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
يمكن لمصنعي المعدات الأصلية استخدام نماذج الأوامر للمساعدة في نقل التصحيحات الخاصة بهم من أدلة المشروع الأصلية إلى دليل المشروع الجديد.
نقل التصحيح من الأطر/القاعدة/واي فاي
إنشاء ملف التصحيح في الجذر / الإطارات / القاعدة / 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 الخاصة بشركة OEM.
- المكون الأصلي
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 (
OsuLoginGoogle.apk
) - APK الموارد (
ServiceWifiResourcesGoogle.apk
) - شهادات WFA
تبعيات الوحدة
تعتمد وحدة Wi-Fi على المكونات التالية.
- الاتصال
- الاتصالات الهاتفية
- مكتبات بروتو
- مكونات النظام المتنوعة
- شبكات WiFi
-
wificond
-
bouncycastle
-
ksoap2
-
libnanohttpd
تتفاعل هذه الوحدة مع إطار العمل باستخدام @SystemApi
المستقر فقط (بدون استخدام @hide
API) ويتم توقيعها باستخدام توقيع Google بدلاً من توقيع النظام الأساسي.
تخصيص
لا تدعم وحدة Wi-Fi التخصيص المباشر، ولكن يمكنك تخصيص التكوين باستخدام تراكبات موارد وقت التشغيل (RROs) أو تكوينات شركة الاتصالات.
الشكل 2. تخصيص وحدة Wi-Fi
- بالنسبة للتخصيصات الصغيرة، قم بتمكين أو تعطيل الإعدادات في
config
RRO. - لمزيد من التحكم، قم بتخصيص قيم التكوين لأي مفتاح تكوين مشغل شبكة يتم عرضه كـ
@SystemAPI
.
استخدام تراكبات موارد وقت التشغيل
يمكنك تخصيص وحدة Wi-Fi عن طريق تجاوز التكوينات الافتراضية باستخدام RROs. للحصول على قائمة بالتكوينات القابلة للتراكب، راجع 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
، يجب عليك تعيين تراكب APKS targetPackage
على com.google.android.wifi.resources
لتراكب تكوينات Wi-Fi بنجاح.
ترحيل تنسيق تخزين التكوين
يمكن لوحدة Wi-Fi تحليل تنسيق تخزين تكوين AOSP Wi-Fi فقط. إذا قمت مسبقًا بتعديل تنسيق تخزين تكوين 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 APIs باستخدام الخطوات التالية.
قم بإزالة قيود الرؤية المفروضة على
framework-wifi
علىpackages/modules/Wifi/framework/Android.bp
عن طريق تغيير سمةimpl_library_visibility
إلى public.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
قم بتغيير قاعدة الإنشاء للسماح بالوصول إلى المكتبة
@hide
Wi-Fi APIs. على سبيل المثال، ما يلي هو قاعدة بناء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 وتصحيح الأخطاء وضبطها .