ওয়াই-ফাই, ওয়াই-ফাই, ওয়াই-ফাই, ওয়াই-ফাই

ওয়াই-ফাই মডিউলটি আপডেটেবল, অর্থাৎ এটি সাধারণ অ্যান্ড্রয়েড রিলিজ চক্রের বাইরেও বিভিন্ন সক্ষমতার আপডেট গ্রহণ করতে পারে। এই মডিউলটিতে নিম্নলিখিত উপাদানগুলো রয়েছে।

ওয়াই-ফাই মডিউলের উপাদানসমূহ

চিত্র ১. ওয়াই-ফাই মডিউলের উপাদান এবং গঠন।

ওয়াই-ফাই মডিউলটি নিম্নলিখিত সুবিধাগুলো প্রদান করে।

  • মডিউল আপডেটের মাধ্যমে ব্যবহারকারীরা অ্যান্ড্রয়েড ডিভাইসজুড়ে একটি সামঞ্জস্যপূর্ণ ওয়াই-ফাই অভিজ্ঞতা এবং আন্তঃকার্যক্ষমতার সমস্যাগুলোর সমাধান পান।

  • অ্যাপ ডেভেলপাররা প্ল্যাটফর্মের বিভাজন হ্রাস পান।

  • OEM-রা ক্যারিয়ারের প্রয়োজনীয়তা পূরণ করার পাশাপাশি স্বতন্ত্র কাস্টমাইজেশনের খরচও কমাতে পারে (কারণ তাদের একই প্রয়োজনীয়তার ভিন্ন ভিন্ন বাস্তবায়নের প্রয়োজন হয় না)।

অ্যান্ড্রয়েড ১২ এবং অ্যান্ড্রয়েড ১৩ এর জন্য মডিউল সীমানা

  • 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/ (অ্যান্ড্রয়েড ১২-এর নতুন সংযোজন, ওভারলে এপিকে ম্যানিফেস্ট এখানে সংরক্ষিত থাকে)
      • res/ (অ্যান্ড্রয়েড ১১-এর নতুন বৈশিষ্ট্য, Wi-Fi কনফিগারেশন frameworks/base/core/res/res থেকে নেওয়া হয়)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (অ্যান্ড্রয়েড ১৩ অ্যাপে নতুন সংযোজন, যা সার্ভিসের অনুরোধে ইউজার ডায়ালগ চালু করার জন্য ব্যবহৃত হয় এবং এটি এখানে সংরক্ষিত থাকে।)
      • 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 থেকে একটি প্যাচ সরান

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

frameworks/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 -এ পরিবর্তন করুন।

প্রয়োজন অনুযায়ী কমিট বার্তাটি সম্পাদনা করুন।

অ্যান্ড্রয়েড ১১ এর জন্য মডিউল সীমানা

ওয়াই-ফাই সার্ভিসটি সিস্টেম সার্ভিস প্রসেসের ভেতরে চলতে থাকে। ওয়াই-ফাই মডিউলটিতে 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

অ্যান্ড্রয়েড ১১ ফাইল স্থানান্তর করে না, কিন্তু ভবিষ্যতের সংস্করণগুলো তা করতে পারে। ফাইলের অবস্থান পরিবর্তনের পোর্টিং-এর শ্রম কমাতে, আমরা সুপারিশ করি যে, অ্যান্ড্রয়েড ১১-এ পোর্ট করার পর অথবা প্রোপাইটারি এক্সটেনশনগুলোকে আনুষ্ঠানিক অ্যান্ড্রয়েড এপিআই বা ভেন্ডর এইচএএল এক্সটেনশন ব্যবহার করার জন্য রিফ্যাক্টর করে এওএসপি কোড থেকে আলাদা করার পর, যতটা সম্ভব পরিবর্তন এওএসপি-তে আপস্ট্রিম করা হোক।

মডিউল ফরম্যাট

