আপনি যদি আপনার অ্যাপটি Google Play-তে প্রকাশ করেন, তাহলে আপনার উচিত একটি Android অ্যাপ বান্ডেল তৈরি এবং আপলোড করা। আপনি যখন তা করেন, তখন Google Play স্বয়ংক্রিয়ভাবে প্রতিটি ব্যবহারকারীর ডিভাইস কনফিগারেশনের জন্য অপ্টিমাইজ করা APK তৈরি করে এবং পরিবেশন করে, তাই তারা আপনার অ্যাপ চালানোর জন্য প্রয়োজনীয় কোড এবং সংস্থানগুলি ডাউনলোড করে। আপনি যদি Google Play-এ প্রকাশ না করেন তবে একাধিক APK প্রকাশ করা কার্যকর, তবে আপনাকে অবশ্যই প্রতিটি APK নিজেই তৈরি, স্বাক্ষর এবং পরিচালনা করতে হবে।
একাধিক APK সমর্থন হল Google Play-তে এমন একটি বৈশিষ্ট্য যা আপনাকে আপনার অ্যাপ্লিকেশনের জন্য বিভিন্ন APK প্রকাশ করতে দেয় যা প্রতিটি আলাদা ডিভাইস কনফিগারেশনে লক্ষ্য করা যায়। প্রতিটি APK আপনার অ্যাপ্লিকেশনের একটি সম্পূর্ণ এবং স্বতন্ত্র সংস্করণ, কিন্তু তারা Google Play-তে একই অ্যাপ্লিকেশন তালিকা ভাগ করে এবং একই প্যাকেজের নাম ভাগ করতে হবে এবং একই রিলিজ কী দিয়ে স্বাক্ষর করতে হবে। এই বৈশিষ্ট্যটি এমন ক্ষেত্রে উপযোগী যেখানে আপনার অ্যাপ্লিকেশন একটি একক APK দিয়ে সমস্ত পছন্দসই ডিভাইসে পৌঁছাতে পারে না।
অ্যান্ড্রয়েড-চালিত ডিভাইসগুলি বিভিন্ন উপায়ে আলাদা হতে পারে এবং আপনার অ্যাপ্লিকেশনের সাফল্যের জন্য এটি গুরুত্বপূর্ণ যে আপনি এটি যতটা সম্ভব ডিভাইসে উপলব্ধ করুন৷ Android অ্যাপ্লিকেশানগুলি সাধারণত একটি একক APK সহ বেশিরভাগ সামঞ্জস্যপূর্ণ ডিভাইসগুলিতে চলে, বিভিন্ন কনফিগারেশনের জন্য বিকল্প সংস্থান সরবরাহ করে (উদাহরণস্বরূপ, বিভিন্ন স্ক্রীন আকারের জন্য বিভিন্ন লেআউট) এবং Android সিস্টেম রানটাইমে ডিভাইসের জন্য উপযুক্ত সংস্থান নির্বাচন করে। কিছু ক্ষেত্রে, তবে, একটি একক APK সমস্ত ডিভাইস কনফিগারেশন সমর্থন করতে অক্ষম, কারণ বিকল্প সংস্থানগুলি APK ফাইলটিকে অনেক বড় করে তোলে বা অন্যান্য প্রযুক্তিগত চ্যালেঞ্জগুলি একটি একক APKকে সমস্ত ডিভাইসে কাজ করতে বাধা দেয়৷
যতটা সম্ভব ডিভাইসের জন্য আপনার অ্যাপ্লিকেশন প্রকাশ করতে সাহায্য করার জন্য, Google Play আপনাকে একই অ্যাপ্লিকেশন তালিকার অধীনে একাধিক APK প্রকাশ করতে দেয়। Google Play তারপর প্রতিটি APK এর ম্যানিফেস্ট ফাইলে আপনি যে কনফিগারেশন সমর্থন ঘোষণা করেছেন তার ভিত্তিতে উপযুক্ত ডিভাইসগুলিতে প্রতিটি APK সরবরাহ করে৷
একাধিক APK সহ আপনার অ্যাপ্লিকেশন প্রকাশ করে, আপনি করতে পারেন:
- প্রতিটি APK এর সাথে বিভিন্ন OpenGL টেক্সচার কম্প্রেশন ফরম্যাট সমর্থন করে।
- প্রতিটি APK এর সাথে বিভিন্ন স্ক্রীনের আকার এবং ঘনত্ব সমর্থন করে।
- প্রতিটি APK এর সাথে বিভিন্ন ডিভাইস বৈশিষ্ট্য সেট সমর্থন করে।
- প্রতিটি APK এর সাথে বিভিন্ন প্ল্যাটফর্ম সংস্করণ সমর্থন করুন।
- প্রতিটি APK এর সাথে বিভিন্ন CPU আর্কিটেকচার সমর্থন করুন (যেমন ARM বা x86 এর জন্য, যখন আপনার অ্যাপ Android NDK ব্যবহার করে)।
- এন্ট্রি-লেভেল ডিভাইসগুলির জন্য অপ্টিমাইজ করুন যেমন Android (Go সংস্করণ) চলছে।
বর্তমানে, এইগুলিই একমাত্র ডিভাইস বৈশিষ্ট্য যা Google Play একই অ্যাপ্লিকেশন হিসাবে একাধিক APK প্রকাশের জন্য সমর্থন করে৷
দ্রষ্টব্য: Google Play-এ APK প্রস্তুত ও প্রকাশ করার বিষয়ে জানতে, প্রস্তুত ও রোল-আউট রিলিজ সমর্থন নিবন্ধটি দেখুন।
একাধিক APK কিভাবে কাজ করে
Google Play তে একাধিক APK ব্যবহার করার ধারণাটি হল যে আপনার অ্যাপ্লিকেশনের জন্য Google Play-এ আপনার কাছে শুধুমাত্র একটি এন্ট্রি আছে, কিন্তু বিভিন্ন ডিভাইস একটি ভিন্ন APK ডাউনলোড করতে পারে। এই যে মানে:
- আপনি পণ্যের বিবরণের শুধুমাত্র একটি সেট বজায় রাখেন (অ্যাপের বিবরণ, আইকন, স্ক্রিনশট ইত্যাদি)। এর মানে আপনি বিভিন্ন APK-এর জন্য আলাদা মূল্য চার্জ করতে পারবেন না ।
- সমস্ত ব্যবহারকারী Google Play তে আপনার অ্যাপ্লিকেশনের শুধুমাত্র একটি সংস্করণ দেখতে পান, তাই তারা "ট্যাবলেটের জন্য" বা "ফোনের জন্য" আপনার প্রকাশিত বিভিন্ন সংস্করণে বিভ্রান্ত হবেন না।
- সমস্ত ব্যবহারকারীর পর্যালোচনা একই অ্যাপ্লিকেশন তালিকায় প্রয়োগ করা হয়, যদিও বিভিন্ন ডিভাইসে ব্যবহারকারীদের আলাদা APK থাকতে পারে।
- আপনি যদি অ্যান্ড্রয়েডের বিভিন্ন সংস্করণের জন্য (বিভিন্ন API স্তরের জন্য) বিভিন্ন APK প্রকাশ করেন, তখন যখন কোনও ব্যবহারকারীর ডিভাইস এমন একটি সিস্টেম আপডেট পায় যা তাদের আপনার প্রকাশিত একটি ভিন্ন APK-এর জন্য যোগ্য করে তোলে, Google Play ব্যবহারকারীর অ্যাপ্লিকেশনটিকে এর জন্য ডিজাইন করা APK-এ আপডেট করে। Android এর উচ্চতর সংস্করণ। অ্যাপ্লিকেশানের সাথে সম্পর্কিত যেকোন সিস্টেম ডেটা ধরে রাখা হয় (একটি APK ব্যবহার করার সময় সাধারণ অ্যাপ্লিকেশন আপডেটের মতোই)।
সমর্থিত ফিল্টার
কোন ডিভাইস প্রতিটি APK পাবে তা Google Play ফিল্টার দ্বারা নির্ধারিত হয় যা প্রতিটি APK-এর ম্যানিফেস্ট ফাইলের উপাদানগুলির দ্বারা নির্দিষ্ট করা হয়৷ যাইহোক, Google Play আপনাকে একাধিক APK প্রকাশ করার অনুমতি দেয় শুধুমাত্র যখন প্রতিটি APK ফিল্টার ব্যবহার করে নিম্নলিখিত ডিভাইসের বৈশিষ্ট্যগুলির ভিন্নতা সমর্থন করে:
- OpenGL টেক্সচার কম্প্রেশন ফরম্যাট
এটি আপনার ম্যানিফেস্ট ফাইলের
<supports-gl-texture>
উপাদান(গুলি) এর উপর ভিত্তি করে।উদাহরণস্বরূপ, OpenGL ES ব্যবহার করে এমন একটি গেম তৈরি করার সময়, আপনি ATI টেক্সচার কম্প্রেশন সমর্থন করে এমন ডিভাইসগুলির জন্য একটি APK এবং PowerVR কম্প্রেশন সমর্থন করে এমন ডিভাইসগুলির জন্য একটি পৃথক APK প্রদান করতে পারেন (অন্য অনেকের মধ্যে)।
- পর্দার আকার (এবং, ঐচ্ছিকভাবে, পর্দার ঘনত্ব)
এটি আপনার ম্যানিফেস্ট ফাইলের
<supports-screens>
বা<compatible-screens>
উপাদানের উপর ভিত্তি করে। আপনার কখনই উভয় উপাদান ব্যবহার করা উচিত নয় এবং সম্ভব হলে শুধুমাত্র<supports-screens>
ব্যবহার করা উচিত।উদাহরণস্বরূপ, আপনি একটি APK প্রদান করতে পারেন যা ছোট এবং সাধারণ আকারের স্ক্রীন সমর্থন করে এবং আরেকটি APK যা বড় এবং বড় স্ক্রীন সমর্থন করে। স্ক্রিনের আকার বা ঘনত্বের উপর ভিত্তি করে পৃথক APK তৈরি করার বিষয়ে আরও জানতে, একাধিক APK তৈরি করুন এ যান।
সমস্ত পর্দার আকার সমর্থন করার জন্য নিম্নলিখিত সেরা অনুশীলনগুলি বিবেচনা করুন:
- Android সিস্টেম একটি একক APK সহ সমস্ত স্ক্রীন কনফিগারেশন সমর্থন করার জন্য অ্যাপ্লিকেশনগুলির জন্য শক্তিশালী সমর্থন প্রদান করে। একেবারে প্রয়োজনীয় না হলে আপনাকে বিভিন্ন স্ক্রীন সমর্থন করার জন্য একাধিক APK তৈরি করা এড়াতে হবে এবং পরিবর্তে একাধিক স্ক্রীন সমর্থন করার নির্দেশিকা অনুসরণ করুন যাতে আপনার অ্যাপ্লিকেশন নমনীয় হয় এবং একটি একক APK দিয়ে সমস্ত স্ক্রীন কনফিগারেশনের সাথে মানিয়ে নিতে পারে।
- ডিফল্টরূপে,
<supports-screens>
উপাদানের সমস্ত স্ক্রীন আকারের বৈশিষ্ট্য "সত্য" হয় যদি আপনি অন্যথায় ঘোষণা না করেন। যাইহোক, যেহেতুandroid:xlargeScreens
অ্যাট্রিবিউটটি Android 2.3 (API লেভেল 9) এ যোগ করা হয়েছিল, তাই Google Play ধরে নেবে যে এটি "মিথ্যা" যদি আপনার অ্যাপ্লিকেশনটিandroid:minSdkVersion
বাandroid:targetSdkVersion
"9" বা উচ্চতর সেট না করে। - আপনার ম্যানিফেস্ট ফাইলে
<supports-screens>
এবং<compatible-screens>
উপাদান উভয়ই একত্রিত করা উচিত নয়। উভয়টি ব্যবহার করলে তাদের মধ্যে বিরোধের কারণে আপনি একটি ত্রুটি প্রবর্তন করার সম্ভাবনা বাড়ায়। কোনটি ব্যবহার করতে হবে তা সিদ্ধান্ত নিতে সহায়তার জন্য, ডিস্ট্রিবিউটিং টু স্পেসিফিক স্ক্রিনে পড়ুন। আপনি যদি উভয়ের ব্যবহার এড়াতে না পারেন, তবে সচেতন থাকুন যে প্রদত্ত আকারের মধ্যে চুক্তিতে যেকোন দ্বন্দ্বের জন্য, "মিথ্যা" জয়ী হবে।
- ডিভাইস বৈশিষ্ট্য সেট
এটি আপনার ম্যানিফেস্ট ফাইলের
<uses-feature>
উপাদান(গুলি) এর উপর ভিত্তি করে।উদাহরণস্বরূপ, আপনি মাল্টিটাচ সমর্থন করে এমন ডিভাইসগুলির জন্য একটি APK এবং মাল্টিটাচ সমর্থন করে না এমন ডিভাইসগুলির জন্য আরেকটি APK প্রদান করতে পারেন। প্ল্যাটফর্ম দ্বারা সমর্থিত বৈশিষ্ট্যগুলির একটি তালিকার জন্য বৈশিষ্ট্যের রেফারেন্স দেখুন।
- অ্যান্ড্রয়েড (গো সংস্করণ)
Android (Go সংস্করণ) চালিত ডিভাইসগুলিকে টার্গেট করতে, আপনার APK-কে
<uses-feature android:name="android.hardware.ram.low" android:required="true">
ঘোষণা করতে হবে, কমপক্ষে API লেভেল 26 টার্গেট করতে হবে এবং আপনার নন-গো সংস্করণ APK থেকে উচ্চতর সংস্করণ কোড। - API স্তর
এটি আপনার ম্যানিফেস্ট ফাইলের
<uses-sdk>
উপাদানের উপর ভিত্তি করে। আপনি বিভিন্ন API স্তরের জন্য সমর্থন নির্দিষ্ট করতেandroid:minSdkVersion
এবংandroid:maxSdkVersion
বৈশিষ্ট্য উভয়ই ব্যবহার করতে পারেন।উদাহরণস্বরূপ, আপনি একটি APK দিয়ে আপনার অ্যাপ্লিকেশন প্রকাশ করতে পারেন যা API স্তর 16 - 19 (Android 4.1.x - 4.4.4)-কে সমর্থন করে — শুধুমাত্র API স্তর 16 বা তার নীচের থেকে উপলব্ধ APIগুলি ব্যবহার করে — এবং অন্য একটি APK যা API স্তর 21 এবং তার উপরে সমর্থন করে (Android 5.0+)-এপিআই লেভেল 21 বা তার কম থেকে উপলব্ধ API ব্যবহার করে। কিভাবে আলাদা আলাদা APK তৈরি করতে হয় তা শিখতে প্রতিটি আলাদা আলাদা API-এর পরিসরকে লক্ষ্য করে, প্রোডাক্ট ফ্লেভার কনফিগার করুন- এ যান।
আপনি যদি একাধিক APK আলাদা করতে ফ্যাক্টর হিসাবে এই বৈশিষ্ট্যটি ব্যবহার করেন, তাহলে উচ্চতর
android:minSdkVersion
মান সহ APK-এর উচ্চতরandroid:versionCode
মান থাকতে হবে। এটিও সত্য যদি দুটি APK একটি ভিন্ন সমর্থিত ফিল্টারের উপর ভিত্তি করে তাদের ডিভাইস সমর্থনকে ওভারল্যাপ করে। এটি নিশ্চিত করে যে যখন একটি ডিভাইস একটি সিস্টেম আপডেট পায়, তখন Google Play ব্যবহারকারীকে আপনার অ্যাপ্লিকেশনের জন্য একটি আপডেট অফার করতে পারে (কারণ আপডেটগুলি অ্যাপ সংস্করণ কোডের বৃদ্ধির উপর ভিত্তি করে)। এই প্রয়োজনীয়তা একাধিক APK-এর জন্য নিয়ম সম্পর্কে নীচের বিভাগে আরও বর্ণনা করা হয়েছে।আপনার সাধারণভাবে
android:maxSdkVersion
ব্যবহার করা এড়ানো উচিত, কারণ যতক্ষণ পর্যন্ত আপনি সর্বজনীন API-এর সাথে আপনার অ্যাপ্লিকেশনটি সঠিকভাবে তৈরি করেছেন, এটি সর্বদা Android এর ভবিষ্যত সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ। আপনি যদি উচ্চতর API স্তরগুলির জন্য একটি ভিন্ন APK প্রকাশ করতে চান, তবে আপনাকে এখনও সর্বাধিক সংস্করণ নির্দিষ্ট করতে হবে না, কারণ যদিandroid:minSdkVersion
একটি APK-এ"16"
এবং অন্যটিতে"21"
হয়, যে ডিভাইসগুলি API স্তর 21 সমর্থন করে বা উচ্চতর সর্বদা দ্বিতীয় APK পাবেন (কারণ আগের নোট অনুযায়ী এর সংস্করণ কোড বেশি)। - CPU আর্কিটেকচার (ABI)
কিছু নেটিভ লাইব্রেরি নির্দিষ্ট CPU আর্কিটেকচার বা অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABIs) এর জন্য আলাদা প্যাকেজ প্রদান করে। সমস্ত উপলব্ধ লাইব্রেরিগুলিকে একটি APK-এ প্যাকেজ করার পরিবর্তে, আপনি প্রতিটি ABI-এর জন্য একটি পৃথক APK তৈরি করতে পারেন এবং শুধুমাত্র সেই ABI-এর জন্য আপনার প্রয়োজনীয় লাইব্রেরিগুলি অন্তর্ভুক্ত করতে পারেন৷ লক্ষ্য ABI-এর উপর ভিত্তি করে পৃথক APK তৈরি করার বিষয়ে আরও জানতে, একাধিক APK তৈরি করুন- এ যান।
অন্যান্য ম্যানিফেস্ট উপাদান যা Google Play ফিল্টারগুলিকে সক্ষম করে—কিন্তু উপরে তালিকাভুক্ত নয়—এখনও যথারীতি প্রতিটি APK-এর জন্য প্রয়োগ করা হয়৷ যাইহোক, Google Play আপনাকে সেই ডিভাইসের বৈশিষ্ট্যগুলির ভিন্নতার উপর ভিত্তি করে আলাদা APK প্রকাশ করার অনুমতি দেয় না। এইভাবে, আপনি একাধিক APK প্রকাশ করতে পারবেন না যদি উপরে তালিকাভুক্ত ফিল্টারগুলি প্রতিটি APK-এর জন্য একই হয় (তবে APKগুলি ম্যানিফেস্ট বা APK-এর অন্যান্য বৈশিষ্ট্যের উপর ভিত্তি করে আলাদা হয়)। উদাহরণ স্বরূপ, আপনি ভিন্ন ভিন্ন APK প্রদান করতে পারবেন না যেগুলি সম্পূর্ণরূপে <uses-configuration>
বৈশিষ্ট্যের উপর আলাদা।
একাধিক APK এর জন্য নিয়ম
আপনি আপনার অ্যাপ্লিকেশনের জন্য একাধিক APK প্রকাশ করার আগে, আপনাকে নিম্নলিখিত নিয়মগুলি বুঝতে হবে:
- একই অ্যাপ্লিকেশানের জন্য আপনার প্রকাশ করা সমস্ত APK একই প্যাকেজের নাম থাকতে হবে এবং একই শংসাপত্র কী দিয়ে স্বাক্ষরিত হতে হবে ।
- প্রতিটি APK এর একটি আলাদা সংস্করণ কোড থাকতে হবে , যা
android:versionCode
বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা হয়েছে৷ - প্রতিটি APK অন্য APK-এর কনফিগারেশন সমর্থনের সাথে হুবহু মেলে না ।
অর্থাৎ, প্রতিটি APK অবশ্যই সমর্থিত Google Play ফিল্টারগুলির (উপরে তালিকাভুক্ত) অন্তত একটির জন্য কিছুটা আলাদা সমর্থন ঘোষণা করতে হবে।
সাধারণত, আপনি একটি নির্দিষ্ট বৈশিষ্ট্যের (যেমন সমর্থিত টেক্সচার কম্প্রেশন ফর্ম্যাট) এর উপর ভিত্তি করে আপনার APKগুলিকে আলাদা করবেন এবং এইভাবে, প্রতিটি APK বিভিন্ন ডিভাইসের জন্য সমর্থন ঘোষণা করবে। যাইহোক, একাধিক APK প্রকাশ করা ঠিক আছে যা তাদের সমর্থনকে সামান্য ওভারল্যাপ করে। যখন দুটি APK ওভারল্যাপ করে (এগুলি একই ডিভাইস কনফিগারেশনের কিছু সমর্থন করে), সেই ওভারল্যাপ সীমার মধ্যে পড়ে এমন একটি ডিভাইস একটি উচ্চতর সংস্করণ কোড সহ APK পাবে (
android:versionCode
দ্বারা সংজ্ঞায়িত)। - আপনি একটি নতুন APK সক্রিয় করতে পারবেন না যেটির সংস্করণ কোডটি প্রতিস্থাপন করা APK-এর থেকে কম। উদাহরণ স্বরূপ, বলুন আপনার কাছে একটি সক্রিয় APK আছে ছোট আকারের স্ক্রীনের জন্য - স্বাভাবিক সংস্করণ কোড
0400
এর সাথে, তারপর এটিকে সংস্করণ কোড0300
সহ একই স্ক্রীন মাপের জন্য একটি APK দিয়ে প্রতিস্থাপন করার চেষ্টা করুন। এটি একটি ত্রুটি উত্থাপন করে, কারণ এর অর্থ পূর্ববর্তী APK-এর ব্যবহারকারীরা অ্যাপ্লিকেশনটি আপডেট করতে সক্ষম হবেন না৷ - একটি APK যার উচ্চতর API স্তরের প্রয়োজন তার একটি উচ্চতর সংস্করণ কোড থাকতে হবে।
এটি শুধুমাত্র তখনই সত্য যখন হয়: APK গুলি শুধুমাত্র সমর্থিত API স্তরগুলির উপর ভিত্তি করে পৃথক হয় (অন্য কোনও সমর্থিত ফিল্টার একে অপরের থেকে APKগুলিকে আলাদা করে না) বা যখন APKগুলি অন্য একটি সমর্থিত ফিল্টার ব্যবহার করে, কিন্তু সেই ফিল্টারের মধ্যে APKগুলির মধ্যে একটি ওভারল্যাপ থাকে .
এটি গুরুত্বপূর্ণ কারণ একজন ব্যবহারকারীর ডিভাইস Google Play থেকে একটি অ্যাপ্লিকেশন আপডেট পায় তখনই যদি Google Play-এ APK-এর সংস্করণ কোডটি বর্তমানে ডিভাইসে থাকা APK-এর সংস্করণ কোডের চেয়ে বেশি হয়। এটি নিশ্চিত করে যে যদি একটি ডিভাইস একটি সিস্টেম আপডেট পায় যা উচ্চতর API স্তরের জন্য APK ইনস্টল করার যোগ্যতা অর্জন করে, ডিভাইসটি একটি অ্যাপ্লিকেশন আপডেট পায় কারণ সংস্করণ কোড বৃদ্ধি পায়।
দ্রষ্টব্য: সংস্করণ কোড বৃদ্ধির আকার অপ্রাসঙ্গিক; উচ্চতর API স্তর সমর্থন করে এমন সংস্করণে এটি কেবল বড় হওয়া দরকার।
এখানে কিছু উদাহরণঃ:
- যদি আপনি API লেভেল 16 এবং তার বেশি (Android 4.1.x+) এর জন্য আপলোড করেছেন একটি APK এর সংস্করণ কোড
0400
থাকে, তাহলে API লেভেল 21 এবং তার উপরে (Android 5.0+) এর জন্য একটি APK অবশ্যই0401
বা তার বেশি হতে হবে। এই ক্ষেত্রে, API স্তরটি ব্যবহার করা একমাত্র সমর্থিত ফিল্টার, তাই সংস্করণ কোডগুলিকে অবশ্যই প্রতিটি APK-এর জন্য API স্তরের সমর্থনের সাথে পারস্পরিক সম্পর্ক বৃদ্ধি করতে হবে , যাতে ব্যবহারকারীরা যখন একটি সিস্টেম আপডেট পান তখন তারা একটি আপডেট পান। - যদি আপনার কাছে API লেভেল 16 (এবং তার উপরে) এবং ছোট - বড় স্ক্রিনের জন্য একটি APK থাকে এবং API লেভেল 21 (এবং তার উপরে) এবং বড় - xlarge স্ক্রিনের জন্য আরেকটি APK থাকে, তাহলে সংস্করণ কোডগুলি অবশ্যই API স্তরের সাথে সম্পর্ক বাড়াতে হবে । এই ক্ষেত্রে, API স্তরের ফিল্টার প্রতিটি APK আলাদা করতে ব্যবহার করা হয়, কিন্তু পর্দার আকারও তাই। যেহেতু স্ক্রিন সাইজ ওভারল্যাপ করে (উভয়টি APKই বড় স্ক্রীন সমর্থন করে), ভার্সন কোডগুলো অবশ্যই ক্রমানুসারে থাকতে হবে। এটি নিশ্চিত করে যে একটি বড় স্ক্রীন ডিভাইস যেটি API স্তর 21-এ একটি সিস্টেম আপডেট পায় সে দ্বিতীয় APK-এর জন্য একটি আপডেট পাবে।
- আপনার যদি API স্তর 16 (এবং তার উপরে) এবং ছোট - সাধারণ স্ক্রিনের জন্য একটি APK থাকে এবং API স্তর 21 (এবং তার উপরে) এবং বড় - x বৃহৎ স্ক্রিনের জন্য আরেকটি APK থাকে, তাহলে সংস্করণ কোডগুলির সাথে সম্পর্ক বাড়াতে হবে না API স্তর। যেহেতু স্ক্রীন সাইজ ফিল্টারের মধ্যে কোনো ওভারল্যাপ নেই, তাই এমন কোনো ডিভাইস নেই যা সম্ভাব্যভাবে এই দুটি APK-এর মধ্যে স্থানান্তর করতে পারে, তাই নিম্ন API স্তর থেকে উচ্চ API স্তরে সংস্করণ কোডগুলির বৃদ্ধির কোনো প্রয়োজন নেই৷
- যদি আপনার কাছে API স্তর 16 (এবং তার উপরে) এবং ARMv7 CPU-এর জন্য একটি APK থাকে এবং API স্তর 21 (এবং তার উপরে) এবং ARMv5TE CPU-এর জন্য আরেকটি APK থাকে, তাহলে সংস্করণ কোডগুলি অবশ্যই API স্তরের সাথে সম্পর্ক বাড়াতে হবে । এই ক্ষেত্রে, API স্তরের ফিল্টার প্রতিটি APK আলাদা করতে ব্যবহার করা হয়, কিন্তু CPU আর্কিটেকচারেও তাই। যেহেতু ARMv5TE লাইব্রেরি সহ একটি APK একটি ARMv7 CPU আছে এমন ডিভাইসগুলির সাথে সামঞ্জস্যপূর্ণ, APKগুলি এই বৈশিষ্ট্যের উপর ওভারল্যাপ করে৷ যেমন, API স্তর 21 এবং তার উপরে সমর্থন করে এমন APK-এর সংস্করণ কোড অবশ্যই উচ্চতর হতে হবে। এটি নিশ্চিত করে যে ARMv7 CPU সহ একটি ডিভাইস যা API স্তর 21-এ একটি সিস্টেম আপডেট পায় সে দ্বিতীয় APK-এর জন্য একটি আপডেট পাবে যা API স্তর 21-এর জন্য ডিজাইন করা হয়েছে। তবে, কারণ এই ধরনের আপডেটের ফলে ARMv7 ডিভাইসে এমন একটি APK ব্যবহার করা হয় যা নয় সেই ডিভাইসের CPU-এর জন্য সম্পূর্ণরূপে অপ্টিমাইজ করা হয়েছে, প্রতিটি CPU-তে অ্যাপের কার্যকারিতা অপ্টিমাইজ করার জন্য আপনাকে প্রতিটি API স্তরে ARMv5TE এবং ARMv7 আর্কিটেকচার উভয়ের জন্য একটি APK প্রদান করা উচিত। দ্রষ্টব্য: এটি শুধুমাত্র ARMv5TE এবং ARMv7 লাইব্রেরির সাথে APK তুলনা করার সময় প্রযোজ্য, এবং অন্যান্য নেটিভ লাইব্রেরির সাথে তুলনা করার সময় নয়।
- যদি আপনি API লেভেল 16 এবং তার বেশি (Android 4.1.x+) এর জন্য আপলোড করেছেন একটি APK এর সংস্করণ কোড
উপরের নিয়মগুলি মেনে চলতে ব্যর্থতার ফলে আপনি যখন আপনার APKগুলি সক্রিয় করেন তখন Google Play Console-এ একটি ত্রুটি দেখা দেয়—আপনি ত্রুটিটি সমাধান না করা পর্যন্ত আপনি আপনার অ্যাপ্লিকেশন প্রকাশ করতে পারবেন না।
আপনি যখন আপনার APKগুলি সক্রিয় করেন তখন অন্যান্য দ্বন্দ্বগুলি ঘটতে পারে, তবে এর ফলে ত্রুটির পরিবর্তে সতর্কতা হবে৷ সতর্কতা নিম্নলিখিত কারণে হতে পারে:
- আপনি যখন কোনো ডিভাইসের বৈশিষ্ট্যগুলির জন্য সমর্থনকে "সঙ্কুচিত" করতে একটি APK সংশোধন করেন এবং অন্য কোনো APK সমর্থিত সীমার বাইরে পড়ে এমন ডিভাইসগুলিকে সমর্থন করে না। উদাহরণস্বরূপ, যদি একটি APK বর্তমানে ছোট এবং সাধারণ আকারের স্ক্রীন সমর্থন করে এবং আপনি এটিকে শুধুমাত্র ছোট স্ক্রীন সমর্থন করতে পরিবর্তন করেন, তাহলে আপনি সমর্থিত ডিভাইসগুলির পুলকে সঙ্কুচিত করে ফেলেছেন এবং কিছু ডিভাইস Google Play এ আপনার অ্যাপ্লিকেশন আর দেখতে পাবে না। আপনি অন্য একটি APK যোগ করে এটি সমাধান করতে পারেন যা স্বাভাবিক আকারের স্ক্রীন সমর্থন করে যাতে সমস্ত পূর্বে-সমর্থিত ডিভাইসগুলি এখনও সমর্থিত হয়।
- যখন দুই বা ততোধিক APK-এর মধ্যে "ওভারল্যাপ" থাকে। উদাহরণস্বরূপ, যদি একটি APK ছোট, স্বাভাবিক এবং বড় আকারের স্ক্রীন সমর্থন করে, যখন অন্য একটি APK বড় এবং বড় আকারের আকার সমর্থন করে, সেখানে একটি ওভারল্যাপ রয়েছে, কারণ উভয় APKই বড় স্ক্রীন সমর্থন করে। আপনি যদি এটির সমাধান না করেন, তাহলে উভয় APK-এর জন্য যোগ্য ডিভাইসগুলি (উদাহরণে বড় স্ক্রীনের ডিভাইস) যেটি APK-এর সর্বোচ্চ সংস্করণ কোড থাকবে তা পাবে।
দ্রষ্টব্য: আপনি যদি বিভিন্ন CPU আর্কিটেকচারের জন্য আলাদা APK তৈরি করেন, তাহলে সচেতন থাকুন যে ARMv5TE-এর জন্য একটি APK ARMv7-এর জন্য একটি APK-এর সাথে ওভারল্যাপ হবে। অর্থাৎ, ARMv5TE এর জন্য ডিজাইন করা একটি APK একটি ARMv7 ডিভাইসের সাথে সামঞ্জস্যপূর্ণ, কিন্তু বিপরীতটি সত্য নয় (শুধু ARMv7 লাইব্রেরি সহ একটি APK ARMv5TE ডিভাইসের সাথে সামঞ্জস্যপূর্ণ নয় )।
যখন এই ধরনের দ্বন্দ্ব দেখা দেয়, আপনি একটি সতর্কতা বার্তা দেখতে পাবেন, কিন্তু আপনি এখনও আপনার আবেদন প্রকাশ করতে পারেন।
একাধিক APK তৈরি করা হচ্ছে
একবার আপনি একাধিক APK প্রকাশ করার সিদ্ধান্ত নিলে, সম্ভবত আপনি যে প্রতিটি APK প্রকাশ করতে চান তার জন্য আলাদা Android প্রকল্প তৈরি করতে হবে যাতে আপনি যথাযথভাবে আলাদাভাবে বিকাশ করতে পারেন। আপনি কেবলমাত্র আপনার বিদ্যমান প্রকল্পের নকল করে এটিকে একটি নতুন নাম দিতে পারেন। (বিকল্পভাবে, আপনি একটি বিল্ড সিস্টেম ব্যবহার করতে পারেন যা বিল্ড কনফিগারেশনের উপর ভিত্তি করে বিভিন্ন সংস্থান-যেমন টেক্সচার-এর আউটপুট করতে পারে।)
টিপ: আপনার অ্যাপ্লিকেশন কোডের বড় অংশের নকল এড়াতে একটি উপায় হল একটি লাইব্রেরি প্রকল্প ব্যবহার করা। একটি লাইব্রেরি প্রকল্প শেয়ার করা কোড এবং সংস্থান ধারণ করে, যা আপনি আপনার প্রকৃত অ্যাপ্লিকেশন প্রকল্পগুলিতে অন্তর্ভুক্ত করতে পারেন।
একই অ্যাপ্লিকেশানের জন্য একাধিক প্রকল্প তৈরি করার সময়, প্রতিটিকে একটি নাম দিয়ে সনাক্ত করা একটি ভাল অভ্যাস যা APK এ স্থাপন করা ডিভাইসের সীমাবদ্ধতাগুলি নির্দেশ করে, যাতে আপনি সহজেই তাদের সনাক্ত করতে পারেন। উদাহরণস্বরূপ, "HelloWorld_21" API লেভেল 21 এবং তার বেশির জন্য ডিজাইন করা একটি অ্যাপ্লিকেশনের জন্য একটি ভাল নাম হতে পারে।
দ্রষ্টব্য: একই অ্যাপ্লিকেশানের জন্য আপনি যে সকল APK প্রকাশ করেন তাদের অবশ্যই একই প্যাকেজের নাম থাকতে হবে এবং একই শংসাপত্র কী দিয়ে স্বাক্ষরিত হতে হবে । নিশ্চিত করুন যে আপনি একাধিক APK-এর জন্য প্রতিটি নিয়ম বুঝতে পেরেছেন।
সংস্করণ কোড বরাদ্দ করা
একই অ্যাপ্লিকেশনের জন্য প্রতিটি APK এর একটি অনন্য সংস্করণ কোড থাকতে হবে , android:versionCode
বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা। একাধিক APK প্রকাশ করার সময় সংস্করণ কোডগুলি বরাদ্দ করার বিষয়ে আপনাকে অবশ্যই সতর্কতা অবলম্বন করতে হবে, কারণ সেগুলি অবশ্যই আলাদা হতে হবে, কিন্তু কিছু ক্ষেত্রে, প্রতিটি APK সমর্থন করে এমন কনফিগারেশনগুলির উপর ভিত্তি করে একটি নির্দিষ্ট ক্রমে সংজ্ঞায়িত করা উচিত বা করা উচিত৷
সংস্করণ কোড অর্ডার
একটি APK যার উচ্চতর API স্তরের প্রয়োজন হয় তার সাধারণত উচ্চতর সংস্করণ কোড থাকতে হবে। উদাহরণস্বরূপ, আপনি যদি বিভিন্ন API স্তর সমর্থন করার জন্য দুটি APK তৈরি করেন, তাহলে উচ্চতর API স্তরগুলির জন্য APK-এর উচ্চতর সংস্করণ কোড থাকতে হবে। এটি নিশ্চিত করে যে যদি একটি ডিভাইস একটি সিস্টেম আপডেট পায় যা উচ্চতর API স্তরের জন্য APK ইনস্টল করার যোগ্যতা অর্জন করে, ব্যবহারকারী অ্যাপটি আপডেট করার জন্য একটি বিজ্ঞপ্তি পাবেন। এই প্রয়োজনীয়তা কীভাবে প্রযোজ্য হয় সে সম্পর্কে আরও তথ্যের জন্য, একাধিক APK-এর জন্য নিয়ম সম্পর্কে উপরের বিভাগটি দেখুন।
বিভিন্ন APK-এর কভারেজের মধ্যে ওভারল্যাপের কারণে বা আপনার APKগুলিতে ভবিষ্যতের পরিবর্তনের কারণে আপনার ব্যবহারকারীরা কোন APK গ্রহণ করেন তা সংস্করণ কোডের ক্রম কীভাবে প্রভাবিত করতে পারে তাও আপনার বিবেচনা করা উচিত।
উদাহরণস্বরূপ, যদি আপনার কাছে স্ক্রীনের আকারের উপর ভিত্তি করে বিভিন্ন APK থাকে, যেমন একটি ছোট-স্বাভাবিক এবং একটি বড়-এক্সলার্জের জন্য, কিন্তু এমন একটি সময়ের পূর্বাভাস দেখুন যখন আপনি APKগুলিকে ছোট-এর জন্য একটি এবং সাধারণের জন্য একটি-এক্সলার্জে পরিবর্তন করবেন, তাহলে আপনি বড় জন্য সংস্করণ কোড করা উচিত - xlarge APK উচ্চতর হতে হবে. এইভাবে, আপনি যখন পরিবর্তন করবেন তখন একটি সাধারণ আকারের ডিভাইস উপযুক্ত আপডেট পাবে, কারণ সংস্করণ কোডটি বিদ্যমান APK থেকে নতুন APK পর্যন্ত বৃদ্ধি পায় যা এখন ডিভাইসটিকে সমর্থন করে।
এছাড়াও, বিভিন্ন OpenGL টেক্সচার কম্প্রেশন ফরম্যাটের সমর্থনের উপর ভিত্তি করে পৃথক একাধিক APK তৈরি করার সময়, সচেতন থাকুন যে অনেক ডিভাইস একাধিক ফর্ম্যাট সমর্থন করে। যেহেতু দুটি APK-এর মধ্যে কভারেজের ওভারল্যাপ থাকা অবস্থায় একটি ডিভাইস সর্বোচ্চ সংস্করণ কোড সহ APK গ্রহণ করে, তাই আপনার APKগুলির মধ্যে সংস্করণ কোডগুলি অর্ডার করা উচিত যাতে পছন্দের কম্প্রেশন বিন্যাস সহ APK-এর সর্বোচ্চ সংস্করণ কোড থাকে৷ উদাহরণস্বরূপ, আপনি PVRTC, ATITC, এবং ETC1 কম্প্রেশন ফর্ম্যাট ব্যবহার করে আপনার অ্যাপের জন্য আলাদা বিল্ড করতে চাইতে পারেন। আপনি যদি এই বিন্যাসগুলিকে এই সঠিক ক্রমে পছন্দ করেন, তাহলে যে APKটি PVRTC ব্যবহার করে তার সর্বোচ্চ সংস্করণ কোড থাকা উচিত, ATITC ব্যবহার করা APKটির নিম্ন সংস্করণ কোড এবং ETC1-এর সংস্করণটি সর্বনিম্ন। এইভাবে, যদি একটি ডিভাইস PVRTC এবং ETC1 উভয়কেই সমর্থন করে, তাহলে এটি PVRTC-এর সাথে APK গ্রহণ করে, কারণ এটির সর্বোচ্চ সংস্করণ কোড রয়েছে।
যদি Google Play Store একটি টার্গেট ডিভাইসের জন্য ইনস্টল করার জন্য সঠিক APK সনাক্ত করতে অক্ষম হয়, তাহলে আপনি একটি সার্বজনীন APK তৈরি করতে চাইতে পারেন যাতে আপনি সমর্থন করতে চান এমন সমস্ত বিভিন্ন ডিভাইসের বৈচিত্রের জন্য সংস্থান অন্তর্ভুক্ত করে। আপনি যদি একটি সার্বজনীন APK প্রদান করেন, তাহলে আপনার এটিকে সর্বনিম্ন versionCode
বরাদ্দ করা উচিত। যেহেতু Google Play Store আপনার অ্যাপের সংস্করণটি ইনস্টল করে যা লক্ষ্য ডিভাইসের সাথে সামঞ্জস্যপূর্ণ এবং সর্বোচ্চ versionCode
রয়েছে, তাই সর্বজনীন APK-এ একটি নিম্ন versionCode
বরাদ্দ করা নিশ্চিত করে যে Google Play Store আপনার অন্য APKগুলির মধ্যে একটিতে ফিরে আসার আগে ইনস্টল করার চেষ্টা করে। বৃহত্তর সার্বজনীন APK।
একটি সংস্করণ কোড স্কিম ব্যবহার করে
বিভিন্ন APK-কে তাদের সংস্করণ কোডগুলিকে অন্যদের থেকে স্বাধীনভাবে আপডেট করার অনুমতি দেওয়ার জন্য (উদাহরণস্বরূপ, আপনি যখন শুধুমাত্র একটি APK-এ একটি বাগ ঠিক করেন, তাই সমস্ত APK আপডেট করার প্রয়োজন নেই), আপনার সংস্করণ কোডগুলির জন্য একটি স্কিম ব্যবহার করা উচিত যা প্রদান করে প্রতিটি APK এর মধ্যে পর্যাপ্ত রুম যাতে আপনি অন্যের সংখ্যা বৃদ্ধির প্রয়োজন ছাড়াই একটিতে কোড বাড়াতে পারেন। আপনার কোডে আপনার প্রকৃত সংস্করণের নামও অন্তর্ভুক্ত করা উচিত (অর্থাৎ, ব্যবহারকারীর দৃশ্যমান সংস্করণটি android:versionName
এ বরাদ্দ করা হয়েছে), যাতে আপনার পক্ষে সংস্করণ কোড এবং সংস্করণের নাম সংযুক্ত করা সহজ হয়৷
দ্রষ্টব্য: আপনি যখন একটি APK এর সংস্করণ কোড বাড়াবেন, Google Play পূর্ববর্তী সংস্করণের ব্যবহারকারীদের অ্যাপ্লিকেশনটি আপডেট করতে অনুরোধ করবে৷ এইভাবে, অপ্রয়োজনীয় আপডেটগুলি এড়াতে, আপনার APK-এর সংস্করণ কোড বাড়ানো উচিত নয় যেগুলি আসলে পরিবর্তনগুলি অন্তর্ভুক্ত করে না৷
আমরা কমপক্ষে 7 সংখ্যা সহ একটি সংস্করণ কোড ব্যবহার করার পরামর্শ দিই: সমর্থিত কনফিগারেশনের প্রতিনিধিত্বকারী পূর্ণসংখ্যাগুলি উচ্চতর ক্রম বিটে থাকে এবং সংস্করণের নাম ( android:versionName
থেকে) নিম্ন ক্রম বিটে থাকে। উদাহরণস্বরূপ, যখন অ্যাপ্লিকেশন সংস্করণের নাম 3.1.0 হয়, তখন API স্তর 4 APK এবং API স্তর 11 APK-এর সংস্করণ কোডগুলি যথাক্রমে 0400310 এবং 1100310 এর মতো হবে৷ প্রথম দুটি সংখ্যা API স্তরের জন্য সংরক্ষিত (যথাক্রমে 4 এবং 11), মাঝের দুটি সংখ্যা হয় স্ক্রিন আকার বা GL টেক্সচার ফর্ম্যাটের জন্য (এই উদাহরণগুলিতে ব্যবহার করা হয়নি), এবং শেষ তিনটি সংখ্যা অ্যাপ্লিকেশনটির সংস্করণ নামের জন্য (৩০.০১.২০১৬)। চিত্র 1 দুটি উদাহরণ দেখায় যা প্ল্যাটফর্ম সংস্করণ (এপিআই স্তর) এবং পর্দার আকার উভয়ের উপর ভিত্তি করে বিভক্ত হয়।
![](https://developer.android.com/static/images/market/version-codes.png?authuser=0&hl=bn)
চিত্র 1. আপনার সংস্করণ কোডগুলির জন্য একটি প্রস্তাবিত স্কিম, API স্তরের জন্য প্রথম দুটি সংখ্যা ব্যবহার করে, ন্যূনতম এবং সর্বাধিক স্ক্রীন আকারের জন্য দ্বিতীয় এবং তৃতীয় সংখ্যাগুলি (চারটি আকারের প্রতিটিকে 1 - 4 নির্দেশ করে) বা টেক্সচার ফর্ম্যাটগুলি বোঝাতে এবং অ্যাপ সংস্করণের জন্য শেষ তিনটি সংখ্যা।
সংস্করণ কোডগুলির জন্য এই স্কিমটি আপনার অ্যাপ্লিকেশনের বিকাশের সাথে সাথে কীভাবে একটি প্যাটার্ন স্থাপন করা উচিত তা কেবলমাত্র একটি পরামর্শ। বিশেষ করে, এই স্কিমটি বিভিন্ন টেক্সচার কম্প্রেশন ফরম্যাট সনাক্ত করার জন্য একটি সমাধান প্রদর্শন করে না। একটি বিকল্প হতে পারে আপনার নিজস্ব টেবিলটি সংজ্ঞায়িত করা যা আপনার অ্যাপ্লিকেশন সমর্থন করে এমন বিভিন্ন কম্প্রেশন ফর্ম্যাটের প্রতিটিতে একটি ভিন্ন পূর্ণসংখ্যা নির্দিষ্ট করে (উদাহরণস্বরূপ, 1টি ETC1 এর সাথে মিলিত হতে পারে এবং 2টি ATITC, এবং আরও অনেক কিছু)।
আপনি চাইলে যেকোন স্কিম ব্যবহার করতে পারেন, কিন্তু আপনার এপ্লিকেশনের ভবিষ্যত সংস্করণগুলিকে তাদের ভার্সন কোডগুলি কীভাবে বাড়ানোর প্রয়োজন হবে এবং ডিভাইসের কনফিগারেশন পরিবর্তন হলে (উদাহরণস্বরূপ, একটি সিস্টেম আপডেটের কারণে) বা যখন ডিভাইসগুলি আপডেটগুলি পেতে পারে তা আপনার সাবধানে বিবেচনা করা উচিত। আপনি এক বা একাধিক APK-এর জন্য কনফিগারেশন সমর্থন পরিবর্তন করেন।