वाई-फ़ाई मॉड्यूल को अपडेट किया जा सकता है. इसका मतलब है कि इसे Android के सामान्य रिलीज़ साइकल के अलावा भी, नई सुविधाएं मिल सकती हैं. इस मॉड्यूल में ये कॉम्पोनेंट शामिल हैं.
पहली इमेज. वाई-फ़ाई मॉड्यूल के कॉम्पोनेंट और आर्किटेक्चर
वाई-फ़ाई मॉड्यूल से ये फ़ायदे मिलते हैं.
मॉड्यूल के अपडेट की मदद से, एंड यूज़र को Android डिवाइसों पर वाई-फ़ाई का एक जैसा अनुभव मिलता है. साथ ही, इंटरऑपरेबिलिटी से जुड़ी समस्याओं को ठीक किया जाता है.
ऐप्लिकेशन डेवलपर को प्लैटफ़ॉर्म फ़्रैगमेंटेशन कम मिलता है.
ओईएम, कैरियर की ज़रूरी शर्तें पूरी कर सकते हैं. साथ ही, अलग-अलग डिवाइसों के लिए किए जाने वाले कस्टमाइज़ेशन की लागत को कम कर सकते हैं. ऐसा इसलिए, क्योंकि उन्हें अलग-अलग तरीकों से एक ही ज़रूरी शर्त को अलग-अलग तरीके से लागू करने की ज़रूरत नहीं होती.
Android 12 और Android 13 के लिए मॉड्यूल बाउंड्री
packages/modules/Wififrameworkjava/android/net/wifi(files fromframeworks/base/wifi/java)
tests/android/net/wifi(files fromframeworks/base/wifi/tests)
aidl-export/api/Android.bp
service/java/com/android/server/wifi(files fromframeworks/opt/net/wifi/service/java)
tests/com/android/server/wifi(files fromframeworks/opt/net/wifi/tests)
proto/Android.bpproguard.flagswifi.rc
OsuLogin/(files fromframeworks/base/packages/OsuLogin)ServiceResources/(new in Android 12, Overlay APK manifest is stored here)res/(new in Android 11, Wi-Fi configs extracted from fromframeworks/base/core/res/res)AndroidManifest.xmlAndroid.bp
WifiDialog/(new in Android 13 App to launch user dialogs requested by the service is stored here.)src/com/android/wifi/dialog(Contains the Activity the dialogs are launched from)
AndroidManifest.xmlAndroid.bp
ऊपर दी गई डायरेक्ट्री में ऐसा कोड भी शामिल होता है जो मॉड्यूलर सिस्टम कॉम्पोनेंट से बाहर रहता है और अपनी मौजूदा जगह पर रहता है. उदाहरण के लिए:
wificond interface(classes in packageandroid.net.wifi.nl80211, for example,WifiNl80211Manager)- Sample Resource Overlay app
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
ओईएम, सैंपल कमांड का इस्तेमाल करके, अपने पैच को ओरिजनल प्रोजेक्ट डायरेक्ट्री से नई प्रोजेक्ट डायरेक्ट्री में ले जा सकते हैं.
frameworks/base/wifi से पैच ले जाना
root/frameworks/base/wifi में पैच फ़ाइल जनरेट करना
git format-patch -1 commit --stdout > patch-file.txtroot/packages/modules/Wifi पर पैच फ़ाइल लागू करना
git am -p2 --directory=framework/ patch-file.txtframeworks/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के लिए SDK और सेवा क्लासOsuLoginServiceWifiResources
मॉड्यूल में ये कॉम्पोनेंट शामिल नहीं होते. ये कॉम्पोनेंट, ओईएम के एओएसपी बिल्ड का हिस्सा बने रहते हैं.
system/connectivity/wificondमें मौजूदwificondनेटिव कॉम्पोनेंटwificondइंटरफ़ेस (classes in packageandroid.net.wifi.nl80211, for example,WifiNl80211Manager)android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 में फ़ाइलें नहीं ले जाई जाती हैं, लेकिन आने वाले समय में ऐसा किया जा सकता है. फ़ाइल की जगह में किए गए बदलावों को पोर्ट करने में लगने वाली मेहनत को कम करने के लिए, हमारा सुझाव है कि ज़्यादा से ज़्यादा बदलावों को एओएसपी में अपस्ट्रीम किया जाए. इसके लिए, उन्हें Android 11 में पोर्ट करें या मालिकाना हक वाले एक्सटेंशन को रीफ़ैक्टर करके, फ़ॉर्मल Android एपीआई या वेंडर एचएएल एक्सटेंशन का इस्तेमाल करें, ताकि उन्हें एओएसपी कोड से अलग किया जा सके.
मॉड्यूल का फ़ॉर्मैट
वाई-फ़ाई मॉड्यूल (com.android.wifi)
APEX फ़ॉर्मैट में है और यह Android 11 या इसके बाद के वर्शन वाले डिवाइसों
के लिए उपलब्ध है. APEX फ़ाइल में ये कॉम्पोनेंट शामिल होते हैं.
- एसडीके लाइब्रेरी (
framework-wifi.jar) - सेवा लाइब्रेरी (
service-wifi.jar) - OsuLogin APK (
OsuLoginGoogle.apk) - संसाधन APK (
ServiceWifiResourcesGoogle.apk) - डब्ल्यूएफ़ए सर्टिफ़िकेट
मॉड्यूल की डिपेंडेंसी
वाई-फ़ाई मॉड्यूल, इन कॉम्पोनेंट पर निर्भर करता है.
- कनेक्टिविटी
- टेलीफ़ोनी
- प्रोटो लाइब्रेरी
- सिस्टम के अन्य कॉम्पोनेंट
- वाई-फ़ाई एचएएल
wificondbouncycastleksoap2libnanohttpd
यह मॉड्यूल, फ़्रेमवर्क के साथ सिर्फ़ स्टेबल @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 होता है. इसलिए, वाई-फ़ाई कॉन्फ़िगरेशन को सफलतापूर्वक ओवरले करने के लिए, आपको ओवरले एपीके के targetPackage को com.google.android.wifi.resources पर सेट करना होगा.
कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट माइग्रेट करना
वाई-फ़ाई मॉड्यूल, एओएसपी वाई-फ़ाई कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट को ही पार्स कर सकता है. अगर आपने पहले वाई-फ़ाई कॉन्फ़िगरेशन स्टोरेज फ़ॉर्मैट में बदलाव किया है (जिसमें उपयोगकर्ता की सेव की गई नेटवर्क सूची शामिल है), तो आपको किसी ऐसे Android वर्शन पर डिवाइस अपग्रेड करते समय उस डेटा को एओएसपी फ़ॉर्मैट में बदलना होगा जिसमें वाई-फ़ाई मॉड्यूल शामिल है. इस कन्वर्ज़न के लिए ज़रूरी हुक, android.net.wifi.WifiMigration क्लास में मौजूद हैं.
फ़ॉर्मैट कन्वर्ज़न को इन तरीकों से लागू करें.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)एओएसपी फ़ॉर्मैट में बदले गए, वाई-फ़ाई के शेयर किए गए स्टोर फ़ाइल के कॉन्टेंट को पाने के लिए, वाई-फ़ाई मॉड्यूल इसे लागू करता है.
ये फ़ाइलें, Android 10 में डिवाइस पर
/data/misc/wifiफ़ोल्डर में सेव की गई थीं.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)एओएसपी फ़ॉर्मैट में बदले गए, वाई-फ़ाई के उपयोगकर्ता के हिसाब से स्टोर फ़ाइल के कॉन्टेंट को पाने के लिए, वाई-फ़ाई मॉड्यूल इसे लागू करता है.
ये फ़ाइलें, Android 10 में डिवाइस पर
/data/misc_ce/<userId>/wifiफ़ोल्डर में सेव की गई थीं.
छुपे हुए वाई-फ़ाई एपीआई ऐक्सेस करना
वाई-फ़ाई मॉड्यूल में @hide के साथ एनोटेट किए गए सिंबल (क्लास, तरीके, फ़ील्ड वगैरह) उसके सार्वजनिक एपीआई सर्फ़ेस का हिस्सा नहीं होते. साथ ही, मॉड्यूल इंस्टॉल किए गए डिवाइसों पर इन्हें ऐक्सेस नहीं किया जा सकता. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल शामिल नहीं है वे इन चरणों का इस्तेमाल करके, @hide वाई-फ़ाई एपीआई का इस्तेमाल जारी रख सकते हैं.
packages/modules/Wifi/framework/Android.bpपर,framework-wifiपर लगाई गई दिखने की पाबंदियां हटाएं. इसके लिए,impl_library_visibilityएट्रिब्यूट को सार्वजनिक पर सेट करें.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", ], }पक्का करें कि
framework-wifi.implकी सूची मेंframework,libsसे पहले दिखे.libsएट्रिब्यूट में डिपेंडेंसी का क्रम अहम होता है.
छुपे हुए फ़्रेमवर्क एपीआई ऐक्सेस करना
वाई-फ़ाई मॉड्यूल के बाहर @hide के साथ एनोटेट किए गए सिंबल को, वाई-फ़ाई मॉड्यूल में मौजूद कोड से ऐक्सेस नहीं किया जा सकता. जिन डिवाइसों में वाई-फ़ाई मॉड्यूल शामिल नहीं है वे frameworks/opt/net/wifi/service/Android.bp में ये बदलाव करके, service-wifi में @hide बाहरी एपीआई (उदाहरण के लिए, framework.jar से) का इस्तेमाल जारी रख सकते हैं.
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), वाई-फ़ाई मॉड्यूल की क्षमताओं की पुष्टि करता है. इसके लिए, मॉड्यूल के हर रिलीज़ पर, सीटीएस के टेस्ट का एक पूरा सेट चलाया जाता है. वाई-फ़ाई की जांच करना, डीबग करना, और उसे बेहतर बनाना लेख में बताए गए टेस्ट भी चलाए जा सकते हैं.