इंस्टॉल के समय डिलीवरी कॉन्फ़िगर करना

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

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

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

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

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

इंस्टॉल के समय डिलीवरी के लिए नया मॉड्यूल कॉन्फ़िगर करना

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

Android Studio का इस्तेमाल करके, अपने ऐप्लिकेशन प्रोजेक्ट में फ़ीचर मॉड्यूल जोड़ने के लिए, यह तरीका अपनाएं:

  1. अगर आपने अब तक ऐसा नहीं किया है, तो IDE में अपना ऐप्लिकेशन प्रोजेक्ट खोलें.
  2. मेन्यू बार में जाकर, File > New > New Module को चुनें.
  3. नया मॉड्यूल बनाएं डायलॉग में, डाइनैमिक फ़ीचर मॉड्यूल चुनें और आगे बढ़ें पर क्लिक करें.
  4. अपना नया मॉड्यूल कॉन्फ़िगर करें सेक्शन में जाकर, यह तरीका अपनाएं:
    1. ड्रॉप-डाउन मेन्यू से, अपने ऐप्लिकेशन प्रोजेक्ट के लिए बेस ऐप्लिकेशन मॉड्यूल चुनें.
    2. मॉड्यूल का नाम डालें. IDE इस नाम का इस्तेमाल, आपकी Gradle सेटिंग फ़ाइल में मॉड्यूल को Gradle सबप्रोजेक्ट के तौर पर पहचानने के लिए करता है. ऐप्लिकेशन बंडल बनाते समय, Gradle सबप्रोजेक्ट के नाम के आखिरी एलिमेंट का इस्तेमाल करके, फ़ीचर मॉड्यूल के मेनिफ़ेस्ट में <manifest split> एट्रिब्यूट को इंजेक्ट करता है.
    3. मॉड्यूल के पैकेज का नाम डालें. डिफ़ॉल्ट रूप से, Android Studio एक पैकेज नाम का सुझाव देता है. यह नाम, बेस मॉड्यूल के रूट पैकेज नाम और पिछले चरण में बताए गए मॉड्यूल के नाम को मिलाकर बनता है.
    4. वह कम से कम एपीआई लेवल चुनें जिस पर मॉड्यूल काम करेगा. यह वैल्यू, बेस मॉड्यूल की वैल्यू से मैच होनी चाहिए.
  5. आगे बढ़ें पर क्लिक करें.
  6. Module Download Options सेक्शन में, यह तरीका अपनाएं:

    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:delivery>
      </dist:module>
      

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

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

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  7. पूरा करें पर क्लिक करें.

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

इंस्टॉल-टाइम मॉड्यूल को हटाने लायक बनाना

इंस्टॉल के समय डिलीवरी के लिए, ऐसे फ़ीचर मॉड्यूल बनाना फ़ायदेमंद हो सकता है जिन्हें ज़रूरत न होने पर बाद में अनइंस्टॉल किया जा सके. उदाहरण के लिए, इंस्टॉल किए गए ऐप्लिकेशन का साइज़ कम करने के लिए, ट्रेनिंग या ऑनबोर्डिंग के लिए ज़रूरी कॉन्टेंट को मॉड्यूल में बांटा जा सकता है. इसके बाद, जब उपयोगकर्ता आपके ऐप्लिकेशन का इस्तेमाल करने के लिए सेट अप कर ले, तब Play Core API का इस्तेमाल करके फ़ीचर मॉड्यूल को अनइंस्टॉल किया जा सकता है.

डिफ़ॉल्ट रूप से, इंस्टॉल-टाइम मॉड्यूल नहीं हटाए जा सकते. किसी मॉड्यूल को हटाने लायक के तौर पर मार्क करने और उसे अनइंस्टॉल करने की अनुमति देने के लिए, removable टैग जोड़ें और इसकी वैल्यू को true पर सेट करें:

<dist:module ... >
  <dist:delivery>
      <dist:install-time>
          <dist:removable dist:value="true"/>
      </dist:install-time>
  </dist:delivery>
</dist:module>