Wi-Fi

وحدة 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 باستخدام الخطوات التالية.

  1. قم بإزالة قيود الرؤية المفروضة على 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.
        ],
        ...
    }
    
  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 (CTS) من وظائف وحدة Wi-Fi عن طريق تشغيل مجموعة شاملة من اختبارات CTS في كل إصدار للوحدة. يمكنك أيضًا إجراء الاختبارات الموضحة في اختبار شبكة Wi-Fi وتصحيح الأخطاء وضبطها .