ওয়াই-ফাই মডিউল ( com.android.wifi ) APEX ফরম্যাটে রয়েছে এবং এটি Android 11 বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলোর জন্য উপলব্ধ। APEX ফাইলটিতে নিম্নলিখিত উপাদানগুলো অন্তর্ভুক্ত রয়েছে।

  • এসডিকে লাইব্রেরি ( framework-wifi.jar )
  • সার্ভিস লাইব্রেরি ( service-wifi.jar )
  • OsuLogin APK ( OsuLoginGoogle.apk )
  • রিসোর্স এপিকে ( ServiceWifiResourcesGoogle.apk )
  • WFA সার্টিফিকেট

মডিউল নির্ভরতা

ওয়াই-ফাই মডিউলটি নিম্নলিখিত উপাদানগুলোর উপর নির্ভর করে।

  • সংযোগ
  • টেলিফোনি
  • প্রোটো লাইব্রেরি
  • বিবিধ সিস্টেম উপাদান
  • ওয়াই-ফাই এইচএএল
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

এই মডিউলটি শুধুমাত্র স্থিতিশীল @SystemApi (কোনো @hide API ব্যবহার ছাড়াই) ব্যবহার করে ফ্রেমওয়ার্কের সাথে যোগাযোগ করে এবং এটি প্ল্যাটফর্ম স্বাক্ষরের পরিবর্তে গুগল স্বাক্ষর দ্বারা স্বাক্ষরিত।

কাস্টমাইজেশন

ওয়াই-ফাই মডিউলটি সরাসরি কাস্টমাইজেশন সমর্থন করে না, তবে আপনি রানটাইম রিসোর্স ওভারলে (RRO) অথবা ক্যারিয়ার কনফিগ ব্যবহার করে এর কনফিগারেশন কাস্টমাইজ করতে পারেন।

ওয়াই-ফাই কাস্টমাইজেশন

চিত্র ২. ওয়াই-ফাই মডিউল কাস্টমাইজেশন

  • ছোটখাটো পরিবর্তনের জন্য, RRO config এ সেটিংস চালু বা বন্ধ করুন।
  • আরও বেশি নিয়ন্ত্রণের জন্য, @SystemAPI হিসেবে প্রকাশিত যেকোনো ক্যারিয়ার কনফিগারেশন কী-এর কনফিগারেশন মানগুলো কাস্টমাইজ করুন।

রানটাইম রিসোর্স ওভারলে ব্যবহার করুন

আপনি RRO ব্যবহার করে ডিফল্ট কনফিগারেশনগুলো ওভাররাইড করে ওয়াই-ফাই মডিউলটি কাস্টমাইজ করতে পারেন। ওভারলেযোগ্য কনফিগারেশনগুলোর তালিকার জন্য 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 এ সেট করে এবং Wi-Fi মডিউল দ্বারা সরবরাহ করা রিসোর্স APK-টির প্যাকেজ নেম com.google.android.wifi.resources , তাই Wi-Fi কনফিগারেশন সফলভাবে ওভারলে করার জন্য আপনাকে অবশ্যই ওভারলে APKS-এর targetPackage com.google.android.wifi.resources এ সেট করতে হবে।

কনফিগারেশন স্টোরেজ ফরম্যাট স্থানান্তর করুন

ওয়াই-ফাই মডিউল শুধুমাত্র AOSP ওয়াই-ফাই কনফিগারেশন স্টোরেজ ফরম্যাট পার্স করতে পারে। আপনি যদি আগে ওয়াই-ফাই কনফিগারেশন স্টোরেজ ফরম্যাট (যার মধ্যে ব্যবহারকারীর সংরক্ষিত নেটওয়ার্ক তালিকা অন্তর্ভুক্ত) পরিবর্তন করে থাকেন, তবে ওয়াই-ফাই মডিউলযুক্ত যেকোনো অ্যান্ড্রয়েড রিলিজে ডিভাইস আপগ্রেড করার সময় আপনাকে অবশ্যই সেই ডেটা AOSP ফরম্যাটে রূপান্তর করতে হবে। এই রূপান্তরের জন্য প্রয়োজনীয় হুকগুলো android.net.wifi.WifiMigration ক্লাসে রয়েছে।

