وحدة 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
) - نموذج لتطبيق Resource Overlay
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
يمكن لمصنعي المعدات الأصلية استخدام نماذج الأوامر للمساعدة في نقل تصحيحاتهم من أدلة المشروع الأصلية إلى دليل المشروع الجديد.
نقل تصحيح من أطر عمل / قاعدة / واي فاي
إنشاء ملف التصحيح في root / framework / 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
) - OsuLogin APK (
OsuLoginGoogle.apk
) - مورد APK (
ServiceWifiResourcesGoogle.apk
) - شهادات WFA
تبعيات الوحدة النمطية
تعتمد وحدة Wi-Fi على المكونات التالية.
- الاتصال
- مهاتفة
- مكتبات بروتو
- مكونات النظام المتنوعة
- شبكات WiFi HAL
-
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 ليست جزءًا من سطح API العام ولا يمكن الوصول إليها على الأجهزة التي تم تثبيت الوحدة النمطية بها. يمكن للأجهزة التي لا تتضمن وحدة Wi-Fi الاستمرار في استخدام @hide
Wi-Fi APIs باتباع الخطوات التالية.
قم بإزالة قيود الرؤية الموضوعة على
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 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 Compatibility Test Suite (CTS) من وظائف وحدة Wi-Fi عن طريق تشغيل مجموعة شاملة من اختبارات CTS في كل إصدار للوحدة. يمكنك أيضًا إجراء الاختبارات الموضحة في اختبار Wi-Fi وتصحيح الأخطاء وضبطها .