कंडिशनल डिलीवरी कॉन्फ़िगर करें

शर्तों के साथ डिलीवरी की सुविधा की मदद से, डिवाइस कॉन्फ़िगरेशन से जुड़ी कुछ ज़रूरी शर्तें सेट की जा सकती हैं. इससे, ऐप्लिकेशन इंस्टॉल करने के दौरान सुविधा वाले मॉड्यूल अपने-आप डाउनलोड हो जाएंगे. उदाहरण के लिए, ऐसा फ़ीचर मॉड्यूल कॉन्फ़िगर किया जा सकता है जिसमें ऑगमेंटेड रिएलिटी (एआर) की सुविधा शामिल हो. यह सुविधा, सिर्फ़ उन डिवाइसों पर ऐप्लिकेशन इंस्टॉल करने के दौरान उपलब्ध होगी जिन पर एआर काम करता है.

डिलीवरी के इस तरीके से, फ़िलहाल ऐप्लिकेशन इंस्टॉल करने के समय किसी मॉड्यूल के डाउनलोड को कंट्रोल किया जा सकता है. इसके लिए, डिवाइस के इन कॉन्फ़िगरेशन का इस्तेमाल किया जाता है:

अगर कोई डिवाइस आपकी बताई गई सभी ज़रूरी शर्तें पूरी नहीं करता है, तो ऐप्लिकेशन इंस्टॉल करने के समय मॉड्यूल डाउनलोड नहीं किया जाता. हालांकि, आपका ऐप्लिकेशन बाद में Play Core SDK टूल का इस्तेमाल करके, ज़रूरत पड़ने पर मॉड्यूल डाउनलोड करने का अनुरोध कर सकता है.

शुरू करने से पहले, पक्का करें कि आपके पास Android Studio 3.5 या इसके बाद का वर्शन हो. यहां दिए गए सेक्शन में, आपको अपने फ़ीचर मॉड्यूल में, शर्त के हिसाब से डिलीवरी की सुविधा जोड़ने का तरीका बताया गया है.

शर्त के साथ डिलीवरी के विकल्पों वाला नया मॉड्यूल जोड़ना

