Wi-Fi मॉड्यूल को अपडेट किया जा सकता है. इसका मतलब है कि इसे Android की रिलीज़ साइकल के अलावा, अन्य सुविधाओं के अपडेट भी मिल सकते हैं. इस मॉड्यूल में ये कॉम्पोनेंट शामिल हैं.
पहली इमेज. वाई-फ़ाई मॉड्यूल के कॉम्पोनेंट और आर्किटेक्चर
वाई-फ़ाई मॉड्यूल से ये फ़ायदे मिलते हैं.
असली उपयोगकर्ताओं को Android डिवाइसों पर, एक जैसा वाई-फ़ाई अनुभव मिलता है. साथ ही, मॉड्यूल अपडेट के ज़रिए, इंटरऑपरेबिलिटी से जुड़ी समस्याओं को ठीक किया जाता है.
ऐप्लिकेशन डेवलपर को प्लैटफ़ॉर्म फ़्रैगमेंटेशन कम मिलता है.
OEM, कैरियर की ज़रूरी शर्तों को पूरा कर सकते हैं. साथ ही, अलग-अलग डिवाइसों को पसंद के मुताबिक बनाने की लागत को भी कम कर सकते हैं. ऐसा इसलिए, क्योंकि उन्हें अलग-अलग डिवाइसों में एक ही ज़रूरी शर्त को अलग-अलग तरीके से लागू करने की ज़रूरत नहीं होती.
Android 12 और Android 13 के लिए मॉड्यूल बाउंड्री
packages/modules/Wififrameworkjava/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.bpproguard.flagswifi.rc
OsuLogin/(frameworks/base/packages/OsuLoginसे मिली फ़ाइलें)ServiceResources/(Android 12 में नया, ओवरले APK मेनिफ़ेस्ट यहां सेव किया जाता है)res/(Android 11 में नया,frameworks/base/core/res/resसे निकाले गए वाई-फ़ाई कॉन्फ़िगरेशन)AndroidManifest.xmlAndroid.bp
WifiDialog/(Android 13 में नया: सेवा के अनुरोध पर उपयोगकर्ता के डायलॉग लॉन्च करने वाले ऐप्लिकेशन की जानकारी यहां सेव की जाती है.)src/com/android/wifi/dialog(इसमें वह गतिविधि शामिल होती है जिससे डायलॉग बॉक्स लॉन्च किए जाते हैं)
AndroidManifest.xmlAndroid.bp
ऊपर दी गई डायरेक्ट्री में ऐसा कोड भी होता है जो मॉड्यूलर सिस्टम कॉम्पोनेंट के बाहर और उसकी मौजूदा जगह पर रहता है. उदाहरण के लिए:
wificond interface(पैकेजandroid.net.wifi.nl80211में मौजूद क्लास, जैसे किWifiNl80211Manager)- सैंपल रिसॉर्स ओवरले ऐप्लिकेशन
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_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फ़्रेमवर्क/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-commitgit add tests/git commit # Enter your commit message. Call this commit test-commit
दो कमिट पैच फ़ाइलें जनरेट की जा रही हैं
git format-patch -1 service-commit --stdout > service-patch.txtgit format-patch -1 test-commit --stdout > test-patch.txt
packages/modules/Wifi पर दो पैच लागू किए जा रहे हैं
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
दो कमिट को वापस एक कमिट में स्क्वैश करना
git rebase -iदूसरे कमिट के ऑपरेशन को squash में बदलें.
कमिट मैसेज में ज़रूरत के मुताबिक बदलाव करें.
Android 11 के लिए मॉड्यूल बाउंड्री
वाई-फ़ाई सेवा, सिस्टम सर्विस प्रोसेस में चलती रहती है. वाई-फ़ाई मॉड्यूल में, packages/modules/Wifi में मौजूद सभी कोड शामिल होते हैं. इनमें ये शामिल हैं.
WifiService,WifiP2pService,WifiAwareService,WifiScannerService, औरWifiRttServiceके लिए एसडीके और सेवा क्लासOsuLoginServiceWifiResources
इस मॉड्यूल में ये कॉम्पोनेंट शामिल नहीं हैं. ये कॉम्पोनेंट, ओईएम के एओएसपी बिल्ड का हिस्सा बने रहते हैं.
system/connectivity/wificondमेंwificondनेटिव कॉम्पोनेंटwificondइंटरफ़ेस (पैकेजandroid.net.wifi.nl80211में मौजूद क्लास, उदाहरण के लिए,WifiNl80211Manager)android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 में फ़ाइलें ट्रांसफ़र नहीं होती हैं. हालांकि, आने वाले समय में रिलीज़ होने वाले वर्शन में यह सुविधा उपलब्ध हो सकती है. फ़ाइल की जगह में हुए बदलावों को पोर्ट करने में लगने वाले समय को कम करने के लिए, हम सुझाव देते हैं कि ज़्यादा से ज़्यादा बदलावों को AOSP में अपस्ट्रीम करें. इसके लिए, उन्हें Android 11 में पोर्ट करें या मालिकाना हक वाले एक्सटेंशन को फिर से फ़ैक्टर करें, ताकि वे फ़ॉर्मल Android API या वेंडर HAL एक्सटेंशन का इस्तेमाल कर सकें. इससे उन्हें AOSP कोड से अलग किया जा सकेगा.
मॉड्यूल का फ़ॉर्मैट
Wi-Fi मॉड्यूल (com.android.wifi) APEX फ़ॉर्मैट में है. यह Android 11 या इसके बाद के वर्शन पर काम करने वाले डिवाइसों के लिए उपलब्ध है. APEX फ़ाइल में ये कॉम्पोनेंट शामिल होते हैं.
- SDK लाइब्रेरी (
framework-wifi.jar) - सेवा लाइब्रेरी (
service-wifi.jar) - OsuLogin APK (
OsuLoginGoogle.apk) - संसाधन APK (
ServiceWifiResourcesGoogle.apk) - WFA सर्टिफ़िकेट
मॉड्यूल डिपेंडेंसी
वाई-फ़ाई मॉड्यूल इन कॉम्पोनेंट पर निर्भर करता है.
- कनेक्टिविटी
- टेलीफ़ोनी
- प्रोटो लाइब्रेरी
- सिस्टम के अन्य कॉम्पोनेंट
- वाई-फ़ाई एचएएल
wificondbouncycastleksoap2libnanohttpd
यह मॉड्यूल, सिर्फ़ स्टेबल @SystemApi का इस्तेमाल करके फ़्रेमवर्क के साथ इंटरैक्ट करता है. इसमें @hide एपीआई का इस्तेमाल नहीं किया जाता. साथ ही, इसे प्लैटफ़ॉर्म के सिग्नेचर के बजाय Google के सिग्नेचर से साइन किया जाता है.
पसंद के मुताबिक बनाएं
वाई-फ़ाई मॉड्यूल में सीधे तौर पर बदलाव नहीं किया जा सकता. हालांकि, रनटाइम रिसॉर्स ओवरले (आरआरओ) या कैरियर कॉन्फ़िगरेशन का इस्तेमाल करके, कॉन्फ़िगरेशन में बदलाव किया जा सकता है.
दूसरी इमेज. वाई-फ़ाई मॉड्यूल को पसंद के मुताबिक बनाना
- छोटे-मोटे बदलावों के लिए, 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 पर सेट करना होगा, ताकि वाई-फ़ाई कॉन्फ़िगरेशन को सही तरीके से ओवरले किया जा सके.
कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट माइग्रेट करना
वाई-फ़ाई मॉड्यूल, सिर्फ़ AOSP के वाई-फ़ाई कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट को पार्स कर सकता है. अगर आपने पहले कभी वाई-फ़ाई कॉन्फ़िगरेशन के स्टोरेज फ़ॉर्मैट में बदलाव किया है (इसमें उपयोगकर्ता के सेव किए गए नेटवर्क की सूची शामिल है), तो आपको उस डेटा को एओएसपी फ़ॉर्मैट में बदलना होगा. ऐसा तब करना होगा, जब किसी डिवाइस को Android के ऐसे वर्शन पर अपग्रेड किया जा रहा हो जिसमें वाई-फ़ाई मॉड्यूल शामिल हो. इस कन्वर्ज़न के लिए ज़रूरी हुक, android.net.wifi.WifiMigration क्लास में हैं.
फ़ॉर्मैट कन्वर्ज़न को इन तरीकों से लागू करें.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)इस कुकी को वाई-फ़ाई मॉड्यूल चालू करता है. इसका इस्तेमाल, वाई-फ़ाई शेयर किए गए स्टोर फ़ाइल के कॉन्टेंट को वापस पाने के लिए किया जाता है. इस कॉन्टेंट को AOSP फ़ॉर्मैट में बदल दिया गया है.
इन फ़ाइलों को पहले (Android 10 में) डिवाइस पर मौजूद
/data/misc/wifiफ़ोल्डर में सेव किया जाता था.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)इस कुकी को वाई-फ़ाई मॉड्यूल चालू करता है. इसका इस्तेमाल, वाई-फ़ाई का इस्तेमाल करने वाले व्यक्ति की स्टोर फ़ाइल के कॉन्टेंट को वापस पाने के लिए किया जाता है. इस कॉन्टेंट को AOSP फ़ॉर्मैट में बदल दिया गया है.
इन फ़ाइलों को पहले (Android 10 में) डिवाइस पर मौजूद
/data/misc_ce/<userId>/wifiफ़ोल्डर में सेव किया जाता था.
छिपे हुए वाई-फ़ाई एपीआई ऐक्सेस करना
Wi-Fi मॉड्यूल में @hide के साथ एनोटेट किए गए सिंबल (क्लास, तरीके, फ़ील्ड वगैरह) इसके सार्वजनिक एपीआई का हिस्सा नहीं हैं. साथ ही, मॉड्यूल इंस्टॉल किए गए डिवाइसों पर इन्हें ऐक्सेस नहीं किया जा सकता. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल नहीं है वे @hide वाई-फ़ाई एपीआई का इस्तेमाल जारी रख सकते हैं. इसके लिए, उन्हें यह तरीका अपनाना होगा.
impl_library_visibilityएट्रिब्यूट की वैल्यू को सार्वजनिक पर सेट करके,framework-wifiपरpackages/modules/Wifi/framework/Android.bpके लिए लगाई गई पाबंदियां हटाएं.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }लाइब्रेरी को
@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", ], }पक्का करें कि
libsकी सूची में,frameworkसे पहलेframework-wifi.implदिखता हो.libsएट्रिब्यूट में, निर्भरता का क्रम अहम होता है.
छिपे हुए फ़्रेमवर्क एपीआई ऐक्सेस करना
वाई-फ़ाई मॉड्यूल के बाहर @hide से एनोटेट किए गए सिंबल को, वाई-फ़ाई मॉड्यूल के अंदर मौजूद कोड ऐक्सेस नहीं कर सकता. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल शामिल नहीं है वे @hide बाहरी एपीआई (उदाहरण के लिए, framework.jar से) का इस्तेमाल service-wifi में जारी रख सकते हैं. इसके लिए, उन्हें frameworks/opt/net/wifi/service/Android.bp में ये बदलाव करने होंगे.
दोनों
wifi-service-pre-jarjarऔरservice-wifiमें,sdk_versionएट्रिब्यूट की वैल्यू कोcore_platformपर सेट करें.wifi-service-pre-jarjarऔरservice-wifi, दोनों मेंlibsएट्रिब्यूट के लिएframeworkऔरandroid_system_server_stubs_currentजोड़ें.पुष्टि करें कि नतीजा, यहां दिए गए कोड के सैंपल से मिलता-जुलता हो.
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), वाई-फ़ाई मॉड्यूल की क्षमताओं की पुष्टि करता है. इसके लिए, वह हर मॉड्यूल रिलीज़ पर CTS टेस्ट का पूरा सेट चलाता है. वाई-फ़ाई की जांच करना, डीबग करना, और उसे बेहतर बनाना में बताए गए टेस्ट भी किए जा सकते हैं.