आपके ऐप्लिकेशन का वर्शन

ऐप्लिकेशन के अपग्रेड और रखरखाव के लिए, वर्शन बनाना ज़रूरी होता है रणनीति. वर्शन बनाना ज़रूरी है, क्योंकि:

  • उपयोगकर्ताओं को ऐप्लिकेशन के उस वर्शन के बारे में खास जानकारी देनी होगी जो अपने डिवाइस पर इंस्टॉल किया जाता है और इंस्टॉल करना.
  • अन्य ऐप्लिकेशन—जिनमें ऐसे अन्य ऐप्लिकेशन शामिल हैं जिन्हें आपने इस नाम से पब्लिश किया है सुइट—ऐप्लिकेशन के वर्शन के लिए सिस्टम से क्वेरी करनी होगी, साथ मिलकर काम करने का तरीका तय कर सकते हैं और उन डिपेंडेंसी की पहचान कर सकते हैं.
  • जिन सेवाओं पर ऐप्लिकेशन पब्लिश किए जाते हैं उनके लिए ये काम भी करने पड़ सकते हैं अपने ऐप्लिकेशन के वर्शन के लिए क्वेरी करें, ताकि वे उपयोगकर्ता. पब्लिश करने वाली सेवा को, ऐप्लिकेशन का वर्शन भी देखना पड़ सकता है, ताकि संगतता निर्धारित करने और अपग्रेड/डाउनग्रेड संबंध स्थापित करने में मदद मिलती है.

Android सिस्टम आपके ऐप्लिकेशन के वर्शन की जानकारी का इस्तेमाल करता है, ताकि कम कर सकता है. कॉन्टेंट बनाने सिस्टम, ऐप्लिकेशन के वर्शन की जानकारी का इस्तेमाल, अपग्रेड या तीसरे पक्ष के ऐप्लिकेशन के साथ काम करता है. आपके ऐप्लिकेशन को उपयोगकर्ताओं को उनके बारे में बताएं.

Android सिस्टम, सिस्टम वर्शन के साथ काम करने की सुविधा लागू करता है, जैसा कि यहां बताया गया है बिल्ड फ़ाइलों में minSdk सेटिंग का इस्तेमाल करके. यह सेटिंग ऐप्लिकेशन को सिस्टम एपीआई के लिए ज़रूरी कम से कम सीमा तय करने की अनुमति देती है. एपीआई की ज़रूरी शर्तों के बारे में ज़्यादा जानकारी के लिए, एपीआई लेवल से जुड़ी ज़रूरी शर्तें बताना देखें.

अलग-अलग प्रोजेक्ट के लिए वर्शन की शर्तें अलग-अलग होती हैं. हालांकि, कई डेवलपर सिमैंटिक वर्शनिंग वर्शन बनाने की रणनीति.

ऐप्लिकेशन वर्शन की जानकारी सेट करें

अपने ऐप्लिकेशन के वर्शन की जानकारी देने के लिए, वर्शन की वैल्यू सेट करें Gradle बिल्ड फ़ाइलों में सेटिंग:

ग्रूवी

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

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

Kotlin

    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 सेटिंग. Android सिस्टम, डाउनग्रेड करने से रोकने के लिए, versionCode वैल्यू उपयोगकर्ताओं को इससे कम versionCode वाला APK इंस्टॉल करने से रोकना उनके डिवाइस पर फ़िलहाल इंस्टॉल किया गया वर्शन है.

मान एक धनात्मक पूर्णांक होता है, ताकि दूसरे ऐप्लिकेशन प्रोग्राम के हिसाब से अपने-आप होने वाली प्रोसेस का आकलन कर सकें उसे—उदाहरण के लिए, अपग्रेड या डाउनग्रेड संबंध की जांच करनी चाहिए. आप मान को किसी भी धनात्मक पूर्णांक पर सेट करें. हालांकि, पक्का करें कि आपके ऐप्लिकेशन की हर रिलीज़ के लिए ज़्यादा वैल्यू का इस्तेमाल होता है.

ध्यान दें: Google Play, आपको versionCode 2100000000 है.

अपने मौजूदा versionCode के साथ, Play Store पर APK अपलोड नहीं किया जा सकता इसका उपयोग पिछले वर्शन के लिए पहले ही किया जा चुका है.

ध्यान दें: कुछ स्थितियों में, अपने ऐप्लिकेशन का ऐसा वर्शन अपलोड करें जिसका साइज़, सबसे कम versionCode वाले वर्शन से कम हो हाल ही का वर्शन. उदाहरण के लिए, अगर आप कई APK प्रकाशित कर रहे हैं, तो हो सकता है कि खास APK के लिए versionCode रेंज को पहले से सेट करें. इसके बारे में ज़्यादा जानकारी एक से ज़्यादा APK के लिए versionCode मान असाइन करते हुए, देखें वर्शन कोड असाइन करना.

आम तौर पर, अपने ऐप्लिकेशन का पहला वर्शन versionCode को 1 पर सेट करें. इसके बाद, एक ही तरीके से वैल्यू बढ़ाएं शामिल किया गया है, चाहे रिलीज़ में एक बड़ी रिलीज़ शामिल हो या मामूली रिलीज़. इसका मतलब है कि versionCode वैल्यू ज़रूरी है कि यह ऐप्लिकेशन के रिलीज़ वर्शन से मिलता-जुलता हो उपयोगकर्ता को दिखता हो. ऐप्लिकेशन और पब्लिश करने वाली सेवाओं को यह वर्शन नहीं दिखाना चाहिए इस्तेमाल किया जाता है.

versionName

को दिखाई गई वर्शन संख्या के रूप में इस्तेमाल की जाने वाली स्ट्रिंग उपयोगकर्ता. इस सेटिंग को रॉ स्ट्रिंग या किसी स्ट्रिंग संसाधन.

वैल्यू एक स्ट्रिंग होती है, ताकि आप ऐप्लिकेशन वर्शन का ब्यौरा इस तरह दे सकें: <मुख्य>.<मामूली>.<point> स्ट्रिंग या दूसरी तरह की ऐब्सलूट या रिलेटिव वर्शन आइडेंटिफ़ायर. सिर्फ़ versionName ही वैल्यू है उपयोगकर्ताओं को दिखाया जाता है.

वर्शन की वैल्यू तय करें

इन सेटिंग के लिए डिफ़ॉल्ट वैल्यू तय करने के लिए, उन्हें यहां दिया गया defaultConfig {} ब्लॉक, android {} में नेस्ट किया गया है आपके मॉड्यूल की build.gradle या build.gradle.kts फ़ाइल के ब्लॉक में हो. आप फिर अलग-अलग कीवर्ड हर तरह के बिल्ड टाइप या प्रॉडक्ट के फ़्लेवर के लिए अलग-अलग वैल्यू दी जा सकती हैं. यह फ़ाइल, versionCode और versionName सेटिंग defaultConfig {} ब्लॉक और productFlavors {} ब्लॉक.

इसके बाद, बिल्ड प्रोसेस के दौरान इन वैल्यू को आपके ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में मर्ज कर दिया जाता है.

ग्रूवी

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

Kotlin

    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-demo", "डेमो" बिल्ड, डिफ़ॉल्ट वैल्यू के बजाय इस versionName का इस्तेमाल करता है. "पूरा" प्रॉडक्ट फ़्लेवर ब्लॉक versionName के बारे में नहीं बताता है, इसलिए यह "1.1" की डिफ़ॉल्ट वैल्यू का इस्तेमाल करता है.

ध्यान दें: अगर आपका ऐप्लिकेशन, <manifest> एलिमेंट, Gradle बिल्ड में वर्शन की वैल्यू फ़ाइल मेनिफ़ेस्ट में सेटिंग को ओवरराइड करती है. इसके अलावा, इन शर्तों के बारे में Gradle बिल्ड फ़ाइलों में सेटिंग की मदद से, आप के अलग-अलग वर्शन हैं. ज़्यादा सुविधाओं और नुकसान से बचने के लिए जब मेनिफ़ेस्ट को मर्ज कर दिया जाए, तो संभावित ओवरराइटिंग को हटा दें <manifest> एलिमेंट से एट्रिब्यूट जोड़े गए हैं और के बजाय Gradle बिल्ड फ़ाइलों में वर्शन सेटिंग का इस्तेमाल करेगा.

Android फ़्रेमवर्क, एक एपीआई उपलब्ध कराता है, ताकि आप सिस्टम से क्वेरी कर सकें देखने के लिए. वर्शन की जानकारी पाने के लिए, का इस्तेमाल करें PackageManager.getPackageInfo(java.lang.String, int) तरीका.

