কম্প্যাটিবিলিটি ফ্রেমওয়ার্ক টুল

Android 11-এ নতুন ডেভেলপার টুল চালু করা হয়েছে যার মাধ্যমে Android প্ল্যাটফর্মের নতুন ভার্সনে আচরণগত পরিবর্তনের সাথে আপনার অ্যাপের আচরণ পরীক্ষা ও ডিবাগ করা যায়। এই টুলগুলি হল কম্প্যাটিবিলিটি ফ্রেমওয়ার্ক-এর অংশ যা অ্যাপ ডেভেলপারদের ডেভেলপার বিকল্প বা ADB ব্যবহার করে ব্রেকিং পরিবর্তনগুলি আলাদাভাবে চালু এবং বন্ধ করতে দেয়। লেটেস্ট স্টেবল API ভার্সন টার্গেট করার জন্য প্রস্তুতি নেওয়ার সময় এবং Android-এর পরবর্তী ভার্সনের প্রিভিউ রিলিজের সাথে আপনার অ্যাপ পরীক্ষা করার সময় এই নমনীয়তা ব্যবহার করুন।

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

কোন কোন পরিবর্তন চালু করা হয়েছে তা কীভাবে শনাক্ত করবেন

আচরণগত পরিবর্তন চালু করা হলে, সেই পরিবর্তনের ফলে প্রভাবিত হওয়া প্ল্যাটফর্ম API-কে আপনার অ্যাপ কীভাবে অ্যাক্সেস করবে, তা প্রভাবিত হতে পারে। ডেভেলপার বিকল্প, logcat বা ADB কমান্ড ব্যবহার করে কোন কোন আচরণগত পরিবর্তন চালু করা হয়েছে তা আপনি চেক করতে পারবেন।

ডেভেলপার বিকল্প ব্যবহার করে চালু করা পরিবর্তনগুলি শনাক্ত করুন

ছবি ১. ডেভেলপার বিকল্পে অ্যাপের মানানসই সংক্রান্ত পরিবর্তন স্ক্রিন।

আপনি দেখতে পারবেন কোন পরিবর্তনগুলি চালু করা আছে এবং ডিভাইসের ডেভেলপার বিকল্পে সেই পরিবর্তনগুলি চালু বা বন্ধ করতে পারবেন। এইসব বিকল্প অ্যাক্সেস করতে, এই ধাপগুলি অনুসরণ করুন:

  1. ডেভেলপার বিকল্প আগে থেকে চালু করা না থাকলে, সেগুলি চালু করুন।
  2. আপনার ডিভাইসের সেটিংস অ্যাপ খুলুন এবং সিস্টেম > উন্নত > ডেভেলপার বিকল্প > অ্যাপ কম্প্যাটিবিলিটি পরিবর্তন বিকল্পে নেভিগেট করুন।
  3. তালিকা থেকে আপনার অ্যাপ বেছে নিন।

প্রতিটি আচরণগত পরিবর্তন সাধারণত নিম্নলিখিত দুটি বিভাগের মধ্যে একটির অন্তর্গত:

  • অ্যাপের targetSdkVersion নির্বিশেষে, Android-এর সেই ভার্সনে রান করা সব অ্যাপকে প্রভাবিত করে এমন পরিবর্তন।

    কম্প্যাটিবিলিটি ফ্রেমওয়ার্কে এইসব পরিবর্তন ডিফল্ট হিসেবে চালু করা থাকে এবং UI-তে ডিফল্ট হিসেবে চালু করা পরিবর্তন বিভাগে তালিকাভুক্ত করা থাকে।

  • পরিবর্তনগুলি শুধুমাত্র নির্দিষ্ট Android ভার্সন টার্গেট করা অ্যাপগুলিকে প্রভাবিত করে। এইসব পরিবর্তন শুধুমাত্র Android-এর নির্দিষ্ট ভার্সনকে টার্গেট করা অ্যাপকে প্রভাবিত করে বলে, এগুলিকে targetSDKVersion দ্বারা গেট করা পরিবর্তন হিসেবেও উল্লেখ করা হয়।

    আপনার অ্যাপ যদি তালিকাভুক্ত API ভার্সনের চেয়ে উচ্চতর ভার্সনকে টার্গেট করে, তাহলে কম্প্যাটিবিলিটি ফ্রেমওয়ার্কে এইসব পরিবর্তন ডিফল্ট হিসেবে চালু করা হয়। যেমন, Android 13 (API লেভেল 33)-এ targetSDKVersion দ্বারা গেট করা আচরণগত পরিবর্তন UI-তে targetSdkVersion >=33-এর জন্য চালু করা হয়েছে শীর্ষক বিভাগে তালিকাভুক্ত করা হবে। Android-এর কিছু পুরনো ভার্সনে, এই বিভাগের নাম "SDK API_LEVEL-এর পরে চালু করা হয়েছে" হিসেবে দেখানো হয়।

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

