ওয়াই-ফাই

ওয়াই-ফাই মডিউল আপডেট করা যায়, অর্থাৎ এটি সাধারণ 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)
  • Sample Resource Overlay অ্যাপ
  • 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

প্যাকেজ/মডিউল/ওয়াই-ফাইয়ে দুটি প্যাচ প্রয়োগ করা

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 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
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

এই মডিউলটি শুধুমাত্র স্থিতিশীল @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 ব্যবহার করা চালিয়ে যেতে পারবে।

  1. 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.
        ],
        ...
    }
    
  2. লাইব্রেরি অ্যাক্সেস @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",
        ],
    }
    
  3. libs-এর তালিকায় framework-এর আগে framework-wifi.impl দেখা যাচ্ছে কিনা তা নিশ্চিত করুন । libs অ্যাট্রিবিউটে নির্ভরতার ক্রম গুরুত্বপূর্ণ।

লুকানো ফ্রেমওয়ার্ক API অ্যাক্সেস করুন

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

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

পরীক্ষা করা

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