Wi-Fi मॉड्यूल को अपडेट किया जा सकता है. इसका मतलब है कि इसे 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
ओईएम, सैंपल कमांड का इस्तेमाल करके, अपने पैच को ओरिजनल प्रोजेक्ट डायरेक्ट्री से नई प्रोजेक्ट डायरेक्ट्री में ले जा सकते हैं.
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-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
के लिए एसडीके और सेवा क्लासOsuLogin
ServiceWifiResources
इस मॉड्यूल में ये कॉम्पोनेंट शामिल नहीं हैं. ये कॉम्पोनेंट, ओईएम के एओएसपी बिल्ड का हिस्सा बने रहते हैं.
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 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 सर्टिफ़िकेट
मॉड्यूल डिपेंडेंसी
वाई-फ़ाई मॉड्यूल इन कॉम्पोनेंट पर निर्भर करता है.
- कनेक्टिविटी
- टेलीफ़ोनी
- प्रोटो लाइब्रेरी
- सिस्टम के अन्य कॉम्पोनेंट
- वाई-फ़ाई एचएएल
wificond
bouncycastle
ksoap2
libnanohttpd
यह मॉड्यूल, सिर्फ़ स्टेबल @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 टेस्ट का पूरा सेट चलाता है. वाई-फ़ाई की जांच करना, डीबग करना, और उसे बेहतर बनाना में बताए गए टेस्ट भी किए जा सकते हैं.