वाई-फ़ाई

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

वाई-फाई मॉड्यूल घटक

चित्र 1. वाई-फाई मॉड्यूल घटक और वास्तुकला

वाई-फाई मॉड्यूल निम्नलिखित लाभ प्रदान करता है।

  • अंतिम उपयोगकर्ताओं को एंड्रॉइड डिवाइसों पर लगातार वाई-फाई अनुभव मिलता है और मॉड्यूल अपडेट के माध्यम से इंटरऑपरेबिलिटी समस्याओं को ठीक किया जाता है।

  • ऐप डेवलपर्स को प्लेटफ़ॉर्म विखंडन कम हो जाता है।

  • ओईएम व्यक्तिगत अनुकूलन के लिए लागत कम करते हुए वाहक आवश्यकताओं को पूरा कर सकते हैं (क्योंकि उन्हें अलग-अलग तरीकों से समान आवश्यकताओं के विभिन्न कार्यान्वयन की आवश्यकता नहीं होती है)।

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/ (एंड्रॉइड 12 में नया, ओवरले एपीके मेनिफेस्ट यहां संग्रहीत है)
      • res/ (एंड्रॉइड 11 में नया, frameworks/base/core/res/res से निकाले गए वाई-फाई कॉन्फिगरेशन)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (सेवा द्वारा अनुरोधित उपयोगकर्ता संवाद लॉन्च करने के लिए एंड्रॉइड 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 अपने पैच को मूल प्रोजेक्ट निर्देशिकाओं से नई प्रोजेक्ट निर्देशिका में स्थानांतरित करने में सहायता के लिए नमूना कमांड का उपयोग कर सकते हैं।

फ्रेमवर्क/बेस/वाईफ़ाई से एक पैच ले जाना

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

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 में बदलें।

प्रतिबद्ध संदेश को उपयुक्त के रूप में संपादित करें।

एंड्रॉइड 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

एंड्रॉइड 11 फ़ाइलों को स्थानांतरित नहीं करता है, लेकिन भविष्य में रिलीज़ हो सकता है। फ़ाइल स्थान परिवर्तनों को पोर्ट करने में शामिल प्रयास को कम करने के लिए, हम AOSP में यथासंभव अधिक से अधिक बदलावों की अनुशंसा करते हैं (उन्हें Android 11 पर पोर्ट करने के बाद या उन्हें AOSP कोड से अलग करने के लिए औपचारिक Android API या विक्रेता HAL एक्सटेंशन का उपयोग करने के लिए मालिकाना एक्सटेंशन को रीफैक्टर करने के बाद)।

मॉड्यूल प्रारूप

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

  • एसडीके लाइब्रेरी ( framework-wifi.jar )
  • सेवा पुस्तकालय ( service-wifi.jar )
  • ओसुलॉगिन एपीके ( OsuLoginGoogle.apk )
  • संसाधन एपीके ( ServiceWifiResourcesGoogle.apk )
  • डब्ल्यूएफए प्रमाण पत्र

मॉड्यूल निर्भरता

वाई-फाई मॉड्यूल निम्नलिखित घटकों पर निर्भर करता है।

  • कनेक्टिविटी
  • टेलीफ़ोनी
  • प्रोटो पुस्तकालय
  • विविध सिस्टम घटक
  • वाईफ़ाई एचएएल
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

यह मॉड्यूल केवल स्थिर @SystemApi (कोई @hide API उपयोग नहीं) का उपयोग करके फ्रेमवर्क के साथ इंटरैक्ट करता है और प्लेटफ़ॉर्म हस्ताक्षर के बजाय Google हस्ताक्षर के साथ हस्ताक्षरित होता है।

अनुकूलित

वाई-फाई मॉड्यूल प्रत्यक्ष अनुकूलन का समर्थन नहीं करता है, लेकिन आप रनटाइम रिसोर्स ओवरले (आरआरओ) या कैरियर कॉन्फ़िगरेशन का उपयोग करके कॉन्फ़िगरेशन को अनुकूलित कर सकते हैं।

वाई-फ़ाई अनुकूलन

चित्र 2. वाई-फाई मॉड्यूल अनुकूलन

  • छोटे अनुकूलन के लिए, आरआरओ 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 , आपको वाई-फ़ाई कॉन्फ़िगरेशन को सफलतापूर्वक ओवरले करने के लिए ओवरले APKS targetPackage com.google.android.wifi.resources पर सेट करना होगा।

कॉन्फ़िगरेशन संग्रहण प्रारूप को माइग्रेट किया जा रहा है

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

निम्नलिखित विधियों में प्रारूप रूपांतरण लागू करें।

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • वाई-फ़ाई साझा स्टोर फ़ाइल सामग्री को पुनः प्राप्त करने के लिए वाई-फ़ाई मॉड्यूल द्वारा आमंत्रित किया गया है जिसे एओएसपी प्रारूप में परिवर्तित किया गया है।

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

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • वाई-फाई उपयोगकर्ता-विशिष्ट स्टोर फ़ाइल सामग्री को पुनः प्राप्त करने के लिए वाई-फाई मॉड्यूल द्वारा आमंत्रित किया गया है जिसे एओएसपी प्रारूप में परिवर्तित किया गया है।

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

छुपे हुए वाई-फ़ाई एपीआई तक पहुँचना

वाई-फाई मॉड्यूल में @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 API लाइब्रेरी एक्सेस की अनुमति देने के लिए बिल्ड नियम बदलें। उदाहरण के लिए, निम्नलिखित 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 libs की सूची में framework से पहले दिखाई देता है। libs विशेषता में निर्भरता का क्रम महत्वपूर्ण है।

छुपे हुए फ्रेमवर्क एपीआई तक पहुँचना

वाई-फाई मॉड्यूल के बाहर @hide के साथ एनोटेट किए गए प्रतीकों को वाई-फाई मॉड्यूल के भीतर कोड द्वारा एक्सेस नहीं किया जा सकता है। जिन डिवाइसों में वाई-फाई मॉड्यूल शामिल नहीं frameworks/opt/net/wifi/service/Android.bp में निम्नलिखित संशोधन करके 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",
        ],
    }
    

परिक्षण

एंड्रॉइड संगतता परीक्षण सूट (सीटीएस) प्रत्येक मॉड्यूल रिलीज पर सीटीएस परीक्षणों का एक व्यापक सेट चलाकर वाई-फाई मॉड्यूल की कार्यक्षमता की पुष्टि करता है। आप टेस्टिंग, डिबगिंग और ट्यूनिंग वाई-फ़ाई में वर्णित परीक्षण भी चला सकते हैं।