logcat ব্যবহার করে চালু করা পরিবর্তন শনাক্ত করুন

প্রতিটি আচরণ পরিবর্তনের জন্য, আপনার অ্যাপের প্রসেস চলাকালীন প্রথমবার যখন আপনার অ্যাপ প্রভাবিত API কল করে, তখন সিস্টেম এই ধরনের একটি লগক্যাট মেসেজ আউটপুট করে:

D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED

প্রতিটি logcat মেসেজে নিম্নলিখিত তথ্য থাকে:

আইডি পরিবর্তন করুন
কোন পরিবর্তন অ্যাপকে প্রভাবিত করছে তা দেখায়। এই ভ্যালু অ্যাপের মানানসই সংক্রান্ত পরিবর্তন স্ক্রিনে (ছবি ১ দেখুন) তালিকাভুক্ত আচরণ সংক্রান্ত পরিবর্তনের মধ্যে কোনও একটির সাথে ম্যাপ করে। এই উদাহরণে, 194833441 ম্যাপ করে NOTIFICATION_PERM_CHANGE_ID-এ।
UID
পরিবর্তনের ফলে কোন অ্যাপ প্রভাবিত হয়েছে তা দেখায়।
রাজ্য

পরিবর্তনটি অ্যাপকে প্রভাবিত করছে কিনা তা দেখায়।

স্ট্যাটাস এই মানগুলির মধ্যে একটি হতে পারে:

রাজ্য অর্থ
ENABLED পরিবর্তনটি চালু করা হয়েছে এবং অ্যাপটি যদি পরিবর্তিত API ব্যবহার করে, তাহলে এটি অ্যাপের আচরণকে প্রভাবিত করবে।
DISABLED

পরিবর্তনটি বন্ধ করা আছে এবং অ্যাপে কোনও প্রভাব ফেলবে না।

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

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

ADB ব্যবহার করে চালু করা পরিবর্তন শনাক্ত করুন

সম্পূর্ণ ডিভাইসে পরিবর্তনের সম্পূর্ণ সেট (চালু এবং বন্ধ করা, দুটিই) দেখতে নিম্নলিখিত ADB কমান্ড রান করুন:

adb shell dumpsys platform_compat

প্রতিটি পরিবর্তনের জন্য আউটপুটে নিম্নলিখিত তথ্য দেখানো হয়:

আইডি পরিবর্তন করুন
এই আচরণ পরিবর্তনের জন্য অনন্য শনাক্তকারী। যেমন, 194833441।
নাম
এই আচরণ পরিবর্তনের নাম। যেমন, NOTIFICATION_PERM_CHANGE_ID।
targetSDKVersion সংক্রান্ত মাপকাঠি

কোন targetSDKVersion-এর মাধ্যমে পরিবর্তনটি গেট করা হয়েছে (যদি থাকে)।

যেমন, এই পরিবর্তন যদি শুধু SDK ভার্সন 33 বা তার পরবর্তী ভার্সনকে টার্গেট করা অ্যাপের জন্য চালু করা হয়, তাহলে enableAfterTargetSdk=32 আউটপুট হিসেবে দেখানো হয়। পরিবর্তনটি targetSDKVersion দ্বারা গেটেড না হলে, enableAfterTargetSdk=0 আউটপুট হয়।

প্যাকেজ ওভাররাইড

প্রতিটি প্যাকেজের নাম যেখানে পরিবর্তনের ডিফল্ট স্ট্যাটাস (চালু বা বন্ধ করা) ওভাররাইড করা হয়েছে।

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

packageOverrides={com.my.package=false}

targetSDKVersion-এর মাধ্যমে গেট করা পরিবর্তনগুলি ডিফল্ট হিসেবে চালু বা বন্ধ করা যেতে পারে, তাই প্যাকেজের তালিকায় true বা false-এর উভয় উদাহরণ অন্তর্ভুক্ত থাকতে পারে, যা প্রতিটি অ্যাপের targetSDKVersion-এর উপর নির্ভর করে। যেমন:

