Google Play-এর টার্গেট API লেভেল 36 শর্তের মানে হলো, Android 16-এর নিচের কোনো লেভেলের জন্য তৈরি রিলিজ আর প্রকাশ করা যাবে না। অক্টোবর ২০২৬ অনুযায়ী, Play নিচের লেভেল টার্গেট করা প্রতিটি নতুন অ্যাপ ও প্রতিটি আপডেট প্রত্যাখ্যান করে, প্রায়ই Target SDK of artifact is too low বার্তা দিয়ে। পলিসি সতর্কবার্তা পাওয়া অ্যাপগুলো বাড়তি সময় চাইতে পারত, কিন্তু সেই এক্সটেনশন ১ নভেম্বর ২০২৬-এ শেষ হয়ে যায়। এই গাইডে দেখানো হয়েছে এক্সটেনশন এখনও কী দেয়, Expo, Flutter ও React Native কীভাবে API 36-এ নেবেন, এবং তা করার পর সাধারণত কী ভেঙে যায়।
টার্গেট API লেভেল 36-এর শর্ত আসলে কী আটকায়?
এটি সাবমিশন আটকায়। ৩১ আগস্ট ২০২৬ থেকে API 36 টার্গেট না করলে আপনি নতুন ফোন অ্যাপ বা আপডেট আপলোড করতে পারবেন না। ইতিমধ্যে লাইভ থাকা যেসব অ্যাপ API 35 বা তার বেশি টার্গেট করে, সেগুলো নতুন ব্যবহারকারীসহ সবার জন্য পুরোপুরি উপলব্ধ থাকে।
Google-এর টার্গেট API লেভেলের শর্তাবলি অনুযায়ী, "Google Play-তে সাবমিট করতে হলে নতুন অ্যাপ ও অ্যাপ আপডেটকে Android 16 (API লেভেল 36) বা তার বেশি টার্গেট করতে হবে।" ডিভাইসের ধরন অনুযায়ী শর্ত আলাদা, এবং একমাত্র পূর্ণ ব্যতিক্রম হলো একটি প্রতিষ্ঠানের ভেতরে অভ্যন্তরীণ বিতরণের জন্য তৈরি স্থায়ীভাবে প্রাইভেট অ্যাপ।
| ডিভাইসের ধরন | নতুন অ্যাপ ও আপডেট (৩১ আগস্ট ২০২৬ থেকে) | বিদ্যমান অ্যাপ পুরোপুরি উপলব্ধ থাকে যদি টার্গেট করে |
|---|---|---|
| ফোন, ট্যাবলেট, Android Auto | API 36 | API 35 বা তার বেশি |
| Wear OS | API 35 | API 34 বা তার বেশি |
| Android Automotive OS | API 35 | API 32 বা তার বেশি |
| Android TV | API 34 | API 33 বা তার বেশি |
| Android XR | API 34 | API 34 বা তার বেশি |
ওই লেভেলের নিচে থাকা বিদ্যমান অ্যাপ "শুধু সেই ডিভাইসগুলোতে উপলব্ধ থাকবে যেগুলোর Android OS আপনার অ্যাপের টার্গেট API লেভেলের সমান বা তার নিচে।" যারা আগেই ইনস্টল করেছেন, তারা আগের মতোই ব্যবহার চালিয়ে যান। তবে নতুন ফোনের কোনো ব্যবহারকারীকে জানানো হয় যে অ্যাপটি "Android-এর পুরোনো সংস্করণের জন্য তৈরি"।
১ নভেম্বর ২০২৬-এর আগে কি এখনও এক্সটেনশন পাওয়া যায়?
শুধু তখনই, যদি Play আপনার অ্যাপকে পলিসি সতর্কবার্তা পাঠিয়ে থাকে এবং অনুরোধের ফর্মটি এখনও সেখানে দেখা যায়। তবুও এক্সটেনশন সর্বোচ্চ ১ নভেম্বর ২০২৬ পর্যন্ত চলে, তাই এটি প্রায় শেষ হয়ে আসা কোনো ফিক্সের জন্য কয়েক দিনের বাড়তি সময় মাত্র, নতুন পরিকল্পনা নয়।
Google জানায় যে ক্ষতিগ্রস্ত অ্যাপগুলোকে সে "Notifications-এর মাধ্যমে একটি এক্সটেনশন অনুরোধ ফর্মের লিংক" পাঠায়, এবং ফর্মটি "Policy status পেজে সতর্কবার্তা বা সমস্যার ডিটেইলস পেজের মাধ্যমে পাওয়া যায়।" যেসব অ্যাপ ইতিমধ্যে নিয়ম মেনে চলে, Google তাদের কোনো ফর্ম দেখায় না।
- Play Console খুলে অ্যাপটি সিলেক্ট করুন।
- Inbox বা Notifications-এ টার্গেট API লেভেল সংক্রান্ত বার্তা খুঁজুন। সেটি থাকলে তার লিংক অনুসরণ করুন।
- না থাকলে Policy status-এ যান, টার্গেট API লেভেলের সতর্কবার্তা বা সমস্যাটি খুলুন, এবং তার ডিটেইলস পেজে এক্সটেনশন অনুরোধের ফর্ম খুঁজুন।
- প্রতিটি ক্ষতিগ্রস্ত অ্যাপের জন্য ফর্মটি পূরণ করুন। প্রতিটি অ্যাপের নিজস্ব সতর্কবার্তা থাকে।
- এক্সটেনশন মঞ্জুর হোক বা না হোক, ১ নভেম্বর ২০২৬-এর আগে API 36 বিল্ড আপলোড করার পরিকল্পনা রাখুন। ওই তারিখের পর আপডেটের জন্য API 36 লাগবে।
Expo, Flutter ও React Native কীভাবে API 36-এ নেবেন?
সবচেয়ে পরিষ্কার পথ হলো এমন ফ্রেমওয়ার্ক সংস্করণে আপগ্রেড করা যা ইতিমধ্যে API 36 টার্গেট করে: Expo SDK 54, React Native 0.81 বা Flutter 3.38। এখনই আপগ্রেড করতে না পারলে হাতে সংখ্যাটা বাড়াতে পারেন, তবে তখন Android 16-এর আচরণগত পরিবর্তনগুলোও আপনাকে নিজেই সামলাতে হবে।
| স্ট্যাক | যে সংস্করণ থেকে ডিফল্টভাবে API 36 টার্গেট করে | সংখ্যাটা কোথায় থাকে | আপগ্রেড করতে না পারলে ম্যানুয়াল পথ |
|---|---|---|---|
| Expo (managed / CNG) | SDK 54 (React Native 0.81) | prebuild তৈরি করে; expo-build-properties দিয়ে ওভাররাইড করুন | expo-build-properties প্লাগইনে targetSdkVersion: 36 এবং compileSdkVersion: 36 |
| React Native (bare) | 0.81 | android/build.gradle | compileSdk ও targetSdk 36 করুন, তারপর ম্যানিফেস্টে predictive back থেকে অপ্ট-আউট করুন |
| Flutter | 3.38 (flutter.targetSdkVersion = 36) | android/app/build.gradle(.kts) | হার্ডকোড করা 35-কে 36 বা flutter.targetSdkVersion দিয়ে বদলে দিন |
Expo। SDK 54 চেঞ্জলগ বলছে SDK 54 ও React Native 0.81 "এখন Android 16 টার্গেট করছে।" npx expo install expo@^54.0.0 --fix দিয়ে আপগ্রেড করুন, npx expo-doctor@latest চালান, আর Continuous Native Generation ব্যবহার করলে "আগের SDK সংস্করণের জন্য তৈরি করা android ও ios ডিরেক্টরি মুছে ফেলুন।" SDK 53-এ আপনি expo-build-properties প্লাগইনের মাধ্যমে targetSdkVersion: 36 সেট করার চেষ্টা করতে পারেন, কিন্তু React Native 0.79 এখনও onBackPressed দিয়ে ব্যাক সামলায়, তাই প্রকাশ করার আগে পরের অংশটি পড়ুন।
Flutter। Flutter 3.38 রিলিজ নোটে ডিফল্ট হিসেবে flutter.compileSdkVersion (API 36) ও flutter.targetSdkVersion (API 36) উল্লেখ আছে, এবং বলা হয়েছে "আপনার বিল্ড ফাইলে Flutter SDK-এর দেওয়া API লেভেল ভেরিয়েবল ব্যবহার করতে আমরা জোরালোভাবে উৎসাহ দিই।" 3.38 সংস্করণে ন্যূনতম Java 17-ও লাগে। আপনার অ্যাপ মডিউলে targetSdk = 35 হার্ডকোড করা থাকলে Flutter আপগ্রেড সেটি বদলাবে না, তাই ফাইলটি দেখে নিন।
Bare React Native। android/build.gradle-এ compileSdkVersion ও targetSdkVersion 36 করুন। 0.81 ও তার পরের সংস্করণে কাজ মোটামুটি শেষ। পুরোনো সংস্করণে AndroidManifest.xml-এর <application>-এ android:enableOnBackInvokedCallback="false"-ও যোগ করুন। এটি না থাকলে হার্ডওয়্যার ব্যাক বাটন ও ব্যাক জেসচার আপনার JavaScript নেভিগেশনকে এড়িয়ে যায়।
অ্যাপ Android 16 টার্গেট করা শুরু করলে কী ভাঙে?
সবচেয়ে বেশি ভাঙে ব্যাক নেভিগেশন ও বড় স্ক্রিনের লেআউট। API 36 টার্গেট হলে Android onBackPressed কল করা বন্ধ করে, edge-to-edge থেকে অপ্ট-আউট করতে দেয় না, এবং অন্তত ৬০০dp চওড়া ডিসপ্লেতে অরিয়েন্টেশন ও রিসাইজেবিলিটি লক উপেক্ষা করে।
Google-এর Android 16 আচরণগত পরিবর্তন থেকে ক্রস-প্ল্যাটফর্ম অ্যাপের জন্য সবচেয়ে গুরুত্বপূর্ণ পরিবর্তনগুলো:
- Predictive back: "
onBackPressedআর কল করা হয় না এবংKeyEvent.KEYCODE_BACKআর ডিসপ্যাচ করা হয় না।"android:enableOnBackInvokedCallback="false"সেট করা একটি সাময়িক অপ্ট-আউট। - Edge-to-edge:
windowOptOutEdgeToEdgeEnforcement"ডিপ্রিকেটেড ও নিষ্ক্রিয়", তাই হেডার বা নিচের বাটন স্ট্যাটাস বার বা জেসচার বারের নিচে চলে যেতে পারে। - বড় স্ক্রিন: ৬০০dp ও তার চেয়ে চওড়া ডিসপ্লেতে
screenOrientation,resizableActivityও অ্যাসপেক্ট-রেশিও সীমা উপেক্ষা করা হয়, ফলে শুধু-পোর্ট্রেট লেআউট টেনে লম্বা হয়ে যেতে পারে। গেম এর আওতামুক্ত।PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITYএকটি সাময়িক অপ্ট-আউট, যা "API লেভেল 37 টার্গেট করলে প্রযোজ্য হবে না।" - টেক্সট:
elegantTextHeightউপেক্ষা করা হয়, যা আরবি, থাই, তামিল ও আরও কয়েকটি লিপির লাইন হাইট বদলে দিতে পারে। - হেলথ সেন্সর:
BODY_SENSORS-এর জায়গায় এসেছেREAD_HEART_RATE-এর মতো সূক্ষ্ম হেলথ পারমিশন।
API 36-এ যাওয়ার সময় অন্য ডেভেলপাররা কী সমস্যায় পড়েছেন?
এখন পর্যন্ত প্রকাশ্য রিপোর্টে দুই ধরনের সমস্যা দেখা যায়: কোনো এরর ছাড়াই ব্যাক বাটনের আচরণ বদলে যাওয়া, এবং এমন লাইব্রেরি যার কারণে Play যে বান্ডেল পায় তার টার্গেট লেভেল প্রজেক্ট ফাইলে লেখা লেভেলের থেকে আলাদা হয়ে যায়।
Audius (React Native 0.79)। পুল রিকোয়েস্ট #14635-এ Audius টিম জানায়, Google Play Android সংস্করণ 1.5.186-এর দুটো আপলোডই Target SDK of artifact is too low দিয়ে প্রত্যাখ্যান করেছিল। তারা compileSdk ও targetSdk 35 থেকে 36 করে, build tools 36.0.0 সেট করে, এবং android.suppressUnsupportedCompileSdk=36 যোগ করে, কারণ "RN 0.79 AGP 8.8-এ পিন করা"। তারা enableOnBackInvokedCallback="false"-ও সেট করে, কারণ এটি ছাড়া ব্যাক "React Navigation-কে এড়িয়ে যেত।" পরে React Native 0.81-এ যাওয়ার পর আরেকটি PR এই অপ্ট-আউট সরিয়ে দেয়, কারণ 0.81 নিজেই একটি OnBackPressedCallback রেজিস্টার করে।
একটি Flutter 3.35.2 অ্যাপ। Flutter ইস্যু #174516-এ এক ডেভেলপার Gradle ও ম্যানিফেস্টে targetSdk 36 সেট করেছিলেন, কিন্তু Play Console তবুও জানাচ্ছিল "Your bundle targets SDK 34, but uses a Play Core library that cannot be used with that version." পুরোনো com.google.android.play:core:1.10.3 লাইব্রেরি সরানোর পর R8-এর "Missing classes" এরর আসে। সেগুলো ঠিক করার পর আসে "You can't rollout this release because it doesn't allow any existing users to upgrade to the newly added app bundles." শেষ পর্যন্ত ProGuard keep রুল যোগ করা, minSdk স্পষ্টভাবে সেট করা, এবং language, density ও ABI split বন্ধ করার পর বান্ডেলটি গৃহীত হয়, যদিও এতে ডাউনলোডের আকার বেড়ে যায়।
সাধারণ শিক্ষা: Gradle-এ সংখ্যা বদলালেই কাজ শেষ হয় না। Audius-কে রানটাইম আচরণ ঠিক করতে হয়েছিল, আর Flutter ডেভেলপারকে এমন একটি ডিপেন্ডেন্সি ঠিক করতে হয়েছিল যা Play বান্ডেল থেকে কী পড়ছে সেটাই বদলে দিচ্ছিল। শুধু কনফিগ ফাইল নয়, তৈরি হওয়া আর্টিফ্যাক্ট যাচাই করুন এবং Android 16 ডিভাইসে পরীক্ষা করুন।
আপলোডের আগে API 36 বিল্ড কীভাবে যাচাই করবেন?
রিলিজ বান্ডেল থেকেই টার্গেট লেভেল পড়ুন, তারপর বান্ডেলটি internal বা closed testing ট্র্যাকে দিয়ে Android 16-এ ব্যাক নেভিগেশন, ইনসেট ও ট্যাবলেট লেআউট পরীক্ষা করুন। এসব যাচাইয়ের চেয়ে একটি প্রত্যাখ্যান বা প্রোডাকশন বাগে অনেক বেশি সময় নষ্ট হয়।
উদাহরণ: একটি Expo SDK 53 অ্যাপ, যা API 35 টার্গেট করে এবং যার আরও একটি আপডেট দরকার।
npx expo install expo@^54.0.0 --fixচালান, তারপরnpx expo-doctor@latest, এবং যা রিপোর্ট করে তা ঠিক করুন।- প্রজেক্টে Continuous Native Generation ব্যবহার করলে পুরোনো
androidওiosফোল্ডার মুছে আবার বিল্ড করুন। নইলে নেটিভ আপগ্রেডের পরিবর্তনগুলো হাতে প্রয়োগ করুন। - রিলিজ AAB বিল্ড করুন, যেমন
eas build -p android --profile productionদিয়ে। bundletool dump manifest --bundle app.aab --xpath /manifest/uses-sdk/@android:targetSdkVersionদিয়ে টার্গেট নিশ্চিত করুন। এটি36প্রিন্ট করা উচিত।- internal testing-এ আপলোড করুন। একটি Android 16 ফোনে প্রতিটি নেস্টেড স্ক্রিনে ব্যাক চাপুন, হেডার ও নিচের বাটন সিস্টেম বারের নিচে লুকিয়ে যাচ্ছে না তা দেখুন, এবং একটি ট্যাবলেট বা রিসাইজেবল এমুলেটর ঘুরিয়ে দেখুন।
- Android 16 সংক্রান্ত ফিক্সের কথা উল্লেখ করে রিলিজ নোট লিখে প্রোডাকশনে প্রোমোট করুন।
টেস্টিং দ্রুত করতে আমাদের Google Play closed testing গাইডের টেস্টার সেটআপ ব্যবহার করুন, আর আপডেটের লেখার জন্য আমাদের রিলিজ নোটের উদাহরণ থেকে ভাষা নিতে পারেন। রিলিজের কাজ অন্য কাউকে দিতে চাইলে আমাদের App Store সাবমিশন সার্ভিস দুটো স্টোরের জন্য $599-এ Play Console ও App Store Connect সামলায়। ডেভেলপার অ্যাকাউন্টের ফি আলাদা।
সচরাচর জিজ্ঞাসিত প্রশ্ন
১ নভেম্বর ২০২৬-এর টার্গেট API এক্সটেনশন মিস করলে কী হবে?
আপনার বর্তমান লিস্টিং থেকে যাবে। API 35 বা তার বেশি টার্গেট করা ফোন অ্যাপ বিদ্যমান ও নতুন ব্যবহারকারী উভয়ের জন্যই উপলব্ধ থাকে। বান্ডেল Android 16 (API 36) টার্গেট না করা পর্যন্ত Play Console জরুরি বাগ ফিক্সসহ যেকোনো নতুন রিলিজ প্রত্যাখ্যান করবে। API 35-এর নিচের অ্যাপ শুধু সেই Android সংস্করণ বা তার পুরোনো সংস্করণের ডিভাইসে ইনস্টল করা যায়।
Wear OS ও Android TV অ্যাপকে কি API 36 টার্গেট করতে হবে?
না। অক্টোবর ২০২৬ অনুযায়ী, নতুন Wear OS ও Android Automotive OS অ্যাপ ও আপডেটকে API 35 টার্গেট করতে হবে, আর Android TV ও Android XR অ্যাপকে API 34। শুধু ফোন, ট্যাবলেট ও Android Auto অ্যাপের জন্য API 36 লাগে। একমাত্র পূর্ণ ব্যতিক্রম হলো একটি প্রতিষ্ঠানের ভেতরে বিতরণ করা স্থায়ীভাবে প্রাইভেট অ্যাপ।
Expo SDK আপগ্রেড না করে কি API 36 টার্গেট করা যায়?
SDK 53-এ আপনি expo-build-properties প্লাগইনে targetSdkVersion ও compileSdkVersion 36 সেট করতে পারেন, এবং কিছু ডেভেলপার তা করেছেনও। কিন্তু SDK 53-এর ব্যবহৃত React Native 0.79 এখনও onBackPressed দিয়ে ব্যাক প্রেস পাঠায়, আর API 36-এ Android 16 সেটি আর কল করে না। আপনাকে enableOnBackInvokedCallback false করে অপ্ট-আউট করতে হবে। SDK 54-এ আপগ্রেড করাই সমর্থিত পথ।
compileSdkVersion ও targetSdkVersion-এর পার্থক্য কী?
compileSdkVersion হলো সেই Android API সংস্করণ, যার বিপরীতে আপনার কোড কম্পাইল হয়। targetSdkVersion Android-কে জানায় আপনার অ্যাপ কোন সংস্করণের আচরণ গ্রহণ করেছে, এবং Google Play এটিই প্রয়োগ করে। compileSdk অবশ্যই targetSdk-এর সমান বা বেশি হতে হবে, তাই টার্গেট 36-এ যাওয়া মানে API 36 বা তার পরের সংস্করণের বিপরীতে কম্পাইল করা। উদাহরণস্বরূপ, Expo SDK 58 কম্পাইল করে 37-এর বিপরীতে এবং টার্গেট করে 36।
build.gradle বদলানোর পরও Play Console কেন বলছে আমার অ্যাপ পুরোনো API লেভেল টার্গেট করে?
Play টার্গেট লেভেল পড়ে আপনার আপলোড করা বান্ডেল থেকে, সোর্স ফাইল থেকে নয়। অন্য কোনো মডিউলে হার্ডকোড করা মান, পুরোনো প্লাগইন, বা পুরোনো Play Core-এর মতো লাইব্রেরি মার্জড ম্যানিফেস্ট বদলে দিতে পারে। আসল targetSdkVersion দেখতে রিলিজ AAB-এ bundletool dump manifest চালান, এবং নিশ্চিত হন যে আপনি পুরোনো আর্টিফ্যাক্ট নয়, নতুন বিল্ডটিই আপলোড করেছেন।
সূত্র ও আরও পড়ুন
নীতিমালা বদলায়। সাবমিট করার আগে অফিশিয়াল ডকুমেন্টেশন দেখে নিন।
- Google Play অ্যাপের টার্গেট API লেভেলের শর্তাবলি (Play Console সহায়তা) ↗যাচাই করা হয়েছে ৩০ অক্টো, ২০২৬
- আচরণগত পরিবর্তন: Android 16 বা তার বেশি টার্গেট করা অ্যাপ (Android Developers) ↗যাচাই করা হয়েছে ৩০ অক্টো, ২০২৬
- Expo SDK 54 চেঞ্জলগ ↗যাচাই করা হয়েছে ৩০ অক্টো, ২০২৬
- Flutter 3.38-এ নতুন কী আছে ↗যাচাই করা হয়েছে ৩০ অক্টো, ২০২৬
- fix(mobile): Android SDK 36 টার্গেট, AudiusProject/apps PR #14635 ↗যাচাই করা হয়েছে ৩০ অক্টো, ২০২৬
- স্পষ্ট ওভাররাইড সত্ত্বেও Flutter 3.35.2 SDK 34 চাপিয়ে দেয়, flutter/flutter ইস্যু #174516 ↗যাচাই করা হয়েছে ৩০ অক্টো, ২০২৬
চলুন আপনার অ্যাপকে ফিনিশ লাইন পার করাই।
আপনার অ্যাপ আর লাইভ লিস্টিংয়ের মাঝে কী বাধা আছে, তা খুঁজে বের করার জন্য একটি ফোকাসড কল।
কল বুক করুন ↗