शर्तों के हिसाब से डिलीवरी की सुविधा के साथ नया सुविधा मॉड्यूल बनाने का सबसे आसान तरीका, नया मॉड्यूल विज़र्ड का इस्तेमाल करना है. इसके लिए, यह तरीका अपनाएं:

  1. नया मॉड्यूल डायलॉग खोलने के लिए, मेन्यू बार से फ़ाइल > नया > नया मॉड्यूल चुनें.
  2. 'नया मॉड्यूल' डायलॉग में, डाइनैमिक फ़ीचर मॉड्यूल चुनें और आगे बढ़ें पर क्लिक करें.
  3. अपने मॉड्यूल को उसी तरह कॉन्फ़िगर करें जिस तरह आम तौर पर किया जाता है. इसके बाद, आगे बढ़ें पर क्लिक करें.
  4. मॉड्यूल डाउनलोड करने के विकल्प सेक्शन में, यह तरीका अपनाएं:

    1. ज़्यादा से ज़्यादा 50 वर्णों का इस्तेमाल करके, मॉड्यूल का टाइटल डालें. प्लैटफ़ॉर्म, उपयोगकर्ताओं को मॉड्यूल की पहचान करने के लिए इस टाइटल का इस्तेमाल करता है. उदाहरण के लिए, यह पुष्टि करने के लिए कि उपयोगकर्ता को मॉड्यूल डाउनलोड करना है या नहीं. इस वजह से, आपके ऐप्लिकेशन के बेस मॉड्यूल में, मॉड्यूल का टाइटल स्ट्रिंग रिसॉर्स के तौर पर शामिल होना चाहिए. इस टाइटल का अनुवाद किया जा सकता है. Android Studio का इस्तेमाल करके मॉड्यूल बनाते समय, IDE आपके लिए बेस मॉड्यूल में स्ट्रिंग रिसॉर्स जोड़ता है. साथ ही, सुविधा मॉड्यूल के मेनिफ़ेस्ट में यह एंट्री इंजेक्ट करता है:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. इंस्टॉल के समय शामिल करना में मौजूद ड्रॉपडाउन मेन्यू में, सिर्फ़ उन डिवाइसों के लिए ऐप्लिकेशन इंस्टॉल करते समय मॉड्यूल शामिल करें जिनमें खास सुविधाएं हैं को चुनें. इससे एक मॉड्यूल बनता है, जो ऐप्लिकेशन इंस्टॉल करते समय सिर्फ़ उन डिवाइसों पर शामिल होता है जिनमें आपके बताए गए कुछ कॉन्फ़िगरेशन हैं. जैसे, डिवाइस की सुविधाएं या देश. आपकी पसंद को दिखाने के लिए, Android Studio मॉड्यूल के मेनिफ़ेस्ट में ये चीज़ें इंजेक्ट करता है:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time>
                <dist:conditions>
                    <!-- If you specify conditions, as described in the steps
                         below, the IDE includes them here. -->
                </dist:conditions>
            </dist:install-time>
        </dist:delivery>
      </dist:module>
      
    3. अगर आपको मॉड्यूल के अपने-आप डाउनलोड होने की सुविधा को कुछ देशों या कम से कम एपीआई लेवल तक सीमित करना है, तो मॉड्यूल बनाने की प्रोसेस पूरी करने के लिए पूरा करें पर क्लिक करें. इसके बाद, देश के हिसाब से शर्तें तय करने या कम से कम एपीआई लेवल तय करने का तरीका जानने के लिए, सेक्शन पढ़ें. इसके अलावा, + डिवाइस की सुविधा पर क्लिक करके, वह सुविधा जोड़ें जो डिवाइस के लिए ज़रूरी है, ताकि इंस्टॉल के समय मॉड्यूल डाउनलोड किया जा सके.

    4. device-feature के बगल में, ड्रॉपडाउन मेन्यू से इनमें से कोई एक विकल्प चुनें और उसकी वैल्यू डालें:

      • नाम: इसकी मदद से, किसी हार्डवेयर या सॉफ़्टवेयर की सुविधा के बारे में बताया जा सकता है. यह सुविधा, डिवाइस में मॉड्यूल इंस्टॉल करने के समय ज़रूरी होती है. शर्तों के साथ डिलीवरी की सुविधाएं, PackageManager के हिसाब से FEATURE_* कॉन्स्टेंट के तौर पर दी गई सुविधाओं जैसी ही होती हैं. यह विकल्प चुनने पर, ड्रॉपडाउन के बगल में मौजूद फ़ील्ड में, सुविधा की कॉन्स्टेंट वैल्यू का कोई हिस्सा टाइप करें. जैसे, "ब्लूटूथ". इसके बाद, दिखने वाले सुझावों में से कोई एक चुनें.
      • OpenGL ES वर्शन: इसकी मदद से, OpenGL ES का वह वर्शन तय किया जा सकता है जो डिवाइस पर मॉड्यूल इंस्टॉल करते समय डाउनलोड करना ज़रूरी है. अगर आपने यह विकल्प चुना है, तो ड्रॉपडाउन के बगल में मौजूद फ़ील्ड में वर्शन टाइप करना शुरू करें. जैसे, "0x00030001". इसके बाद, दिखने वाले सुझावों में से कोई एक चुनें.
    5. अगर आपको डिवाइस की उपलब्ध सुविधाओं के आधार पर कई शर्तें जोड़नी हैं, तो डिवाइस की हर उस सुविधा के लिए + डिवाइस की सुविधा पर क्लिक करें जिसकी शर्त आपको बतानी है.

    6. अगर आपको यह मॉड्यूल, Android 4.4 (एपीआई लेवल 20) और उससे पहले के वर्शन पर चलने वाले डिवाइसों के लिए उपलब्ध कराना है और मल्टी-APK में शामिल करना है, तो फ़्यूज़ करना के बगल में मौजूद बॉक्स को चुनें. इसका मतलब है कि इस मॉड्यूल के लिए, मांग पर काम करने की सुविधा चालू की जा सकती है. साथ ही, फ़्यूज़ करने की सुविधा बंद करके, इसे उन डिवाइसों से हटाया जा सकता है जिन पर स्प्लिट APK डाउनलोड और इंस्टॉल करने की सुविधा काम नहीं करती. आपकी पसंद को दिखाने के लिए, Android Studio मॉड्यूल के मेनिफ़ेस्ट में ये चीज़ें इंजेक्ट करता है:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. मॉड्यूल डाउनलोड करने के विकल्पों को कॉन्फ़िगर करने के बाद, पूरा करें पर क्लिक करें.

