Version Code হল Android ডেভেলপমেন্টে একটি ধনাত্মক পূর্ণসংখ্যা যা প্রতিটি নতুন অ্যাপ্লিকেশন বিল্ডকে স্বতন্ত্রভাবে শনাক্ত করে। Google Play এবং Android সিস্টেম একটি আপডেট প্রয়োজন কিনা তা নির্ধারণ করতে Version Code ব্যবহার করে: যদি নতুন বিল্ডের কোড ইনস্টল করা সংস্করণের চেয়ে বড় হয়, তাহলে আপডেট প্রক্রিয়া শুরু হয়। Android Developer Documentation অনুযায়ী, Version Code ব্যবহারকারীকে দেখানো হয় না এবং শুধুমাত্র অভ্যন্তরীণ সংস্করণ নম্বরিংয়ের জন্য কাজ করে।
মূল পয়েন্ট
Version Code হল Integer টাইপের একটি পূর্ণসংখ্যা যা Android অ্যাপ্লিকেশনের প্রতিটি বিল্ডকে বরাদ্দ করা হয়। Version Name এর বিপরীতে, Version Code ব্যবহারকারীকে প্রদর্শিত হয় না এবং শুধুমাত্র অপারেটিং সিস্টেম এবং Google Play দ্বারা আপডেট ইনস্টল করার সময় সংস্করণ তুলনা করার জন্য ব্যবহৃত হয়।
Version Code 1 থেকে 2100000000 এর মধ্যে একটি ধনাত্মক পূর্ণসংখ্যা হতে হবে। প্রতিটি পরবর্তী বিল্ডের Version Code আগেরটির চেয়ে কঠোরভাবে বেশি হতে হবে। যদি একজন ডেভেলপার Version Code 5 সহ একটি বিল্ড প্রকাশ করে, তবে পরবর্তী প্রকাশ 6, 7 বা 5 এর চেয়ে বড় যেকোনো সংখ্যা ব্যবহার করতে পারে, কিন্তু 4 বা আবার 5 নয়।
Google 2007 সালে Android SDK প্রকাশের সাথে Version Code এবং Version Name এর বিভাজন চালু করেছিল। Version Code স্বয়ংক্রিয় সংস্করণ তুলনার জন্য একটি মেশিন শনাক্তকারী হিসেবে ডিজাইন করা হয়েছিল, যখন Version Name একটি মানব-পাঠযোগ্য লেবেল হিসেবে। এই বিভাজন ডেভেলপারকে সংস্করণটি তাদের ইচ্ছামতো নাম দেওয়ার অনুমতি দেয়, সংখ্যাসূচক কোডের মাধ্যমে কঠোর আপডেট ক্রম বজায় রেখে।
| প্যারামিটার | Version Code | Version Name |
|---|---|---|
| ডেটা টাইপ | Integer | String |
| ব্যবহারকারীকে প্রদর্শন | না | হ্যাঁ |
| সংস্করণ তুলনা | সংখ্যাসূচক তুলনা | ব্যবহৃত হয় না |
| ফর্ম্যাট | 1, 2, 3, 10, 100 | 1.0.0, 2.3.1-rc |
| সীমা | 1 — 2100000000 | কোনো সীমা নেই |
Version Code এর তুলনা প্রক্রিয়া Android অপারেটিং সিস্টেম এবং Google Play স্টোরে নির্মিত। প্রতিটি প্রকাশের সাথে, Google Play পরীক্ষা করে যে নতুন বিল্ডের Version Code ইনস্টল করা সংস্করণের কোডের চেয়ে বেশি। যদি শর্ত পূরণ না হয়, তবে প্রকাশটি ত্রুটি সহ প্রত্যাখ্যান করা হয়।
যখন একটি ডিভাইস আপডেট চেক করার জন্য Google Play এর সাথে যোগাযোগ করে, সার্ভার ইনস্টল করা অ্যাপ্লিকেশনের Version Code কে স্টোরে উপলব্ধ সর্বোচ্চের সাথে তুলনা করে। যদি সার্ভারে কোড বেশি হয়, তাহলে আপডেটের ডাউনলোড এবং ইনস্টলেশন শুরু হয়। ব্যবহারকারী ডেভেলপারের নির্দিষ্ট করা Version Name দেখে, কিন্তু আপডেটের সিদ্ধান্ত Version Code এর ভিত্তিতে নেওয়া হয়।
ডেভেলপাররা Version Code বাড়ানোর জন্য বিভিন্ন কৌশল প্রয়োগ করে। সবচেয়ে সহজ হল প্রতিটি বিল্ডের সাথে 1 বৃদ্ধি করা। CI/CD পাইপলাইনের জন্য, প্রায়ই timestamp বা বিল্ড নম্বর ব্যবহার করা হয়: 2026070301 (বছর-মাস-দিন-সংখ্যা)। এটি গুরুত্বপূর্ণ যে কোড একদিকভাবে বৃদ্ধি পায় এবং বিভিন্ন বিল্ড এবং Google Play ট্র্যাকের মধ্যে পুনরাবৃত্তি না হয়।
Version Code এবং Version Name build.gradle এ দুটি স্বাধীন ফিল্ড যা ভিন্ন ভিন্ন কাজ করে। Version Code সিস্টেমের জন্য একটি অভ্যন্তরীণ শনাক্তকারী, Version Name ব্যবহারকারীর জন্য একটি মার্কেটিং লেবেল। এরা একে অপরের থেকে স্বাধীনভাবে পরিবর্তিত হতে পারে।
Version Name একটি স্ট্রিং যা অ্যাপ্লিকেশন সেটিংস, Google Play এবং আপডেট ডায়ালগে প্রদর্শিত হয়। ডেভেলপার যেকোনো ফর্ম্যাট নির্দিষ্ট করতে পারে: 1.0.0, 2.3.1-beta, 3.0-rc1। Version Name স্ট্রিং সংস্করণ তুলনার জন্য ব্যবহৃত হয় না — Google Play সর্বদা Version Code এর উপর নির্ভর করে।
এমন পরিস্থিতি সম্ভব যেখানে Version Code বাড়ে যখন Version Name একই থাকে। উদাহরণস্বরূপ, যদি একজন ডেভেলপার কার্যকারিতা না বদলে hotfix বিল্ডে একটি গুরুতর বাগ ঠিক করে। Version Name 2.0.0 থাকে, যখন Version Code 5 থেকে 6 এ পরিবর্তিত হয়। Google Play এই ধরনের আপডেট সঠিকভাবে পরিচালনা করবে।
// উদাহরণ: version name পরিবর্তন হয় না, কোড বৃদ্ধি পায়
android {
defaultConfig {
versionCode 6 // ছিল 5 — নতুন বৈশিষ্ট্য ছাড়া hotfix
versionName "2.0.0" // পরিবর্তন হয়নি
}
}
// রানটাইমে সংস্করণ পরীক্ষা
val code = BuildConfig.VERSION_CODE
val name = BuildConfig.VERSION_NAME
println("Code: $code, Name: $name")
Version Code কনফিগারেশন অ্যাপ্লিকেশন মডিউলের build.gradle ফাইলে করা হয়। versionCode ফিল্ড একটি পূর্ণসংখ্যা গ্রহণ করে এবং defaultConfig ব্লকের অংশ। বিভিন্ন flavour বিল্ডের জন্য, পণ্য কনফিগারেশনে versionCode ফিল্ডের মাধ্যমে কাস্টম মান সেট করা যেতে পারে।
// build.gradle.kts — Kotlin DSL
android {
defaultConfig {
applicationId "com.example.app"
versionCode 15
versionName "2.1.0"
}
flavorDimensions +"version"
productFlavors {
create("demo") {
versionCode 1015
}
create("full") {
versionCode 2015
}
}
}
Product flavors বিভিন্ন কনফিগারেশনের জন্য আলাদা Version Code ব্যবহারের অনুমতি দেয়: ডেমো সংস্করণ, ট্যাবলেটের জন্য আলাদা সংস্করণ। যদি প্রকল্পে flavors ব্যবহার করা হয়, তবে চূড়ান্ত Version Code ভিত্তি সংখ্যা এবং flavour-নির্দিষ্ট বৃদ্ধি থেকে গঠিত হয়। Google Play প্রতিটি সংমিশ্রণ স্বাধীনভাবে ট্র্যাক করে।
CI/CD পাইপলাইনে (GitHub Actions, GitLab CI, Jenkins), Version Code প্রায়ই বিল্ড নম্বর বা তারিখের ভিত্তিতে স্বয়ংক্রিয়ভাবে উৎপন্ন হয়। এটি ম্যানুয়াল আপডেটের সময় মানবিক ত্রুটি দূর করে। স্ক্রিপ্ট build.gradle থেকে বর্তমান Version Code পড়ে, এটি বাড়ায় এবং বিল্ড শুরু করার আগে এটি ফিরিয়ে লেখে।
// Version Code এর স্বয়ংক্রিয় বৃদ্ধি
import java.util.Properties
import java.io.FileInputStream
val versionProps = Properties()
versionProps.load(FileInputStream("version.properties"))
val versionCode = versionProps.getProperty("VERSION_CODE").toInt() + 1
versionProps.setProperty("VERSION_CODE", versionCode.toString())
android {
defaultConfig {
versionCode = versionCode
}
}
Google Play এর অ্যাপ্লিকেশন প্রকাশ এবং আপডেট করার সময় Version Code এর জন্য কঠোর নিয়ম রয়েছে। এই নিয়ম লঙ্ঘন করলে বিল্ড প্রত্যাখ্যান বা আপডেট প্রকাশ করতে অক্ষমতা হয়। ডেভেলপারকে জীবনচক্রের সমস্ত পর্যায়ে সীমাবদ্ধতা এবং কোড ব্যবস্থাপনা কৌশল বুঝতে হবে।
Google Play সেই APK বা AAB আপলোড করার অনুমতি দেয় না যার Version Code বর্তমানে প্রকাশিত থেকে কম বা সমান। এই নিয়ম প্রতিটি ট্র্যাকের (production, beta, alpha) জন্য স্বাধীনভাবে প্রযোজ্য। যদি production এ Version Code 10 সহ একটি বিল্ড আপলোড করা হয় এবং alpha তে কোড 5 সহ একটি বিল্ড থাকে, তাহলে alpha ট্র্যাক 6, 7, 8 বা 9 এ আপডেট করা যেতে পারে, কিন্তু production 10 এ থাকে।
বিল্ডকে alpha থেকে beta এবং তারপর production এ প্রমোট করার সময়, Version Code প্রতিটি পর্যায়ে বাড়তে হবে। যদি alpha সংস্করণে কোড 10 থাকে, তাহলে beta 11 এবং production 12 ব্যবহার করতে পারে। আপনি production এ কোড 10 সহ একটি বিল্ড প্রকাশ করতে পারবেন না যদি alpha ইতিমধ্যে 10 ব্যবহার করছে, এমনকি যদি production এখনও এটি না দেখে থাকে।
সবচেয়ে সাধারণ ত্রুটি হল একই ট্র্যাকে আপলোড করা বিভিন্ন বিল্ডে Version Code এর মিল। Google Play APK_VERSION_CODE_ALREADY_EXISTS ত্রুটি দেয়। আরেকটি ত্রুটি হল সর্বোচ্চ মান 2100000000 অতিক্রম করা, যা কম্পাইলেশন ব্যর্থতার দিকে নিয়ে যায়। দ্বন্দ্ব এড়াতে, আপনার CI সিস্টেমে বিল্ড নম্বর বা বিল্ড তারিখের সাথে সংযুক্ত স্বয়ংক্রিয় কোড জেনারেশন ব্যবহার করুন।
ডেভেলপাররা প্রায়ই বিকল্প ট্র্যাকের জন্য hotfix রিলিজ তৈরি করার সময় Version Code না বাড়ানোর ভুলও করে। যদি production এ কোড 15 থাকে এবং alpha ট্র্যাক 14 এ থেকে যায়, তাহলে alpha কে production এ প্রমোট করার সময়, Google Play বিল্ডটি প্রত্যাখ্যান করবে কারণ এর কোড বর্তমান production কোড থেকে কম। সমস্ত ট্র্যাকে একসাথে কোডের একদিকতা পর্যবেক্ষণ করুন — এর জন্য একটি একক version.properties ফাইল ব্যবহার করা সুবিধাজনক যেখান থেকে সমস্ত ট্র্যাক বর্তমান মান পড়ে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
না, Google Play একই ট্র্যাকে বর্তমানে প্রকাশিত থেকে কম বা সমান Version Code সহ একটি বিল্ড আপলোড করার অনুমতি দেয় না। সিস্টেম আপলোডের সময় কোড পরীক্ষা করে এবং যদি একদিক বৃদ্ধির নিয়ম লঙ্ঘিত হয় তবে ত্রুটি ফেরত দেয়। alpha এবং beta ট্র্যাকের জন্যও একই নীতি স্বাধীনভাবে প্রযোজ্য।
প্রথম প্রকাশের জন্য, আপনি Version Code 1 নির্দিষ্ট করতে পারেন। Google Play একটি ধনাত্মক পূর্ণসংখ্যা ছাড়া কোনো ন্যূনতম সীমা নির্ধারণ করে না। 1 দিয়ে শুরু করার এবং প্রতিটি পরবর্তী বিল্ডের সাথে 1 বাড়ানোর সুপারিশ করা হয়। আপনি যদি timestamp ফর্ম্যাট ব্যবহার করেন, তবে প্রথম বিল্ড 20260701 হতে পারে।
Version Code একটি অভ্যন্তরীণ মেশিন শনাক্তকারী যা সিস্টেম তুলনার জন্য ব্যবহার করে। Version Name একটি ব্যবহারকারী-মুখী লেবেল যা Google Play এবং ডিভাইসে প্রদর্শিত হয়। ব্যবহারকারী Version Name (উদাহরণস্বরূপ, 2.0.0) দেখে, যখন Google Play একটি আপডেট প্রয়োজন কিনা তা নির্ধারণ করতে Version Code ব্যবহার করে।
Version Code এর সর্বোচ্চ মান 2100000000 (Integer.MAX_VALUE)। অতিক্রম করলে, কম্পাইলার ত্রুটি দেবে কারণ ফিল্ডটি int টাইপের। প্রচুর সংখ্যক বিল্ড সহ প্রকল্পের জন্য (দৈনিক রিলিজ সহ CI/CD), timestamp ফর্ম্যাট ব্যবহার করার বা major সংস্করণের শুরুতে কাউন্টার রিসেট করার সুপারিশ করা হয়।
Version Code সরাসরি A/B পরীক্ষার জন্য ব্যবহৃত হয় না, তবে এটি পরোক্ষভাবে এটিকে প্রভাবিত করে। Google Play একটি নির্দিষ্ট বিল্ডের জন্য ব্যবহারকারীর শতাংশ অনুযায়ী পর্যায়ক্রমিক রোলআউট (staged rollout) কনফিগার করার অনুমতি দেয়। Version Code বিল্ড শনাক্ত করে, যখন A/B পরীক্ষাগুলি Firebase Remote Config বা অনুরূপ পরিষেবার মাধ্যমে কনফিগার করা হয়।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন