واي فاي

وحدة Wi-Fi قابلة للتحديث ، مما يعني أنه يمكنها تلقي تحديثات للوظائف خارج دورة إصدار Android العادية. تحتوي هذه الوحدة على المكونات التالية.

مكونات وحدة Wi-Fi

الشكل 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) أو تكوينات الناقل.

تخصيص Wi-Fi

الشكل 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 باتباع الخطوات التالية.

  1. قم بإزالة قيود الرؤية الموضوعة على 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.
        ],
        ...
    }
    
  2. قم بتغيير قاعدة الإنشاء للسماح بالوصول إلى المكتبة @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",
        ],
    }
    
  3. تأكد من ظهور 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 .

  1. في كل wifi-service-pre-jarjar و service-wifi ، قم بتغيير سمة sdk_version إلى core_platform .

  2. في كل wifi-service-pre-jarjar و service-wifi ، أضف framework و android_system_server_stubs_current إلى سمة libs .

  3. تحقق من أن النتيجة مشابهة لعينة التعليمات البرمجية التالية.

    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 وتصحيح الأخطاء وضبطها .