packageOverrides={com.my.package=true, com.another.package=false}

নির্দিষ্ট পরিবর্তন সম্পর্কে আরও জানুন

কম্প্যাটিবিলিটি ফ্রেমওয়ার্কে আচরণগত পরিবর্তনের সম্পূর্ণ তালিকা প্রতিটি Android ভার্সনের ডকুমেন্টেশনের অংশ হিসেবে অন্তর্ভুক্ত করা হয়েছে। আপনি Android-এর যে ভার্সনের জন্য অ্যাপ পরীক্ষা করছেন, তার উপর নির্ভর করে আরও তথ্যের জন্য নিম্নলিখিত লিঙ্কগুলি দেখুন:

কখন পরিবর্তন টগল করতে হবে

কম্প্যাটিবিলিটি ফ্রেমওয়ার্কের মূল উদ্দেশ্য হল Android-এর নতুন ভার্সনে আপনার অ্যাপ পরীক্ষা করার সময় আপনাকে নিয়ন্ত্রণ ও নমনীয়তা প্রদান করা। এই বিভাগে কিছু কৌশল বর্ণনা করা হয়েছে যা আপনি অ্যাপ পরীক্ষা ও ডিবাগ করার সময় পরিবর্তন টগল করে চালু বা বন্ধ করার সময় নির্ধারণ করতে ব্যবহার করতে পারেন।

কখন টগল পরিবর্তন বন্ধ করতে হবে

পরিবর্তন বন্ধ করার জন্য টগল কখন করতে হবে তা সাধারণত নির্ভর করে পরিবর্তনটি targetSDKVersion দ্বারা গেট করা হয়েছে কিনা তার উপর।

সব অ্যাপের জন্য পরিবর্তন চালু করা হয়েছে

আপনার অ্যাপের targetSDKVersion যাই হোক না কেন, নির্দিষ্ট প্ল্যাটফর্ম ভার্সনের জন্য ডিফল্ট হিসেবে সব অ্যাপকে প্রভাবিত করে এমন পরিবর্তন চালু করা হয়, তাই আপনার অ্যাপ সেই প্ল্যাটফর্ম ভার্সনে রান করে আপনি দেখতে পারবেন যে আপনার অ্যাপ প্রভাবিত হয়েছে কিনা।

যেমন, আপনি যদি Android 16 (API লেভেল 36) টার্গেট করার প্রস্তুতি নেন, তাহলে Android 16 রান করছে এমন ডিভাইসে আপনার অ্যাপ ইনস্টল করতে এবং আপনার সাধারণ টেস্টিং ওয়ার্কফ্লো ব্যবহার করে আপনার অ্যাপ টেস্ট করতে পারবেন। আপনার অ্যাপে সমস্যা দেখা দিলে, আপনি সেই পরিবর্তনটি বন্ধ করতে পারেন যা সমস্যার কারণ হচ্ছে এবং অন্যান্য সমস্যার জন্য পরীক্ষা চালিয়ে যেতে পারেন।

এই পরিবর্তনগুলি targetSDKVersion নির্বিশেষে সমস্ত অ্যাপকে প্রভাবিত করতে পারে, তাই targetSDKVersion দ্বারা গেট করা পরিবর্তনের আগে এই পরিবর্তনগুলির জন্য আপনার অ্যাপ পরীক্ষা করুন এবং আপডেট করুন। এটি নিশ্চিত করতে সাহায্য করে যে ব্যবহারকারীরা প্ল্যাটফর্মের নতুন ভার্সনে আপডেট করলে তাদের অভিজ্ঞতা খারাপ হবে না।

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

targetSDKVersion-এর মাধ্যমে পরিবর্তন গেট করা হয়েছে

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

আপনার অ্যাপ এইসব পরিবর্তনের মধ্যে একাধিক পরিবর্তন দ্বারা প্রভাবিত হতে পারে, তাই আপনার অ্যাপ পরীক্ষা ও ডিবাগ করার সময় আপনাকে এইসব পরিবর্তনের মধ্যে কিছু পরিবর্তন আলাদাভাবে টগল করে বন্ধ করতে হতে পারে।

কখন পরিবর্তন টগল করে চালু করতে হবে

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

