আপনার অ্যাপ্লিকেশন সংস্করণ

সংস্করণ আপনার অ্যাপ্লিকেশন আপগ্রেড এবং রক্ষণাবেক্ষণ কৌশলটির একটি গুরুত্বপূর্ণ উপাদান। সংস্করণ করা গুরুত্বপূর্ণ কারণ:

  • ব্যবহারকারীদের তাদের ডিভাইসে ইনস্টল করা অ্যাপ সংস্করণ এবং ইনস্টলেশনের জন্য উপলব্ধ আপগ্রেড সংস্করণ সম্পর্কে নির্দিষ্ট তথ্য থাকতে হবে।
  • অন্যান্য অ্যাপ্লিকেশানগুলি—অন্যান্য অ্যাপ্লিকেশানগুলি সহ যা আপনি একটি স্যুট হিসাবে প্রকাশ করেন—সামঞ্জস্যতা নির্ধারণ করতে এবং নির্ভরতা সনাক্ত করতে আপনার অ্যাপের সংস্করণের জন্য সিস্টেমকে জিজ্ঞাসা করতে হবে৷
  • যে পরিষেবাগুলিতে আপনি আপনার অ্যাপ(গুলি) প্রকাশ করেন সেগুলিকে আপনার অ্যাপের সংস্করণের জন্য জিজ্ঞাসা করতে হতে পারে যাতে তারা ব্যবহারকারীদের কাছে সংস্করণটি প্রদর্শন করতে পারে। সামঞ্জস্যতা নির্ধারণ করতে এবং আপগ্রেড/ডাউনগ্রেড সম্পর্ক স্থাপন করতে একটি প্রকাশনা পরিষেবাকে অ্যাপ সংস্করণ পরীক্ষা করতে হতে পারে।

অ্যান্ড্রয়েড সিস্টেম ডাউনগ্রেড থেকে রক্ষা করতে আপনার অ্যাপের সংস্করণ তথ্য ব্যবহার করে। সিস্টেম আপগ্রেড বা তৃতীয় পক্ষের অ্যাপগুলির সামঞ্জস্যের উপর বিধিনিষেধ প্রয়োগ করতে অ্যাপ সংস্করণ তথ্য ব্যবহার করে না। আপনার অ্যাপকে অবশ্যই যেকোন সংস্করণের সীমাবদ্ধতা প্রয়োগ করতে হবে এবং ব্যবহারকারীদের সেগুলি সম্পর্কে জানাতে হবে।

অ্যান্ড্রয়েড সিস্টেম সিস্টেম সংস্করণ সামঞ্জস্যতা প্রয়োগ করে, যেমনটি বিল্ড ফাইলগুলিতে minSdk সেটিং দ্বারা প্রকাশ করা হয়েছে। এই সেটিংটি একটি অ্যাপকে ন্যূনতম সিস্টেম API নির্দিষ্ট করতে দেয় যার সাথে এটি সামঞ্জস্যপূর্ণ। API প্রয়োজনীয়তা সম্পর্কে আরও তথ্যের জন্য, API স্তর (SDK সংস্করণ) প্রয়োজনীয়তা নির্দিষ্ট করুন দেখুন।

সংস্করণের প্রয়োজনীয়তা বিভিন্ন প্রকল্পের মধ্যে পরিবর্তিত হয়। যাইহোক, অনেক ডেভেলপার সিমান্টিক ভার্সনিংকে একটি ভার্সনিং কৌশলের জন্য একটি ভালো ভিত্তি হিসেবে বিবেচনা করে।

অ্যাপ সংস্করণ তথ্য সেট করুন

আপনার অ্যাপের সংস্করণ তথ্য নির্ধারণ করতে, গ্রেডল বিল্ড ফাইলগুলিতে সংস্করণ সেটিংসের জন্য মান সেট করুন:

গ্রোভি

    android {
      namespace 'com.example.testapp'
      compileSdk 33

      defaultConfig {
          applicationId "com.example.testapp"
          minSdk 24
          targetSdk 33
          versionCode 1
          versionName "1.0"
          ...
      }
      ...
    }
    ...
    

কোটলিন

    android {
      namespace = "com.example.testapp"
      compileSdk = 33

      defaultConfig {
          applicationId = "com.example.testapp"
          minSdk = 24
          targetSdk = 33
          versionCode = 1
          versionName = "1.0"
          ...
      }
      ...
    }
    ...
      

সংস্করণ সেটিংস

উপলব্ধ সংস্করণ সেটিংস উভয়ের জন্য মান সংজ্ঞায়িত করুন: versionCode এবং versionName

