वाई-फ़ाई

वाई-फ़ाई मॉड्यूल को अपडेट किया जा सकता है. इसका मतलब है कि इसे 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, सैंपल निर्देशों का इस्तेमाल करके अपने पैच को ओरिजनल प्रोजेक्ट डायरेक्ट्री से नई प्रोजेक्ट डायरेक्ट्री में ले जा सकते हैं.

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

root/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 में, तय किए गए लाइसेंस को दो हिस्सों में बांटें. एक पुष्टि के लिए tests/ के लिए service/ और एक-दूसरे का स्कोर देखें.

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 के लिए मॉड्यूल की सीमा

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

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

इस मॉड्यूल में नीचे दिए गए कॉम्पोनेंट शामिल नहीं हैं, जो OEM के हिस्से के तौर पर काम करते हैं एओएसपी बिल्ड.

  • 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 में फ़ाइलें ट्रांसफ़र नहीं की जा सकतीं, लेकिन आने वाले समय में नई रिलीज़ कर सकते हैं. फ़ाइल की जगह में होने वाले बदलावों को पोर्ट करने में लगने वाले समय को कम करने के लिए, हम एओएसपी में ज़्यादा से ज़्यादा बदलाव करने का सुझाव दें (उन्हें पोर्ट करने के बाद Android 11 या इसके लिए मालिकाना हक वाले एक्सटेंशन में बदलाव करना एओएसपी कोड से अलग करने के लिए, औपचारिक Android API या वेंडर एचएएल एक्सटेंशन का इस्तेमाल करें.

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

वाई-फ़ाई मॉड्यूल (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 हस्ताक्षर से साइन किया जाता है हस्ताक्षर करें.

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

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

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

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

  • छोटे साइज़ के बदलाव करने के लिए, RRO 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 पर सेट करना होगा.

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

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

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

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

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

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

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

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

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

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

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

  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 वाई-फ़ाई एपीआई ऐक्सेस करने की अनुमति देने के लिए, बिल्ड का नियम बदलें. इसके लिए उदाहरण के लिए, नीचे 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 से एनोटेट किए गए सिंबल को ऐक्सेस नहीं किया जा सकता को वाई-फ़ाई मॉड्यूल में डाला जाना चाहिए. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल शामिल नहीं है वे ये काम कर सकते हैं इनमें @hide एक्सटर्नल एपीआई (उदाहरण के लिए, framework.jar से) का इस्तेमाल जारी रखें service-wifi में ये बदलाव करके frameworks/opt/net/wifi/service/Android.bp.

  1. wifi-service-pre-jarjar और service-wifi दोनों में, core_platform को sdk_version एट्रिब्यूट दिया गया है.

  2. wifi-service-pre-jarjar और service-wifi दोनों में, framework जोड़ें और libs एट्रिब्यूट की वैल्यू के तौर पर 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 कंपैटबिलिटी टेस्ट सुइट (सीटीएस) की मदद से, वाई-फ़ाई मॉड्यूल के हर मॉड्यूल पर CTS परीक्षणों का एक व्यापक सेट चलाने की क्षमता रिलीज़. आपके पास टेस्ट, डीबग, और ट्यून इन में बताया गया टेस्ट करने का विकल्प भी है. वाई-फ़ाई.