যেমন, আপনি হয়ত পরবর্তী targetSdkVersion-এ প্ল্যাটফর্মে হওয়া একাধিক পরিবর্তনের সাথে আপনার অ্যাপের সামঞ্জস্য পরীক্ষা করছেন। ডেভেলপার বিকল্প বা ADB কমান্ড ব্যবহার করে, আপনি অ্যাপ ম্যানিফেস্ট পরিবর্তন করে এবং একবারে প্রতিটি পরিবর্তন বেছে নেওয়ার পরিবর্তে, প্রতিটি গেটেড পরিবর্তন এক এক করে চালু এবং পরীক্ষা করতে পারবেন।

এই অতিরিক্ত কন্ট্রোল আপনাকে আলাদাভাবে পরিবর্তন পরীক্ষা করতে এবং আপনার অ্যাপের একাধিক অংশ একসাথে ডিবাগ ও আপডেট করা এড়াতে সাহায্য করতে পারে।

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

পরিবর্তন চালু বা বন্ধ করার জন্য টগল করুন

কম্প্যাটিবিলিটি ফ্রেমওয়ার্ক আপনাকে ডেভেলপার বিকল্প বা ADB কমান্ড ব্যবহার করে প্রতিটি পরিবর্তন টগল করে চালু বা বন্ধ করতে দেয়। কারণ, টগল করে পরিবর্তন চালু বা বন্ধ করলে আপনার অ্যাপ ক্র্যাশ করতে পারে বা গুরুত্বপূর্ণ নিরাপত্তা সংক্রান্ত পরিবর্তন বন্ধ হয়ে যেতে পারে, তাই আপনি কখন পরিবর্তন টগল করতে পারবেন সেই বিষয়ে কিছু বিধিনিষেধ আছে।

ডেভেলপার বিকল্প ব্যবহার করে পরিবর্তন টগল করুন

পরিবর্তন চালু বা বন্ধ করতে ডেভেলপার বিকল্প ব্যবহার করুন। ডেভেলপার বিকল্প খুঁজে পেতে, এই ধাপগুলি অনুসরণ করুন:

  1. ডেভেলপার বিকল্প আগে থেকে চালু করা না থাকলে, সেগুলি চালু করুন।
  2. আপনার ডিভাইসের সেটিংস অ্যাপ খুলুন এবং সিস্টেম > উন্নত > ডেভেলপার বিকল্প > অ্যাপ কম্প্যাটিবিলিটি পরিবর্তন বিকল্পে নেভিগেট করুন।
  3. তালিকা থেকে আপনার অ্যাপ বেছে নিন।
  4. পরিবর্তনের তালিকা থেকে, আপনি যে পরিবর্তনটি টগল করে চালু বা বন্ধ করতে চান সেটি খুঁজুন এবং সুইচটিতে ট্যাপ করুন।
পরিবর্তনের তালিকা যা টগল করে চালু বা বন্ধ করা যেতে পারে
ছবি ২. টগল করে পরিবর্তন চালু বা বন্ধ করা।

ADB ব্যবহার করে পরিবর্তন টগল করুন

ADB ব্যবহার করে কোনও পরিবর্তন টগল করে চালু বা বন্ধ করতে, নিম্নলিখিত কমান্ডগুলির মধ্যে একটি রান করুন:

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

CHANGE_ID (যেমন, 194833441) অথবা CHANGE_NAME (যেমন, NOTIFICATION_PERM_CHANGE_ID) এবং আপনার অ্যাপের PACKAGE_NAME পাস করুন।

এছাড়াও, আপনি নিম্নলিখিত কমান্ড ব্যবহার করে কোনও পরিবর্তনকে তার ডিফল্ট অবস্থায় রিসেট করতে পারবেন, ADB বা ডেভেলপার বিকল্প ব্যবহার করে আপনি যে ওভাররাইড সেট করেছেন তা সরিয়ে দিতে পারবেন:

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

পরিবর্তন টগল করার উপর বিধিনিষেধ

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

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

বিল্ডের ধরন ডিবাগ করা যায় না এমন অ্যাপ ডিবাগ করা যায় এমন অ্যাপ
সব পরিবর্তন targetSDKVersion-এর মাধ্যমে পরিবর্তন গেট করা হয়েছে অন্যান্য সব পরিবর্তন
ডেভেলপার প্রিভিউ বা বিটা বিল্ড টগল করা যাচ্ছে না টগল করতে পারবে টগল করতে পারবে
পাবলিক ইউজার বিল্ড টগল করা যাচ্ছে না টগল করতে পারবে টগল করা যাচ্ছে না