वाई-फ़ाई मॉड्यूल को अपडेट किया जा सकता है. इसका मतलब है कि 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 अपने पैच को ओरिजनल प्रोजेक्ट डायरेक्ट्री से नई प्रोजेक्ट डायरेक्ट्री में ले जाने के लिए, सैंपल कमांड का इस्तेमाल कर सकते हैं.
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
में, कमिट को दो कमिट में बांटें. एक 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
में बदलें.
ज़रूरत के हिसाब से, कमिट मैसेज में बदलाव करें.
Android 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
Android 11 में फ़ाइलें नहीं हटाई जातीं. हालांकि, आने वाले समय में रिलीज़ होने वाले वर्शन में ऐसा हो सकता है. फ़ाइल की जगह में हुए बदलावों को पोर्ट करने में लगने वाले समय को कम करने के लिए, हमारा सुझाव है कि आप AOSP में ज़्यादा से ज़्यादा बदलाव करें. इसके लिए, उन्हें Android 11 में पोर्ट करें या मालिकाना एक्सटेंशन को फिर से तैयार करें. ऐसा करने पर, Android के आधिकारिक एपीआई का इस्तेमाल किया जा सकता है. इसके अलावा, वेंडर के एचएएल एक्सटेंशन को AOSP कोड से अलग किया जा सकता है.
मॉड्यूल का फ़ॉर्मैट
वाई-फ़ाई मॉड्यूल (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 सिग्नेचर से साइन किया जाता है.
पसंद के मुताबिक बनाएं
वाई-फ़ाई मॉड्यूल को सीधे तौर पर पसंद के मुताबिक नहीं बनाया जा सकता. हालांकि, रनटाइम रिसॉर्स ओवरले (आरआरओ) या कैरियर कॉन्फ़िगरेशन का इस्तेमाल करके, कॉन्फ़िगरेशन को पसंद के मुताबिक बनाया जा सकता है.
दूसरी इमेज. वाई-फ़ाई मॉड्यूल को पसंद के मुताबिक बनाने की सुविधा
- थोड़े-बहुत बदलाव करने के लिए, आरआरओ
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
है. इसलिए, वाई-फ़ाई कॉन्फ़िगरेशन को ओवरले करने के लिए, आपको ओवरले APKtargetPackage
को com.google.android.wifi.resources
पर सेट करना होगा.
कॉन्फ़िगरेशन के स्टोरेज फ़ॉर्मैट को माइग्रेट करना
वाई-फ़ाई मॉड्यूल, सिर्फ़ AOSP वाई-फ़ाई कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट को पार्स कर सकता है. अगर आपने पहले ही वाई-फ़ाई कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट (जिसमें उपयोगकर्ता की सेव की गई नेटवर्क सूची शामिल है) में बदलाव किए हैं, तो डिवाइस को वाई-फ़ाई मॉड्यूल वाले किसी भी Android वर्शन में अपग्रेड करते समय आपको उस डेटा को एओएसपी फ़ॉर्मैट में बदलना होगा. इस कन्वर्ज़न के लिए ज़रूरी हुक, android.net.wifi.WifiMigration
क्लास में मौजूद हैं.
नीचे दिए गए तरीकों में फ़ॉर्मैट कन्वर्ज़न लागू करें.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
AOSP फ़ॉर्मैट में बदले गए वाई-फ़ाई के ज़रिए शेयर की गई स्टोर फ़ाइल का कॉन्टेंट वापस पाने के लिए, वाई-फ़ाई मॉड्यूल का इस्तेमाल किया जा रहा है.
ये फ़ाइलें पहले (Android 10 में) डिवाइस पर
/data/misc/wifi
फ़ोल्डर में सेव होती थीं.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Wi-Fi मॉड्यूल इसे AOSP फ़ॉर्मैट में बदले गए, Wi-Fi उपयोगकर्ता के स्टोर फ़ाइल कॉन्टेंट को वापस पाने के लिए इस्तेमाल करता है.
ये फ़ाइलें पहले (Android 10 में) डिवाइस पर
/data/misc_ce/<userId>/wifi
फ़ोल्डर में सेव होती थीं.
छिपे हुए वाई-फ़ाई एपीआई ऐक्सेस करना
Wi-Fi मॉड्यूल में @hide
के साथ एनोटेट किए गए सिंबल (क्लास, तरीके, फ़ील्ड वगैरह), इसके सार्वजनिक एपीआई के हिस्से नहीं हैं. साथ ही, इन्हें उन डिवाइसों पर ऐक्सेस नहीं किया जा सकता जिनमें मॉड्यूल इंस्टॉल है. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल नहीं है वे नीचे दिए गए तरीके का इस्तेमाल करके, @hide
वाई-फ़ाई एपीआई का इस्तेमाल करना जारी रख सकते हैं.
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. ], ... }
लाइब्रेरी को
@hide
Wi-Fi एपीआई ऐक्सेस करने की अनुमति देने के लिए, बिल्ड नियम बदलें. उदाहरण के लिए, यहां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-wifi.impl
,framework
से पहले दिख रहा हो.libs
एट्रिब्यूट में, डिपेंडेंसी का क्रम अहम होता है.
छिपे हुए फ़्रेमवर्क एपीआई ऐक्सेस करना
@hide
के साथ एनोटेट किए गए ऐसे सिंबल जिन्हें वाई-फ़ाई मॉड्यूल के बाहर रखा गया है उन्हें वाई-फ़ाई मॉड्यूल के कोड से ऐक्सेस नहीं किया जा सकता. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल नहीं है वे service-wifi
में @hide
के बाहरी एपीआई (उदाहरण के लिए, framework.jar
से) का इस्तेमाल करना जारी रख सकते हैं. इसके लिए, 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 कंपैटबिलिटी टेस्ट सुइट (सीटीएस) हर मॉड्यूल की रिलीज़ पर सीटीएस टेस्ट का एक बहुत बड़ा सेट चलाकर, वाई-फ़ाई मॉड्यूल की क्षमताओं की पुष्टि करता है. Wi-Fi की जांच करना, डीबग करना, और उसे बेहतर बनाना में बताए गए टेस्ट भी चलाए जा सकते हैं.