ध्यान दें कि Android Gradle प्लग इन, डाइनैमिक-फ़ीचर मॉड्यूल से lint चलाने की सुविधा नहीं देता. संबंधित ऐप्लिकेशन मॉड्यूल से लिंट करने पर, ऐप्लिकेशन के डाइनैमिक-फ़ीचर मॉड्यूल पर लिंट की प्रोसेस शुरू हो जाएगी. साथ ही, ऐप्लिकेशन की लिंट रिपोर्ट में सभी समस्याएं शामिल हो जाएंगी.

किसी मौजूदा फ़ीचर मॉड्यूल में, डिलीवरी के लिए शर्तों के विकल्प जोड़ना

मॉड्यूल के मेनिफ़ेस्ट की मदद से, किसी मौजूदा सुविधा वाले मॉड्यूल में, शर्तों के हिसाब से डिलीवरी के विकल्प आसानी से जोड़े जा सकते हैं. हालांकि, आपको पहले शर्तों के साथ डिलीवरी के विकल्पों के काम करने के बारे में जानना चाहिए. यह जानकारी, डिलीवरी के उन अन्य विकल्पों के साथ काम करती है जिन्हें आपने पहले से चालू किया हो.

शुरू करने के लिए, आपको पहले अपने मेनिफ़ेस्ट को नए <dist:delivery> एलिमेंट पर माइग्रेट करना होगा. नीचे दिए गए कोड स्निपेट में, पुराने सिंटैक्स का उदाहरण दिया गया है:

<!-- This is the old syntax. -->
<dist:module
  dist:title="@string/feature_title" dist:onDemand="true">
  <dist:fusing dist:include="true"/>
</dist:module>

ऊपर दिए गए डिलीवरी के विकल्पों को अब इस तरह से बताया गया है.

<dist:module
  dist:title="@string/feature_title">
  <dist:delivery>
      <dist:on-demand/>
  </dist:delivery>
  <dist:fusing dist:include="true"/>
</dist:module>

इसके बाद, डिवाइस की सुविधाओं के आधार पर, डिलीवरी के शर्तों के साथ विकल्प शामिल किए जा सकते हैं.

<dist:module
    dist:title="@string/feature_title">
    <dist:delivery>
      <dist:on-demand/>
      <dist:install-time>
        <dist:conditions>
          <!-- Requires that the device support AR to download the module at
          app install-time.  -->
          <dist:device-feature dist:name="android.hardware.camera.ar"/>
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true"/>
</dist:module>

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

मॉड्यूल डाउनलोड करने के अन्य विकल्पों के साथ काम करना

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