versionCode
অভ্যন্তরীণ সংস্করণ সংখ্যা হিসাবে ব্যবহৃত একটি ধনাত্মক পূর্ণসংখ্যা। এই সংখ্যাটি একটি সংস্করণ অন্যটির চেয়ে সাম্প্রতিক কিনা তা নির্ধারণ করতে সাহায্য করে, উচ্চ সংখ্যাগুলি আরও সাম্প্রতিক সংস্করণগুলিকে নির্দেশ করে৷ এটি ব্যবহারকারীদের দেখানো সংস্করণ নম্বর নয়; যে সংখ্যাটি versionName সেটিং দ্বারা সেট করা হয়েছে। অ্যান্ড্রয়েড সিস্টেম versionCode মান ব্যবহার করে ডাউনগ্রেডের বিরুদ্ধে সুরক্ষার জন্য ব্যবহারকারীদের তাদের ডিভাইসে বর্তমানে ইনস্টল করা সংস্করণের চেয়ে কম versionCode সহ একটি APK ইনস্টল করা থেকে বাধা দেয়।

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

দ্রষ্টব্য: Google Play versionCode জন্য সবচেয়ে বেশি মান 2100000000 অনুমোদন করে।

আপনি পূর্ববর্তী সংস্করণের জন্য ইতিমধ্যেই ব্যবহার করেছেন এমন versionCode সহ আপনি প্লে স্টোরে একটি APK আপলোড করতে পারবেন না৷

দ্রষ্টব্য: কিছু পরিস্থিতিতে, আপনি সাম্প্রতিক সংস্করণের চেয়ে কম versionCode সহ আপনার অ্যাপের একটি সংস্করণ আপলোড করতে চাইতে পারেন৷ উদাহরণস্বরূপ, আপনি যদি একাধিক APK প্রকাশ করেন, তাহলে নির্দিষ্ট APKগুলির জন্য আপনার কাছে পূর্ব-সেট versionCode রেঞ্জ থাকতে পারে। একাধিক এপিকে -র জন্য versionCode মান নির্ধারণের বিষয়ে আরও তথ্যের জন্য, সংস্করণ কোডগুলি বরাদ্দ করা দেখুন।

সাধারণত, আপনি আপনার অ্যাপের প্রথম সংস্করণটি versionCode 1-এ সেট করে রিলিজ করেন, তারপর রিলিজটি বড় বা ছোট রিলিজ নির্বিশেষে প্রতিটি রিলিজের সাথে একঘেয়েভাবে মান বাড়ান। এর অর্থ হ'ল versionCode মানটি ব্যবহারকারীর কাছে দৃশ্যমান অ্যাপ্লিকেশন রিলিজ সংস্করণটির সাথে সাদৃশ্যপূর্ণ নয়। অ্যাপ এবং প্রকাশনা পরিষেবাগুলি ব্যবহারকারীদের কাছে এই সংস্করণের মান প্রদর্শন করা উচিত নয়৷

versionName

ব্যবহারকারীদের দেখানো সংস্করণ নম্বর হিসেবে ব্যবহৃত একটি স্ট্রিং। এই সেটিংটি একটি কাঁচা স্ট্রিং হিসাবে বা একটি স্ট্রিং সংস্থানের রেফারেন্স হিসাবে নির্দিষ্ট করা যেতে পারে।

মানটি একটি স্ট্রিং যাতে আপনি অ্যাপ সংস্করণটিকে একটি <major>.<minor>.<point> স্ট্রিং বা অন্য যেকোনো ধরনের পরম বা আপেক্ষিক সংস্করণ সনাক্তকারী হিসাবে বর্ণনা করতে পারেন। versionName ব্যবহারকারীদের কাছে প্রদর্শিত একমাত্র মান।

সংস্করণ মান সংজ্ঞায়িত করুন

আপনার মডিউলের build.gradle বা build.gradle.kts ফাইলের android {} ব্লকের ভিতরে থাকা defaultConfig {} ব্লকে অন্তর্ভুক্ত করে আপনি এই সেটিংসের জন্য ডিফল্ট মান নির্ধারণ করতে পারেন। তারপরে আপনি পৃথক বিল্ড প্রকার বা পণ্যের স্বাদের জন্য পৃথক মান নির্ধারণ করে আপনার অ্যাপের বিভিন্ন সংস্করণের জন্য এই ডিফল্ট মানগুলিকে ওভাররাইড করতে পারেন। নিম্নলিখিত ফাইলটি defaultConfig {} ব্লকে versionCode এবং versionName সেটিংস দেখায়, সেইসাথে productFlavors {} ব্লক।

এই মানগুলি বিল্ড প্রক্রিয়া চলাকালীন আপনার অ্যাপের ম্যানিফেস্ট ফাইলে মার্জ করা হয়।

গ্রোভি

    android {
        ...
        defaultConfig {
            ...
            versionCode 2
            versionName "1.1"
        }
        productFlavors {
            demo {
                ...
                versionName "1.1-demo"
            }
            full {
                ...
            }
        }
    }
    

কোটলিন

    android {
        ...
        defaultConfig {
            ...
            versionCode = 2
            versionName = "1.1"
        }
        productFlavors {
            create("demo") {
                ...
                versionName = "1.1-demo"
            }
            create("full") {
                ...
            }
        }
    }
    

এই উদাহরণের defaultConfig {} ব্লকে, versionCode মান নির্দেশ করে যে বর্তমান APK-এ অ্যাপের দ্বিতীয় রিলিজ রয়েছে এবং versionName স্ট্রিং নির্দিষ্ট করে যে এটি ব্যবহারকারীদের কাছে সংস্করণ 1.1 হিসাবে দেখাবে। এই ফাইলটি দুটি পণ্যের স্বাদও সংজ্ঞায়িত করে, "ডেমো" এবং "পূর্ণ"। যেহেতু "ডেমো" পণ্য স্বাদ versionName "1.1-ডেমো" হিসাবে সংজ্ঞায়িত করে, তাই "ডেমো" বিল্ডটি ডিফল্ট মানের পরিবর্তে এই versionName ব্যবহার করে। "সম্পূর্ণ" পণ্যের ফ্লেভার ব্লক versionName সংজ্ঞায়িত করে না, তাই এটি "1.1" এর ডিফল্ট মান ব্যবহার করে।

দ্রষ্টব্য: যদি আপনার অ্যাপটি <manifest> উপাদানে সরাসরি অ্যাপ সংস্করণ সংজ্ঞায়িত করে, তাহলে গ্রেডল বিল্ড ফাইলের সংস্করণের মান ম্যানিফেস্টের সেটিংসকে ওভাররাইড করে। উপরন্তু, Gradle বিল্ড ফাইলগুলিতে এই সেটিংস সংজ্ঞায়িত করা আপনাকে আপনার অ্যাপের বিভিন্ন সংস্করণের জন্য বিভিন্ন মান নির্দিষ্ট করতে দেয়। বৃহত্তর নমনীয়তার জন্য এবং ম্যানিফেস্ট একত্রিত হলে সম্ভাব্য ওভাররাইটিং এড়াতে, <manifest> উপাদান থেকে এই বৈশিষ্ট্যগুলি সরান এবং পরিবর্তে Gradle বিল্ড ফাইলগুলিতে আপনার সংস্করণ সেটিংস সংজ্ঞায়িত করুন।

অ্যান্ড্রয়েড ফ্রেমওয়ার্ক একটি API প্রদান করে যা আপনাকে আপনার অ্যাপ সম্পর্কে সংস্করণ তথ্যের জন্য সিস্টেমে অনুসন্ধান করতে দেয়। সংস্করণ তথ্য পেতে, PackageManager.getPackageInfo(java.lang.String, int) পদ্ধতি ব্যবহার করুন।

এপিআই স্তর (এসডিকে সংস্করণ) প্রয়োজনীয়তা নির্দিষ্ট করুন

যদি আপনার অ্যাপের Android প্ল্যাটফর্মের একটি নির্দিষ্ট ন্যূনতম সংস্করণের প্রয়োজন হয়, তাহলে আপনি অ্যাপটির build.gradle বা build.gradle.kts ফাইলে API স্তরের সেটিংস হিসাবে সেই সংস্করণের প্রয়োজনীয়তাটি নির্দিষ্ট করতে পারেন। বিল্ড প্রক্রিয়া চলাকালীন, এই সেটিংসটি আপনার অ্যাপের ম্যানিফেস্ট ফাইলে একীভূত হয়। API স্তরের প্রয়োজনীয়তাগুলি নির্দিষ্ট করা নিশ্চিত করে যে আপনার অ্যাপটি শুধুমাত্র সেই ডিভাইসগুলিতে ইনস্টল করা যেতে পারে যেগুলি Android প্ল্যাটফর্মের একটি সামঞ্জস্যপূর্ণ সংস্করণ চালাচ্ছে৷

দ্রষ্টব্য: আপনি যদি সরাসরি আপনার অ্যাপের ম্যানিফেস্ট ফাইলে API স্তরের প্রয়োজনীয়তা নির্দিষ্ট করেন, তাহলে বিল্ড ফাইলের সংশ্লিষ্ট সেটিংস ম্যানিফেস্ট ফাইলের সেটিংসকে ওভাররাইড করবে। উপরন্তু, Gradle বিল্ড ফাইলগুলিতে এই সেটিংস সংজ্ঞায়িত করা আপনাকে আপনার অ্যাপের বিভিন্ন সংস্করণের জন্য বিভিন্ন মান নির্দিষ্ট করতে দেয়। বৃহত্তর নমনীয়তার জন্য এবং ম্যানিফেস্ট একত্রিত হলে সম্ভাব্য ওভাররাইটিং এড়াতে, <uses-sdk> উপাদান থেকে এই বৈশিষ্ট্যগুলি সরান এবং পরিবর্তে Gradle বিল্ড ফাইলগুলিতে আপনার API স্তরের সেটিংস সংজ্ঞায়িত করুন।

দুটি এপিআই স্তরের সেটিংস উপলব্ধ:

  • minSdk — অ্যান্ড্রয়েড প্ল্যাটফর্মের ন্যূনতম সংস্করণ যেখানে অ্যাপটি চলবে, প্ল্যাটফর্মের API স্তর শনাক্তকারী দ্বারা নির্দিষ্ট করা হয়েছে।
  • targetSdk — API স্তর, <SDK_INT> ধ্রুবকের সাথে আবদ্ধ, যার উপর অ্যাপটি চালানোর জন্য ডিজাইন করা হয়েছে। কিছু ক্ষেত্রে, এটি অ্যাপটিকে ন্যূনতম API স্তরের জন্য সংজ্ঞায়িত শুধুমাত্র ব্যবহার করার জন্য সীমাবদ্ধ না করে লক্ষ্য API স্তরে সংজ্ঞায়িত ম্যানিফেস্ট উপাদান বা আচরণগুলি ব্যবহার করার অনুমতি দেয়৷
  • এটি নির্দিষ্ট করা সম্ভব নয় যে একটি অ্যাপ হয় টার্গেট করে বা একটি ছোট SDK সংস্করণ প্রয়োজন। আপনার minSdkVersion এর চেয়ে উচ্চতর বড় বা ছোট SDK সংস্করণের প্রয়োজন হয় এমন নতুন APIগুলিকে নিরাপদে কল করতে, আপনি SDK_INT_FULL ধ্রুবক ব্যবহার করে একটি ছোট বা বড় রিলিজের জন্য চেক সহ একটি কোড ব্লক রক্ষা করতে পারেন৷

    if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
      // Use APIs introduced in a major or minor SDK version
    }

একটি build.gradle বা build.gradle.kts ফাইলে ডিফল্ট API স্তরের প্রয়োজনীয়তাগুলি নির্দিষ্ট করতে, android {} ব্লকের ভিতরে থাকা defaultConfig{} ব্লকে এক বা একাধিক API স্তরের সেটিংস যোগ করুন৷ আপনি প্রকার বা পণ্যের স্বাদ তৈরি করতে সেটিংস যুক্ত করে আপনার অ্যাপ্লিকেশনটির বিভিন্ন সংস্করণের জন্য এই ডিফল্ট মানগুলি ওভাররাইড করতে পারেন।

নিম্নলিখিত ফাইলটি ডিফল্ট defaultConfig {} ব্লকে ডিফল্ট minSdk এবং targetSdk সেটিংস নির্দিষ্ট করে এবং একটি পণ্যের স্বাদের জন্য minSdk ওভাররাইড করে:

গ্রোভি

android {
    ...
    defaultConfig {
        ...
        minSdk 21
        targetSdk 33
    }
    productFlavors {
        main {
            ...
        }
        afterNougat {
            ...
            minSdk 24
        }
    }
}

কোটলিন

android {
    ...
    defaultConfig {
        ...
        minSdk = 21
        targetSdk = 33
    }
    productFlavors {
        create("main") {
            ...
        }
        create("afterNougat") {
            ...
            minSdk = 24
        }
    }
}

আপনার অ্যাপ ইনস্টল করার প্রস্তুতির সময়, সিস্টেম এই সেটিংসের মান পরীক্ষা করে এবং সেগুলিকে সিস্টেম সংস্করণের সাথে তুলনা করে। যদি minSdk মান সিস্টেম সংস্করণের চেয়ে বেশি হয়, তবে সিস্টেমটি অ্যাপটি ইনস্টল করতে বাধা দেয়।

আপনি যদি এই সেটিংস নির্দিষ্ট না করেন, তাহলে সিস্টেমটি ধরে নেয় যে আপনার অ্যাপটি সমস্ত প্ল্যাটফর্ম সংস্করণের সাথে সামঞ্জস্যপূর্ণ। এটি minSdk 1 এ সেট করার সমতুল্য।

আরও তথ্যের জন্য, দেখুন API স্তর কী? . Gradle বিল্ড সেটিংসের জন্য, বিল্ড ভেরিয়েন্ট কনফিগার করুন দেখুন।