वाई-फ़ाई

वाई-फ़ाई मॉड्यूल को अपडेट किया जा सकता है. इसका मतलब है कि Android के सामान्य रिलीज़ साइकल के अलावा, इसे अपडेट भी मिल सकते हैं. इस मॉड्यूल में ये कॉम्पोनेंट शामिल हैं.

वाई-फ़ाई मॉड्यूल के कॉम्पोनेंट

पहला डायग्राम. वाई-फ़ाई मॉड्यूल के कॉम्पोनेंट और आर्किटेक्चर

वाई-फ़ाई मॉड्यूल के ये फ़ायदे हैं.

  • इससे, असली उपयोगकर्ताओं को सभी Android डिवाइसों पर एक जैसा वाई-फ़ाई अनुभव मिलता है. साथ ही, मॉड्यूल के अपडेट की मदद से, डिवाइसों के साथ काम करने से जुड़ी समस्याओं को ठीक किया जाता है.

  • ऐप्लिकेशन डेवलपर को प्लैटफ़ॉर्म फ़्रैगमेंटेशन कम करने में मदद मिलती है.

  • OEM, कैरियर की ज़रूरी शर्तों को पूरा करते हुए, अलग-अलग ज़रूरतों के हिसाब से डिवाइस बनाने की लागत को कम कर सकते हैं. ऐसा इसलिए, क्योंकि उन्हें एक ही ज़रूरी शर्त को अलग-अलग तरीकों से लागू करने की ज़रूरत नहीं होती.

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 में नया वर्शन, वाई-फ़ाई कॉन्फ़िगरेशन 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

OEM अपने पैच को ओरिजनल प्रोजेक्ट डायरेक्ट्री से नई प्रोजेक्ट डायरेक्ट्री में ले जाने के लिए, सैंपल कमांड का इस्तेमाल कर सकते हैं.

frameworks/base/wifi से पैच को किसी दूसरे फ़ोल्डर में ले जाना

रूट/फ़्रेमवर्क/बेस/वाई-फ़ाई में पैच फ़ाइल जनरेट करना

git format-patch -1 commit --stdout > patch-file.txt

रूट/पैकेज/मॉड्यूल/वाई-फ़ाई पर पैच फ़ाइल लागू करना

git am -p2 --directory=framework/ patch-file.txt

पैच को फ़्रेमवर्क/ऑप्ट/नेट/वाई-फ़ाई से ले जाना

पैच को frameworks/opt/net/wifi से एक जगह से दूसरी जगह ले जाने के लिए, मुश्किल चरण पूरे करने ज़रूरी हैं. ऐसा इसलिए, क्योंकि माइग्रेशन के दौरान डायरेक्ट्री की हैरारकी बदल गई थी.

frameworks/opt/net/wifi में, कमिट को दो कमिट में बांटें. एक service/ के लिए और एक tests/ के लिए.

HEAD कमिट को माइग्रेट करना

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

पैकेज/मॉड्यूल/वाई-फ़ाई पर दो पैच लागू करना

git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt

दो कमिट को एक कमिट में बदलना

git rebase -i

दूसरे कमिट के ऑपरेशन को squash में बदलें.

ज़रूरत के हिसाब से, कमिट मैसेज में बदलाव करें.

Android 11 के लिए मॉड्यूल की सीमा

वाई-फ़ाई सेवा, सिस्टम सेवा की प्रोसेस में चलती रहती है. वाई-फ़ाई मॉड्यूल में packages/modules/Wifi का पूरा कोड शामिल होता है. इसमें ये भी शामिल हैं.

  • WifiService, WifiP2pService, WifiAwareService, WifiScannerService, और WifiRttService के लिए SDK टूल और सेवा क्लास
  • OsuLogin
  • ServiceWifiResources

मॉड्यूल में ये कॉम्पोनेंट शामिल नहीं होते, जो OEM के AOSP बिल्ड का हिस्सा बने रहते हैं.

  • system/connectivity/wificond में 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 के आधिकारिक एपीआई का इस्तेमाल किया जा सकता है. इसके अलावा, वेंडर के एचएएल एक्सटेंशन को AOSP कोड से अलग किया जा सकता है.

मॉड्यूल का फ़ॉर्मैट

वाई-फ़ाई मॉड्यूल (com.android.wifi), APEX फ़ॉर्मैट में है. यह Android 11 या इसके बाद के वर्शन वाले डिवाइसों के लिए उपलब्ध है. APEX फ़ाइल में ये कॉम्पोनेंट शामिल होते हैं.

  • SDK टूल की लाइब्रेरी (framework-wifi.jar)
  • सेवा लाइब्रेरी (service-wifi.jar)
  • OsuLogin APK (OsuLoginGoogle.apk)
  • संसाधन APK (ServiceWifiResourcesGoogle.apk)
  • WFA सर्टिफ़िकेट

मॉड्यूल की डिपेंडेंसी

वाई-फ़ाई मॉड्यूल, इन कॉम्पोनेंट पर निर्भर करता है.

  • कनेक्टिविटी
  • टेलीफ़ोनी
  • प्रोटो लाइब्रेरी
  • सिस्टम के अन्य कॉम्पोनेंट
  • वाई-फ़ाई एचएएल
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

यह मॉड्यूल सिर्फ़ स्टेबल @SystemApi (@hide एपीआई का इस्तेमाल नहीं) का इस्तेमाल करके फ़्रेमवर्क के साथ इंटरैक्ट करता है. साथ ही, इसे प्लैटफ़ॉर्म सिग्नेचर के बजाय Google सिग्नेचर से साइन किया जाता है.

पसंद के मुताबिक बनाएं

