ওয়াইফাই

Wi-Fi মডিউলটি আপডেটযোগ্য, যার অর্থ এটি স্বাভাবিক অ্যান্ড্রয়েড রিলিজ চক্রের বাইরে কার্যকারিতার আপডেট পেতে পারে। এই মডিউলটিতে নিম্নলিখিত উপাদান রয়েছে।

Wi-Fi মডিউল উপাদান

চিত্র 1. Wi-Fi মডিউল উপাদান এবং আর্কিটেকচার

Wi-Fi মডিউল নিম্নলিখিত সুবিধা প্রদান করে।

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

  • অ্যাপ ডেভেলপাররা প্ল্যাটফর্ম ফ্র্যাগমেন্টেশন হ্রাস পায়।

  • 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গুলি তাদের প্যাচগুলিকে মূল প্রকল্প ডিরেক্টরি থেকে নতুন প্রকল্প ডিরেক্টরিতে সরাতে সাহায্য করার জন্য নমুনা কমান্ডগুলি ব্যবহার করতে পারে৷

ফ্রেমওয়ার্ক/বেস/ওয়াইফাই থেকে একটি প্যাচ সরানো হচ্ছে

রুট/ফ্রেমওয়ার্ক/বেস/ওয়াইফাই-এ প্যাচ ফাইল তৈরি করা হচ্ছে

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 এর জন্য মডিউল সীমানা

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

অ্যান্ড্রয়েড 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 সার্টিফিকেট

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

Wi-Fi মডিউল নিম্নলিখিত উপাদানগুলির উপর নির্ভর করে।

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

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

কাস্টমাইজ করা

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

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

চিত্র 2. Wi-Fi মডিউল কাস্টমাইজেশন

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

কনফিগারেশন স্টোরেজ বিন্যাস স্থানান্তর করা হচ্ছে

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

নিম্নলিখিত পদ্ধতিতে বিন্যাস রূপান্তর বাস্তবায়ন করুন।

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

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

    • এই ফাইলগুলি আগে (Android 10-এ) ডিভাইসের /data/misc/wifi ফোল্ডারে সংরক্ষিত ছিল।

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

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

    • এই ফাইলগুলি আগে (Android 10-এ) ডিভাইসের /data/misc_ce/<userId>/wifi ফোল্ডারে সংরক্ষিত ছিল।

লুকানো Wi-Fi API অ্যাক্সেস করা হচ্ছে

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

  1. packages/modules/Wifi/framework/Android.bpimpl_library_visibility অ্যাট্রিবিউটকে পাবলিকের জন্য পরিবর্তন করে framework-wifi এ স্থাপিত দৃশ্যমানতা সীমাবদ্ধতা সরিয়ে দিন।

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

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

Wi-Fi মডিউলের বাইরে @hide দিয়ে টীকাযুক্ত চিহ্নগুলি Wi-Fi মডিউলের মধ্যে কোড দ্বারা অ্যাক্সেস করা যাবে না। যে ডিভাইসগুলিতে Wi-Fi মডিউল অন্তর্ভুক্ত নেই frameworks/opt/net/wifi/service/Android.bp এ নিম্নলিখিত পরিবর্তনগুলি করে service-wifi -তে @hide বাহ্যিক API (উদাহরণস্বরূপ, framework.jar থেকে) ব্যবহার করা চালিয়ে যেতে পারে৷ 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",
        ],
    }
    

পরীক্ষামূলক

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