वाई-फ़ाई

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

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

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

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

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

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

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

Android 12 और Android 13 के लिए मॉड्यूल बाउंड्री

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi (files from frameworks/base/wifi/java)
      • tests/
        • android/net/wifi (files from frameworks/base/wifi/tests)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (files from frameworks/opt/net/wifi/service/java)
      • tests/
        • com/android/server/wifi (files from frameworks/opt/net/wifi/tests)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (files from frameworks/base/packages/OsuLogin)
    • ServiceResources/ (new in Android 12, Overlay APK manifest is stored here)
      • res/ (new in Android 11, Wi-Fi configs extracted from from frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (new in Android 13 App to launch user dialogs requested by the service is stored here.)
      • src/
        • com/android/wifi/dialog (Contains the Activity the dialogs are launched from)
      • AndroidManifest.xml
      • Android.bp

ऊपर दी गई डायरेक्ट्री में ऐसा कोड भी शामिल होता है जो मॉड्यूलर सिस्टम कॉम्पोनेंट से बाहर रहता है और अपनी मौजूदा जगह पर रहता है. उदाहरण के लिए:

  • wificond interface (classes in package android.net.wifi.nl80211, for example, WifiNl80211Manager)
  • Sample Resource Overlay app
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

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

frameworks/base/wifi से पैच ले जाना

root/frameworks/base/wifi में पैच फ़ाइल जनरेट करना

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

root/packages/modules/Wifi पर पैच फ़ाइल लागू करना

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

frameworks/opt/net/wifi से पैच ले जाना

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

packages/modules/Wifi पर दो पैच लागू करना

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

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

  • system/connectivity/wificond में मौजूद wificond नेटिव कॉम्पोनेंट
  • wificond इंटरफ़ेस (classes in package android.net.wifi.nl80211, for example, WifiNl80211Manager)
  • android.net.wifi.SoftApConfToXmlMigrationUtil
  • android.net.wifi.WifiNetworkScoreCache
  • android.net.wifi.WifiMigration
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Android 11 में फ़ाइलें नहीं ले जाई जाती हैं, लेकिन आने वाले समय में ऐसा किया जा सकता है. फ़ाइल की जगह में किए गए बदलावों को पोर्ट करने में लगने वाली मेहनत को कम करने के लिए, हमारा सुझाव है कि ज़्यादा से ज़्यादा बदलावों को एओएसपी में अपस्ट्रीम किया जाए. इसके लिए, उन्हें Android 11 में पोर्ट करें या मालिकाना हक वाले एक्सटेंशन को रीफ़ैक्टर करके, फ़ॉर्मल Android एपीआई या वेंडर एचएएल एक्सटेंशन का इस्तेमाल करें, ताकि उन्हें एओएसपी कोड से अलग किया जा सके.

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

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

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

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

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

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

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

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

फ़ॉर्मैट कन्वर्ज़न को इन तरीकों से लागू करें.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

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

    • ये फ़ाइलें, Android 10 में डिवाइस पर /data/misc/wifi फ़ोल्डर में सेव की गई थीं.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

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

    • ये फ़ाइलें, Android 10 में डिवाइस पर /data/misc_ce/<userId>/wifi फ़ोल्डर में सेव की गई थीं.

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

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

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

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. लाइब्रेरी ऐक्सेस @hide वाई-फ़ाई एपीआई की अनुमति देने के लिए, बिल्ड रूल बदलें. उदाहरण के लिए, यहां 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 के साथ एनोटेट किए गए सिंबल को, वाई-फ़ाई मॉड्यूल में मौजूद कोड से ऐक्सेस नहीं किया जा सकता. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल शामिल नहीं है वे frameworks/opt/net/wifi/service/Android.bp में ये बदलाव करके, service-wifi में @hide बाहरी एपीआई (उदाहरण के लिए, framework.jar से) का इस्तेमाल जारी रख सकते हैं.

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