वाई-फ़ाई मॉड्यूल को सीधे तौर पर पसंद के मुताबिक नहीं बनाया जा सकता. हालांकि, रनटाइम रिसॉर्स ओवरले (आरआरओ) या कैरियर कॉन्फ़िगरेशन का इस्तेमाल करके, कॉन्फ़िगरेशन को पसंद के मुताबिक बनाया जा सकता है.

वाई-फ़ाई को पसंद के मुताबिक बनाना

दूसरी इमेज. वाई-फ़ाई मॉड्यूल को पसंद के मुताबिक बनाने की सुविधा

  • थोड़े-बहुत बदलाव करने के लिए, आरआरओ config में जाकर सेटिंग चालू या बंद करें.
  • ज़्यादा कंट्रोल के लिए, @SystemAPI के तौर पर एक्सपोज़ की गई किसी भी कैरियर कॉन्फ़िगरेशन कुंजी के लिए, कॉन्फ़िगरेशन वैल्यू को पसंद के मुताबिक बनाएं.

रनटाइम रिसॉर्स ओवरले का इस्तेमाल करना

आरआरओ का इस्तेमाल करके, डिफ़ॉल्ट कॉन्फ़िगरेशन को बदलकर, वाई-फ़ाई मॉड्यूल को पसंद के मुताबिक बनाया जा सकता है. ओवरले किए जा सकने वाले कॉन्फ़िगरेशन की सूची के लिए, 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 का पैकेज नाम com.google.android.wifi.resources है. इसलिए, वाई-फ़ाई कॉन्फ़िगरेशन को ओवरले करने के लिए, आपको ओवरले APKtargetPackage को com.google.android.wifi.resources पर सेट करना होगा.

कॉन्फ़िगरेशन के स्टोरेज फ़ॉर्मैट को माइग्रेट करना

वाई-फ़ाई मॉड्यूल, सिर्फ़ AOSP वाई-फ़ाई कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट को पार्स कर सकता है. अगर आपने पहले ही वाई-फ़ाई कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट (जिसमें उपयोगकर्ता की सेव की गई नेटवर्क सूची शामिल है) में बदलाव किए हैं, तो डिवाइस को वाई-फ़ाई मॉड्यूल वाले किसी भी Android वर्शन में अपग्रेड करते समय आपको उस डेटा को एओएसपी फ़ॉर्मैट में बदलना होगा. इस कन्वर्ज़न के लिए ज़रूरी हुक, android.net.wifi.WifiMigration क्लास में मौजूद हैं.

नीचे दिए गए तरीकों में फ़ॉर्मैट कन्वर्ज़न लागू करें.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • AOSP फ़ॉर्मैट में बदले गए वाई-फ़ाई के ज़रिए शेयर की गई स्टोर फ़ाइल का कॉन्टेंट वापस पाने के लिए, वाई-फ़ाई मॉड्यूल का इस्तेमाल किया जा रहा है.

    • ये फ़ाइलें पहले (Android 10 में) डिवाइस पर /data/misc/wifi फ़ोल्डर में सेव होती थीं.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Wi-Fi मॉड्यूल इसे AOSP फ़ॉर्मैट में बदले गए, Wi-Fi उपयोगकर्ता के स्टोर फ़ाइल कॉन्टेंट को वापस पाने के लिए इस्तेमाल करता है.

    • ये फ़ाइलें पहले (Android 10 में) डिवाइस पर /data/misc_ce/<userId>/wifi फ़ोल्डर में सेव होती थीं.

छिपे हुए वाई-फ़ाई एपीआई ऐक्सेस करना

Wi-Fi मॉड्यूल में @hide के साथ एनोटेट किए गए सिंबल (क्लास, तरीके, फ़ील्ड वगैरह), इसके सार्वजनिक एपीआई के हिस्से नहीं हैं. साथ ही, इन्हें उन डिवाइसों पर ऐक्सेस नहीं किया जा सकता जिनमें मॉड्यूल इंस्टॉल है. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल नहीं है वे नीचे दिए गए तरीके का इस्तेमाल करके, @hide वाई-फ़ाई एपीआई का इस्तेमाल करना जारी रख सकते हैं.

  1. impl_library_visibility एट्रिब्यूट को 'सार्वजनिक' पर सेट करके, packages/modules/Wifi/framework/Android.bp पर framework-wifi के दिखने पर लगी पाबंदियों को हटाएं.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. लाइब्रेरी को @hide Wi-Fi एपीआई ऐक्सेस करने की अनुमति देने के लिए, बिल्ड नियम बदलें. उदाहरण के लिए, यहां 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. पक्का करें कि libs की सूची में framework-wifi.impl, framework से पहले दिख रहा हो. libs एट्रिब्यूट में, डिपेंडेंसी का क्रम अहम होता है.

छिपे हुए फ़्रेमवर्क एपीआई ऐक्सेस करना

@hide के साथ एनोटेट किए गए ऐसे सिंबल जिन्हें वाई-फ़ाई मॉड्यूल के बाहर रखा गया है उन्हें वाई-फ़ाई मॉड्यूल के कोड से ऐक्सेस नहीं किया जा सकता. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल नहीं है वे service-wifi में @hide के बाहरी एपीआई (उदाहरण के लिए, framework.jar से) का इस्तेमाल करना जारी रख सकते हैं. इसके लिए, 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, दोनों में libs एट्रिब्यूट में framework और android_system_server_stubs_current जोड़ें.

  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 कंपैटबिलिटी टेस्ट सुइट (सीटीएस) हर मॉड्यूल की रिलीज़ पर सीटीएस टेस्ट का एक बहुत बड़ा सेट चलाकर, वाई-फ़ाई मॉड्यूल की क्षमताओं की पुष्टि करता है. Wi-Fi की जांच करना, डीबग करना, और उसे बेहतर बनाना में बताए गए टेस्ट भी चलाए जा सकते हैं.