ওয়াই-ফাই মডিউল আপডেট করা যায়, অর্থাৎ এটি সাধারণ 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)- Sample Resource Overlay অ্যাপ
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
OEM, আসল প্রোজেক্ট ডিরেক্টরি থেকে নতুন প্রোজেক্ট ডিরেক্টরিতে প্যাচ সরানোর জন্য নমুনা কমান্ড ব্যবহার করতে পারে।
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
প্যাকেজ/মডিউল/ওয়াই-ফাইয়ে দুটি প্যাচ প্রয়োগ করা
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
মডিউলটি নিম্নলিখিত কম্পোনেন্ট বাদ দেয়, যা OEM-এর AOSP বিল্ডের অংশ হিসেবে থাকে।
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 সার্টিফিকেট
মডিউল ডিপেন্ডেন্সি
ওয়াই-ফাই মডিউল নিম্নলিখিত কম্পোনেন্টের উপর নির্ভর করে।
- কানেক্টিভিটি
- টেলিফোনি
- প্রোটো লাইব্রেরি
- বিবিধ সিস্টেম কম্পোনেন্ট
- ওয়াই-ফাই HAL
wificondbouncycastleksoap2libnanohttpd
এই মডিউলটি শুধুমাত্র স্থিতিশীল @SystemApi (কোনও
@hide API ব্যবহার করা হয় না) ব্যবহার করে ফ্রেমওয়ার্কের সাথে ইন্টার্যাক্ট করে এবং প্ল্যাটফর্ম
সিগনেচারের পরিবর্তে Google সিগনেচার দিয়ে সাইন করা হয়।
কাস্টমাইজেশন
Wi-Fi মডিউল সরাসরি কাস্টমাইজ করা যায় না, তবে আপনি রানটাইম রিসোর্স ওভারলে (RRO) বা ক্যারিয়ার কনফিগারেশন ব্যবহার করে কনফিগারেশন কাস্টমাইজ করতে পারবেন।
ছবি ২. ওয়াই-ফাই মডিউল কাস্টমাইজেশন
- ছোটখাটো কাস্টমাইজেশনের জন্য, RRO
config-তে সেটিংস চালু বা বন্ধ করুন। - আরও বেশি কন্ট্রোল পেতে,
@SystemAPIহিসেবে এক্সপোজ করা যেকোনও ক্যারিয়ার কনফিগারেশন কী-এর জন্য কনফিগার ভ্যালু কাস্টমাইজ করুন।
রানটাইম রিসোর্স ওভারলে ব্যবহার করুন
আপনি RRO ব্যবহার করে ডিফল্ট কনফিগারেশন ওভাররাইড করার মাধ্যমে Wi-Fi মডিউল কাস্টমাইজ করতে পারেন। ওভারলে করা যায় এমন কনফিগারেশনের তালিকা পেতে, 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 রিলিজ ভার্সনে ডিভাইস আপগ্রেড করার সময়
আপনাকে অবশ্যই সেই ডেটা 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ফোল্ডারে সেভ করা থাকত।
লুকানো ওয়াই-ফাই API অ্যাক্সেস করুন
Wi-Fi
মডিউলে @hide দিয়ে অ্যানোটেট করা চিহ্ন (ক্লাস, মেথড, ফিল্ড ইত্যাদি) এর পাবলিক API সারফেসের অংশ নয় এবং মডিউল ইনস্টল করা
ডিভাইসে অ্যাক্সেস করা যাবে না। যেসব ডিভাইসে ওয়াই-ফাই
মডিউল নেই, সেগুলি নিম্নলিখিত ধাপ অনুসরণ করে @hide ওয়াই-ফাই API ব্যবহার করা চালিয়ে যেতে পারবে।
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ওয়াই-ফাই API-কে অনুমতি দিতে বিল্ড রুল পরিবর্তন করুন। যেমন, নিচে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অ্যাট্রিবিউটে নির্ভরতার ক্রম গুরুত্বপূর্ণ।
লুকানো ফ্রেমওয়ার্ক API অ্যাক্সেস করুন
ওয়াই-ফাই মডিউলের বাইরে @hide দিয়ে অ্যানোটেট করা সিম্বল ওয়াই-ফাই মডিউলের মধ্যে থাকা
কোড অ্যাক্সেস করতে পারে না। যেসব ডিভাইসে ওয়াই-ফাই মডিউল নেই সেগুলি
@hide এক্সটার্নাল API (যেমন, 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 কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) প্রতিটি মডিউল রিলিজের উপর CTS টেস্টের একটি বিস্তৃত সেট চালিয়ে ওয়াই-ফাই মডিউলের ক্ষমতা যাচাই করে। এছাড়াও, আপনি Wi-Fi টেস্ট, ডিবাগ ও টিউন করা নিবন্ধে বর্ণিত টেস্ট চালাতে পারবেন।