एपीआई लेवल से जुड़ी ज़रूरी शर्तें बताना

अगर आपके ऐप्लिकेशन को Android के किसी खास वर्शन की ज़रूरत है, तो प्लैटफ़ॉर्म है, तो उस वर्शन की ज़रूरत को एपीआई लेवल की सेटिंग के तौर पर तय किया जा सकता है ऐप्लिकेशन की build.gradle या build.gradle.kts फ़ाइल में. बिल्ड के दौरान प्रक्रिया के दौरान, ये सेटिंग आपके ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में मर्ज कर दी जाती हैं. एपीआई लेवल की जानकारी देना ज़रूरी शर्तों से यह पक्का होता है कि आपका ऐप्लिकेशन सिर्फ़ उन डिवाइसों पर इंस्टॉल किया जा सकता है Android प्लैटफ़ॉर्म के साथ काम करने वाला वर्शन इस्तेमाल कर रहे हों.

ध्यान दें: अगर एपीआई लेवल की ज़रूरी शर्तों को सीधे तौर पर ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में बताई गई हैं, तो बिल्ड फ़ाइलों में मौजूद उनसे जुड़ी सेटिंग मेनिफ़ेस्ट फ़ाइल में सेटिंग ओवरराइड करें. इसके अलावा, इन शर्तों के बारे में Gradle बिल्ड फ़ाइलों में सेटिंग की मदद से, आप के अलग-अलग वर्शन हैं. ज़्यादा सुविधाओं और नुकसान से बचने के लिए जब मेनिफ़ेस्ट को मर्ज कर दिया जाए, तो संभावित ओवरराइटिंग को हटा दें <uses-sdk> एलिमेंट से एट्रिब्यूट जोड़े गए हैं और आपके एपीआई के बारे में बताया गया है लेवल सेटिंग का इस्तेमाल करें.

एपीआई लेवल की दो सेटिंग उपलब्ध हैं:

  • minSdk — कम से कम वर्शन जिस पर ऐप्लिकेशन चलेगा. प्लैटफ़ॉर्म के एपीआई लेवल आइडेंटिफ़ायर से.
  • targetSdk — एपीआई लेवल जिस पर ऐप्लिकेशन को चलने के लिए डिज़ाइन किया गया है. कुछ मामलों में, इसकी मदद से ऐप्लिकेशन, टारगेट में बताए गए मेनिफ़ेस्ट एलिमेंट या व्यवहार का इस्तेमाल करे सिर्फ़ तय की गई वैल्यू का इस्तेमाल करने तक सीमित होने के बजाय, एपीआई लेवल पर एपीआई लेवल की ज़रूरी शर्तें पूरी करता है.

build.gradle में एपीआई लेवल की डिफ़ॉल्ट ज़रूरतें बताने के लिए या build.gradle.kts फ़ाइल का इस्तेमाल करने के लिए, defaultConfig{} ब्लॉक, android {} ब्लॉक में नेस्ट किया गया है. आप साथ ही, अलग-अलग पैरामीटर के लिए इन डिफ़ॉल्ट वैल्यू को अपने ऐप्लिकेशन के वर्शन और उनके अलग-अलग फ़्लेवर बनाने के लिए सेटिंग जोड़कर.

यह फ़ाइल डिफ़ॉल्ट फ़ाइल के तौर पर सेट है minSdk और targetSdk सेटिंग defaultConfig {} को ब्लॉक करें और minSdk को बदलें अलग-अलग फ़्लेवर के लिए:

ग्रूवी

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

Kotlin

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

आपके ऐप्लिकेशन को इंस्टॉल करने की तैयारी करते समय, सिस्टम ये सेटिंग और सिस्टम वर्शन से उनकी तुलना करती है. अगर minSdk की वैल्यू, सिस्टम वर्शन से बड़ी है, इसलिए सिस्टम, ऐप्लिकेशन के इंस्टॉल होने से रोकता है.

अगर इन सेटिंग को तय नहीं किया जाता है, तो सिस्टम यह मान लेता है कि आपका ऐप्लिकेशन सभी प्लेटफ़ॉर्म वर्शन के साथ काम करता है. यह minSdk को इस पर सेट करने के बराबर है 1.

ज़्यादा जानकारी के लिए, एपीआई लेवल क्या है? देखें. Gradle बिल्ड सेटिंग के लिए, बिल्ड वैरिएंट कॉन्फ़िगर करना देखें.