मॉड्यूल डाउनलोड करने का विकल्प शर्तों के हिसाब से डिलीवरी की सुविधा के साथ काम करना
फ़्यूज़ करना (<dist:fusing dist:include="true"/>) अगर कोई मॉड्यूल इस विकल्प को 'सही' पर सेट करता है, तो Google Play, एपीआई लेवल 19 या उससे पहले के वर्शन पर चलने वाले डिवाइसों पर आपके ऐप्लिकेशन को डिप्लॉय करते समय, शर्तों के हिसाब से डिलीवरी के उन विकल्पों का पालन नहीं करता जिन्हें आपने तय किया है. इसका मतलब है कि फ़्यूज़ करने की सुविधा देने वाले सुविधा मॉड्यूल, एपीआई लेवल 19 या उससे पहले के वर्शन पर काम करने वाले डिवाइसों के लिए, इंस्टॉल के समय हमेशा शामिल होते हैं.
इंस्टैंट मोड चालू है (<dist:module dist:instant="true"/>) इंस्टैंट मोड में काम करने वाले फ़ीचर मॉड्यूल के लिए, डिलीवरी के शर्तों के हिसाब से विकल्प उपलब्ध नहीं हैं.
मांग पर (<dist:on-demand/>) डिफ़ॉल्ट रूप से, अगर आपने डिलीवरी के लिए शर्तों के साथ विकल्प तय किए हैं, तो मॉड्यूल मांग पर भी उपलब्ध होता है.

देश के हिसाब से शर्तें तय करना

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

इस संदर्भ में, डिवाइस के देश की जानकारी आम तौर पर, उपयोगकर्ता के Google Play खाते में रजिस्टर किए गए बिलिंग पते से तय होती है.

अपने मॉड्यूल के लिए देशों की जानकारी देने के लिए, सुविधा वाले मॉड्यूल के मेनिफ़ेस्ट में ये शामिल करें.

<dist:conditions>
   <!-- Set to "true" to specify countries to exclude from downloading
   this module at app install-time. By default, modules are available
   for download to all user countries. -->
  <dist:user-countries dist:exclude="true">
    <!-- Specifies the two-letter  CLDR country code for regions that should
    not download the module at app install-time. -->
    <dist:country dist:code="CN"/>
    <dist:country dist:code="HK"/>
  </dist:user-countries>
</dist:conditions>

एपीआई लेवल के लिए शर्तें तय करना

डिवाइस के एपीआई लेवल के आधार पर शर्त तय करना तब फ़ायदेमंद हो सकता है, जब कोई सुविधा वाला मॉड्यूल उन एपीआई पर निर्भर हो जो Android प्लैटफ़ॉर्म के सिर्फ़ कुछ वर्शन में उपलब्ध हैं.

डिवाइस के कम से कम या ज़्यादा से ज़्यादा एपीआई लेवल के आधार पर शर्त सेट करने के लिए, अपने सुविधा मॉड्यूल के मेनिफ़ेस्ट में ये शामिल करें.

<dist:conditions>
    <!-- Specifies the minimum API level that the device must satisfy
         in order to download your module at app install-time. The API level you
         specify must be greater or equal to the module's own minSdkVersion. -->
   <dist:min-sdk dist:value="21"/>
    <!-- Specifies the maximum API level that the device cannot exceed
         in order to download your module at app install-time. The API level you
         specify must be less than or equal to the module's own maxSdkVersion. -->
   <dist:max-sdk dist:value="24"/>
</dist:conditions>

अन्य डिवाइस प्रॉपर्टी के लिए शर्तें तय करना (बीटा वर्शन)

डिवाइस की अन्य प्रॉपर्टी, जैसे कि मॉडल का नाम, रैम, सिस्टम की सुविधाएं, और सिस्टम ऑन चिप के लिए शर्तें तय करने के लिए, डिवाइस टारगेटिंग कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल किया जा सकता है.

डिवाइस टारगेटिंग कॉन्फ़िगरेशन फ़ाइल बनाने के लिए, डिवाइस टारगेटिंग के लिए दस्तावेज़ देखें.

कॉन्फ़िगरेशन फ़ाइल बनाने के बाद, अपने मॉड्यूल के लिए डिवाइस ग्रुप तय किए जा सकते हैं. इसके लिए, फ़ीचर मॉड्यूल के मेनिफ़ेस्ट में ये चीज़ें शामिल करें.

<dist:conditions>
   <dist:device-groups>
      <dist:device-group dist:name="myCustomGroup1"/>
      <dist:device-group dist:name="myCustomGroup2"/>
   </dist:device-groups>
</dist:conditions>