নিম্নলিখিত মেথডগুলিতে ফরম্যাট রূপান্তরটি প্রয়োগ করুন।

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • AOSP ফরম্যাটে রূপান্তরিত Wi-Fi শেয়ার্ড স্টোর ফাইলের বিষয়বস্তু পুনরুদ্ধার করার জন্য Wi-Fi মডিউল দ্বারা এটি আহ্বান করা হয়।

    • এই ফাইলগুলো আগে (অ্যান্ড্রয়েড ১০-এ) ডিভাইসের /data/misc/wifi ফোল্ডারে সংরক্ষিত থাকত।

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • AOSP ফরম্যাটে রূপান্তরিত Wi-Fi ব্যবহারকারী-নির্দিষ্ট স্টোর ফাইলের বিষয়বস্তু পুনরুদ্ধার করার জন্য Wi-Fi মডিউল দ্বারা এটি আহ্বান করা হয়।

    • এই ফাইলগুলো আগে (অ্যান্ড্রয়েড ১০-এ) ডিভাইসের /data/misc_ce/<userId>/wifi ফোল্ডারে সংরক্ষিত থাকত।

লুকানো ওয়াই-ফাই এপিআই অ্যাক্সেস করুন

Wi-Fi মডিউলে @hide দিয়ে অ্যানোটেট করা সিম্বলগুলো (ক্লাস, মেথড, ফিল্ড, ইত্যাদি) এর পাবলিক API সারফেসের অংশ নয় এবং মডিউলটি ইনস্টল করা ডিভাইসগুলোতে এগুলো অ্যাক্সেস করা যায় না। যেসব ডিভাইসে Wi-Fi মডিউল অন্তর্ভুক্ত নেই, তারা নিম্নলিখিত ধাপগুলো অনুসরণ করে @hide Wi-Fi API ব্যবহার করা চালিয়ে যেতে পারে।

  1. packages/modules/Wifi/framework/Android.bp ফাইলে থাকা framework-wifi এর উপর আরোপিত দৃশ্যমানতার সীমাবদ্ধতা দূর করতে impl_library_visibility অ্যাট্রিবিউটটিকে public-এ পরিবর্তন করুন।

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. লাইব্রেরিকে @hide Wi-Fi 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",
        ],
    }
    
  3. নিশ্চিত করুন যে libs তালিকায় framework-wifi.impl framework এর আগে থাকে। libs অ্যাট্রিবিউটে নির্ভরতার ক্রম গুরুত্বপূর্ণ।

লুকানো ফ্রেমওয়ার্ক এপিআই অ্যাক্সেস করুন

ওয়াই-ফাই মডিউলের বাইরে @hide দিয়ে চিহ্নিত সিম্বলগুলো ওয়াই-ফাই মডিউলের ভেতরের কোড দ্বারা অ্যাক্সেস করা যায় না। যেসব ডিভাইসে ওয়াই-ফাই মডিউল অন্তর্ভুক্ত নেই frameworks/opt/net/wifi/service/Android.bp ফাইলে নিম্নলিখিত পরিবর্তনগুলো করে service-wifi তে @hide এক্সটার্নাল এপিআই (যেমন, framework.jar থেকে) ব্যবহার করা চালিয়ে যেতে পারে।

  1. wifi-service-pre-jarjar এবং service-wifi উভয় ফাইলে, sdk_version অ্যাট্রিবিউটটি পরিবর্তন করে core_platform করুন।

  2. wifi-service-pre-jarjar এবং service-wifi উভয় ফাইলের libs অ্যাট্রিবিউটে framework এবং android_system_server_stubs_current যোগ করুন।

  3. ফলাফলটি নিম্নলিখিত কোড নমুনার অনুরূপ কিনা তা যাচাই করুন।

    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",
        ],
    }
    

পরীক্ষা

অ্যান্ড্রয়েড কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) প্রতিটি মডিউল রিলিজে একগুচ্ছ ব্যাপক CTS টেস্ট চালানোর মাধ্যমে ওয়াই-ফাই মডিউলের সক্ষমতা যাচাই করে। এছাড়াও আপনি 'ওয়াই-ফাই টেস্ট, ডিবাগ এবং টিউন' অংশে বর্ণিত টেস্টগুলো চালাতে পারেন।