Play Feature Delivery के बारे में खास जानकारी

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

Play Feature Delivery में से, ऐप्लिकेशन बंडल की बेहतर सुविधाओं का इस्तेमाल किया जाता है. आपके ऐप्लिकेशन की कुछ सुविधाएं, कुछ शर्तों के साथ डिलीवर करनी होंगी या ज़रूरत पड़ने पर डाउनलोड करनी होंगी. ऐसा करने के लिए, सबसे पहले आपको इन सुविधाओं को अपने बेस ऐप्लिकेशन से अलग करना होगा सुविधा वाले मॉड्यूल.

फ़ीचर मॉड्यूल बिल्ड कॉन्फ़िगरेशन

Android Studio का इस्तेमाल करके कोई नया फ़ीचर मॉड्यूल बनाने पर, IDE मॉड्यूल की build.gradle फ़ाइल पर, नीचे दिया गया Gradle प्लग इन लागू करता है.

// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.

plugins {
  id 'com.android.dynamic-feature'
}

इनके लिए उपलब्ध कई प्रॉपर्टी स्टैंडर्ड ऐप्लिकेशन प्लगिन आपके फ़ीचर मॉड्यूल में भी उपलब्ध हैं. ये सेक्शन उन प्रॉपर्टी के बारे में बताएं जिन्हें आपको अपनी रिपोर्ट में शामिल करना चाहिए और नहीं बिल्ड कॉन्फ़िगरेशन के बारे में बताया गया है.

फ़ीचर मॉड्यूल बिल्ड कॉन्फ़िगरेशन में क्या शामिल नहीं करना चाहिए

हर फ़ीचर मॉड्यूल, बेस मॉड्यूल पर निर्भर करता है. इसलिए, यह भी कुछ कॉन्फ़िगरेशन इनहेरिट करता है. इसलिए, आपको फ़ीचर मॉड्यूल की build.gradle फ़ाइल में:

  • साइनिंग कॉन्फ़िगरेशन: ऐप्लिकेशन बंडल, साइनिंग का इस्तेमाल करके साइन किए जाते हैं कॉन्फ़िगरेशन के बारे में जानकारी शामिल होती है, जिसे बेस मॉड्यूल में तय किया जाता है.
  • minifyEnabled प्रॉपर्टी: आपके पास ये काम करने की सुविधा होती है कोड छोटा करने की सुविधा चालू करें अपने पूरे ऐप्लिकेशन प्रोजेक्ट के लिए, सिर्फ़ बेस मॉड्यूल के बिल्ड से कॉन्फ़िगरेशन. इसलिए, आपको इस प्रॉपर्टी को सुविधा वाले मॉड्यूल. हालांकि, आपके पास ये काम करने का विकल्प भी है ProGuard के अतिरिक्त नियमों के बारे में बताना हर सुविधा मॉड्यूल के लिए.
  • versionCode और versionName: ऐप्लिकेशन बंडल बनाते समय, Gradle, ऐप्लिकेशन के वर्शन की उस जानकारी का इस्तेमाल करता है जो बेस मॉड्यूल से मिलती है. आपको इन प्रॉपर्टी को अपने फ़ीचर मॉड्यूल के build.gradle फ़ाइल.

बेस मॉड्यूल के साथ संबंध बनाना

जब Android Studio आपका फ़ीचर मॉड्यूल बनाता है, तो वह दिखता है बेस मॉड्यूल में android.dynamicFeatures प्रॉपर्टी जोड़कर बेस मॉड्यूल की build.gradle फ़ाइल, जैसा कि नीचे दिखाया गया है:

// In the base module’s build.gradle file.
android {
    ...
    // Specifies feature modules that have a dependency on
    // this base module.
    dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}

इसके अलावा, Android Studio में फ़ीचर मॉड्यूल की डिपेंडेंसी के तौर पर बेस मॉड्यूल शामिल है, जैसा कि यहां दिखाया गया है:

// In the feature module’s build.gradle file:
...
dependencies {
    ...
    // Declares a dependency on the base module, ':app'.
    implementation project(':app')
}

ProGuard के अतिरिक्त नियम तय करना

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

android.buildTypes {
     release {
         // You must use the following property to specify additional ProGuard
         // rules for feature modules.
         proguardFiles 'proguard-rules-dynamic-features.pro'
     }
}

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

अपना ऐप्लिकेशन डिप्लॉय करना

सुविधा वाले मॉड्यूल के साथ काम करने के लिए, अपने ऐप्लिकेशन को डेवलप करते समय, ये काम किए जा सकते हैं अपने ऐप्लिकेशन को कनेक्ट किए गए डिवाइस पर डिप्लॉय करें, जैसा कि आम तौर पर किया जाता है. इसके लिए, चलाएं > मेनू बार से चलाएं (या Run पर क्लिक करके इसमें टूलबार).

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

  1. Run > मेन्यू बार से कॉन्फ़िगरेशन में बदलाव करें.
  2. रन/डीबग कॉन्फ़िगरेशन डायलॉग के बाएं पैनल से, अपने मुताबिक Android ऐप्लिकेशन का कॉन्फ़िगरेशन सेट करें.
  3. सामान्य टैब में डिप्लॉय करने के लिए डाइनैमिक सुविधाएं में जाकर, हर सुविधा मॉड्यूल के बगल में मौजूद बॉक्स जिसे आपको शामिल करना है आपके ऐप्लिकेशन को डिप्लॉय करने पर.
  4. ठीक है पर क्लिक करें.

डिफ़ॉल्ट रूप से, Android Studio डिप्लॉय करने के लिए ऐप्लिकेशन बंडल का इस्तेमाल करके, आपके ऐप्लिकेशन को डिप्लॉय नहीं करता आपका ऐप्लिकेशन. इसके बजाय, IDE आपके डिवाइस पर ऐसे APKs बनाता और इंस्टॉल करता है जिन्हें डिप्लॉयमेंट की स्पीड के हिसाब से ऑप्टिमाइज़ किया गया है, की तुलना करने वाला है. बनाने और डिप्लॉय करने के बजाय, Android Studio को कॉन्फ़िगर करने के लिए किसी ऐप्लिकेशन बंडल से APK और इंस्टैंट इस्तेमाल की सुविधा देने वाले ऐप्लिकेशन, अपने रन/डीबग में बदलाव करें कॉन्फ़िगरेशन.

पसंद के मुताबिक डिलीवरी के लिए, सुविधा वाले मॉड्यूल इस्तेमाल करना

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

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

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

  • खाता लॉगिन और बनाना
  • मार्केटप्लेस ब्राउज़ करना
  • किसी आइटम को बिक्री के लिए रखना
  • पेमेंट प्रोसेस किए जा रहे हैं

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

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

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

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

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

सुविधा का इस्तेमाल करके अपने ऐप्लिकेशन का मॉड्यूल बनाना ऐसे मॉड्यूल जो डिलीवरी के बेहतर विकल्प कॉन्फ़िगर नहीं करते.

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

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

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

कोई फ़ीचर मॉड्यूल बनाएं और कॉन्फ़िगर करने की सुविधा, मांग पर उपलब्ध है डिलीवरी. इसके बाद, आपका ऐप्लिकेशन Play Feature Delivery Library में ज़रूरत पड़ने पर मॉड्यूल डाउनलोड करें.
शर्तों के साथ डिलीवरी आपको उपयोगकर्ता के डिवाइस की कुछ ज़रूरी शर्तें तय करने की अनुमति देता है, जैसे कि हार्डवेयर सुविधाएं, स्थान-भाषा, और कम से कम एपीआई लेवल तय करें, ताकि यह तय किया जा सके कि सुविधा को ऐप्लिकेशन इंस्टॉल करते समय डाउनलोड किया जाता है. अगर Marketplace ऐप्लिकेशन की पहुंच दुनिया भर में है, तो आपको पेमेंट के ऐसे तरीके जो सिर्फ़ कुछ इलाकों या स्थानीय लोगों में लोकप्रिय हैं. तय सीमा में डाउनलोड किए जाने वाले शुरुआती साइज़ को कम करने के लिए, कुछ खास तरह के पेमेंट के तरीकों को प्रोसेस करने के लिए उपलब्ध मॉड्यूल और उन्हें उपयोगकर्ता के डिवाइस पर शर्तों के हिसाब से इंस्टॉल करना होगा. ऐसा उपयोगकर्ता की निजता और सुरक्षा रजिस्टर की गई स्थान-भाषा. कोई फ़ीचर मॉड्यूल बनाएं और कंडिशनल डिलीवरी को कॉन्फ़िगर करना.
तुरंत डिलीवरी Google Play इंस्टैंट उपयोगकर्ताओं को ऐप्लिकेशन इंस्टॉल किए बिना, आपके ऐप्लिकेशन का इस्तेमाल करने की अनुमति देता है Google Chrome का इस्तेमाल करके साइन इन किया जा सकता है. इसके बजाय, वे "इसे आज़माएं" अभी" बटन या आपके बनाए गए यूआरएल पर क्लिक करें. इस तरह का कॉन्टेंट डिलीवर करने से, आपको अपनी ऑडियंस की दिलचस्पी बढ़ाने में है.

झटपट डिलीवरी की सुविधा के साथ, Google Play इंस्टैंट का इस्तेमाल करके उपयोगकर्ता आपके ऐप्लिकेशन की कुछ सुविधाओं का तुरंत अनुभव ले सकें, इसके लिए इंस्टॉल करना.

किसी ऐसे गेम के बारे में सोचें जिसमें गेम के पहले कुछ लेवल शामिल हों लाइटवेट फ़ीचर मॉड्यूल है. आप उस मॉड्यूल को तुरंत सक्षम कर सकते है यूआरएल लिंक पर क्लिक करके, उपयोगकर्ता गेम का तुरंत अनुभव ले सकें या अभी" बटन पर क्लिक कर सकते हैं. कोई फ़ीचर मॉड्यूल बनाएं और कॉन्फ़िगर करें तुरंत डिलीवरी. इसके बाद, आपका ऐप्लिकेशन Play Feature Delivery Library में ज़रूरत पड़ने पर मॉड्यूल डाउनलोड करें.

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

किसी संसाधन के लिए यूआरआई बनाना

अगर आपको किसी सुविधा मॉड्यूल में स्टोर किए गए संसाधन को ऐक्सेस करने के लिए, यूआरआई, फ़ीचर मॉड्यूल संसाधन यूआरआई को जनरेट करने का तरीका यहां बताया गया है Uri.Builder():

Kotlin

val uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build()

Java

String uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build().toString();

संसाधन तक पहुंचने के पाथ के हर हिस्से का निर्माण, रन टाइम पर होता है. इससे यह पक्का किया जाता है कि कि स्प्लिट APK के लोड होने के बाद, सही नेमस्पेस जनरेट किया जाए.

यूआरआई कैसे जनरेट किया जाता है, इसके उदाहरण के तौर पर, मान लें कि आपके पास एक ऐप्लिकेशन है और इन नामों वाले फ़ीचर मॉड्यूल:

  • ऐप्लिकेशन के पैकेज का नाम: com.example.my_app_package
  • सुविधा के संसाधन पैकेज का नाम: com.example.my_app_package.my_dynamic_feature

अगर ऊपर दिए गए कोड स्निपेट में resId, रॉ फ़ाइल रिसॉर्स के बारे में बताता है, तो “my_video” जोड़ा है, तो ऊपर दिया गया Uri.Builder() कोड नीचे दिए गए नतीजे दिखाता है:

android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video

इसके बाद, आपका ऐप्लिकेशन, फ़ीचर मॉड्यूल के संसाधन को ऐक्सेस करने के लिए इस यूआरआई का इस्तेमाल कर सकता है.

अपने यूआरआई में पाथ की पुष्टि करने के लिए, APK ऐनालाइज़र का इस्तेमाल करें अपने फ़ीचर मॉड्यूल APK की जांच करने और पैकेज का नाम तय करने के लिए:

कंपाइल की गई रिसॉर्स फ़ाइल के कॉन्टेंट की जांच करने वाले APK ऐनालाइज़र का स्क्रीनशॉट.

दूसरा डायग्राम. कंपाइल की गई रिसॉर्स फ़ाइल में पैकेज के नाम की जांच करने के लिए, APK ऐनालाइज़र का इस्तेमाल करें.

सुविधा वाले मॉड्यूल इस्तेमाल करते समय इन बातों का ध्यान रखें

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

  • एक डिवाइस पर 50 या उससे ज़्यादा सुविधाओं वाले मॉड्यूल, शर्तों के साथ या मांग पर डिलीवरी की सुविधा से परफ़ॉर्मेंस पर असर पड़ सकता है. इंस्टॉल के समय वाले मॉड्यूल, जो हटाए जाने लायक के तौर पर कॉन्फ़िगर नहीं किए गए हैं, तो वे अपने-आप बेस में शामिल हो जाते हैं और हर डिवाइस पर सिर्फ़ एक फ़ीचर मॉड्यूल के तौर पर गिना जाता है.
  • इंस्टॉल के समय के लिए हटाए जा सकने वाले मॉड्यूल के तौर पर कॉन्फ़िगर किए जाने वाले मॉड्यूल की संख्या सीमित करें डिलीवरी में से 10 या उससे कम होगी. या फिर, आपके ऐप्लिकेशन को डाउनलोड और इंस्टॉल करने में ज़्यादा समय लग सकता है.
  • सिर्फ़ Android 5.0 (एपीआई लेवल 21) और इसके बाद के वर्शन पर काम करने वाले डिवाइस मांग पर सुविधाओं को डाउनलोड और इंस्टॉल करना. सुविधा उपलब्ध कराने के लिए Android के पुराने वर्शन पर डाउनलोड करें, तो सुविधा मॉड्यूल बनाते समय फ़्यूज़िंग करना.
  • SplitCompat पर चालू करें, इससे आपके ऐप्लिकेशन के पास, सुविधा वाले डाउनलोड किए गए मॉड्यूल का ऐक्सेस होता है. ये मॉड्यूल मांग.
  • सुविधा वाले मॉड्यूल को, मेनिफ़ेस्ट में गतिविधियों के बारे में, android:exported को इस पर सेट किया गया true. ऐसा इसलिए, क्योंकि इस बात की कोई गारंटी नहीं है कि डिवाइस किसी अन्य ऐप्लिकेशन द्वारा सुविधा को लॉन्च करने का प्रयास करने पर गतिविधि. इसके अलावा, आपके ऐप्लिकेशन को यह पुष्टि करनी चाहिए कि सुविधा इसके कोड और संसाधनों तक पहुंचने से पहले डाउनलोड किया जाएगा. इस बारे में ज़्यादा जानने के लिए, पढ़ें इंस्टॉल किए गए मॉड्यूल मैनेज करें.
  • Play Feature Delivery की सुविधा के लिए, आपको ऐप्लिकेशन बंडल का इस्तेमाल करके अपना ऐप्लिकेशन पब्लिश करना होगा. पक्का करें कि आपको ऐप्लिकेशन बंडल के बारे में पता हो ऐसी समस्याएं जिनके बारे में पहले से जानकारी है.

फ़ीचर मॉड्यूल मेनिफ़ेस्ट का रेफ़रंस

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

एट्रिब्यूट ब्यौरा
<manifest
...
यह आपका औसत समय है <manifest> ब्लॉक.
xmlns:dist="http://schemas.android.com/apk/distribution" एक नया dist: एक्सएमएल नेमस्पेस तय करता है, जो जिनकी जानकारी नीचे दी गई है.
split="split_name" जब Android Studio आपका ऐप्लिकेशन बंडल बनाता है, तो उसमें ये चीज़ें शामिल होती हैं एट्रिब्यूट का इस्तेमाल करें. इसलिए, आपको विज्ञापनों को खुद ही इस एट्रिब्यूट का इस्तेमाल करें.

उस मॉड्यूल का नाम तय करता है जिसे आपका ऐप्लिकेशन तय करता है Play Feature Delivery लाइब्रेरी का इस्तेमाल करके, मांग पर उपलब्ध मॉड्यूल का अनुरोध करते समय.

Gradle, इस एट्रिब्यूट की वैल्यू कैसे तय करता है:

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

ऐप्लिकेशन बंडल बनाने के बाद, Gradle, इस मेनिफ़ेस्ट एट्रिब्यूट को मॉड्यूल के मेनिफ़ेस्ट. उदाहरण के लिए, अगर GA4 में कोई नया फ़ीचर मॉड्यूल बनाया जाता है, MyAppProject/features/ डायरेक्ट्री और पहले से मौजूद "डाइनैमिक_सुविधा1" का इस्तेमाल अपने मॉड्यूल नाम के रूप में करता है, इसलिए IDE ':features:dynamic_feature1' settings.gradle फ़ाइल. अपना ऐप्लिकेशन बंडल बनाते समय, Gradle फिर इंजेक्ट करता है <manifest split="dynamic_feature1"> अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है के मेनिफ़ेस्ट का ही इस्तेमाल करें.

android:isFeatureSplit="true | false"> जब Android Studio आपका ऐप्लिकेशन बंडल बनाता है, तो उसमें ये चीज़ें शामिल होती हैं इस एट्रिब्यूट की वैल्यू शामिल करें. इसलिए, आपको विज्ञापनों को आप चाहें, तो इस एट्रिब्यूट में मैन्युअल तरीके से बदलाव करें.

इससे पता चलता है कि यह मॉड्यूल एक सुविधा मॉड्यूल है. बेस मॉड्यूल और कॉन्फ़िगरेशन APKs में मेनिफ़ेस्ट करती है इस एट्रिब्यूट को छोड़ें या इसे false पर सेट करें.

<dist:module यह नया एक्सएमएल एलिमेंट, ऐसे एट्रिब्यूट के बारे में बताता है जो तय करते हैं कि मॉड्यूल को APK के रूप में पैकेज करके डिस्ट्रिब्यूट किया जाता है.
dist:instant="true | false" तय करता है कि मॉड्यूल इसके ज़रिए उपलब्ध होना चाहिए या नहीं Google Play इंस्टैंट एक झटपट अनुभव देता है.

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

सेट करते समय, इस एक्सएमएल एलिमेंट को true पर सेट नहीं किया जा सकता <dist:on-demand/>. हालांकि, आपके पास अब भी अनुरोध करने का विकल्प है झटपट-खुलने वाले फ़ीचर मॉड्यूल को मांग पर डाउनलोड करने के लिए करें तुरंत इस्तेमाल किए जाने वाले ऐप्लिकेशन Play Feature Delivery लाइब्रेरी का इस्तेमाल करके. जब कोई उपयोगकर्ता आपका ऐप्लिकेशन डाउनलोड और इंस्टॉल करता है, तो डिवाइस आपके ऐप्लिकेशन के झटपट-खुलने वाले सुविधा मॉड्यूल को डाउनलोड और इंस्टॉल करता है, डिफ़ॉल्ट रूप से बेस APK के साथ-साथ.

dist:title="@string/feature_name" मॉड्यूल के लिए उपयोगकर्ता को दिखने वाला शीर्षक बताता है. उदाहरण के लिए, डाउनलोड का अनुरोध करने पर, डिवाइस यह टाइटल दिखा सकता है पुष्टि करने के लिए.

आपको इस शीर्षक के लिए स्ट्रिंग संसाधन शामिल करना होगा बेस मॉड्यूल के module_root/src/source_set/res/values/strings.xml में फ़ाइल से लिए जाते हैं.

<dist:fusing dist:include="true | false" />
</dist:module>
इस नीति से तय होता है कि उस मल्टी-APKs में मॉड्यूल को शामिल किया जाए या नहीं जिसमें Android 4.4 (एपीआई लेवल 20) और उससे पहले के वर्शन वाले डिवाइसों को टारगेट करना.

साथ ही, जब आप किसी ऐप्लिकेशन बंडल से APK जनरेट करने के लिए, bundletool का इस्तेमाल करें, सिर्फ़ ऐसे मॉड्यूल उपलब्ध हैं जो इस प्रॉपर्टी को true पर सेट करते हैं यूनिवर्सल APK में शामिल होते हैं—जो एक मोनोलिथिक APK है जिसमें ऐसे सभी डिवाइस कॉन्फ़िगरेशन के लिए कोड और संसाधन शामिल करें जो आपके ऐप्लिकेशन पर काम करते हैं.

<dist:delivery> मॉड्यूल डिलीवरी को पसंद के मुताबिक बनाने वाले विकल्पों को इनकैप्सुलेट करता है, जैसा कि नीचे दिखाया गया है. ध्यान रखें कि हर सुविधा मॉड्यूल को ये कस्टम डिलीवरी विकल्प भी चुन सकते हैं.
<dist:install-time> इससे पता चलता है कि इंस्टॉल के समय मॉड्यूल उपलब्ध होना चाहिए. यह है ऐसे सुविधा वाले मॉड्यूल के लिए डिफ़ॉल्ट व्यवहार जो किसी अन्य मॉड्यूल के बारे में नहीं बताते कस्टम डिलीवरी का विकल्प किस तरह का है.

इंस्टॉल के समय डाउनलोड करने के बारे में ज़्यादा जानने के लिए, पढ़ें इंस्टॉल के समय डिलीवरी कॉन्फ़िगर करना.

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

<dist:removable dist:value="true | false" />

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

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

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

ध्यान दें: यह सुविधा सिर्फ़ Android Gradle का इस्तेमाल करते समय उपलब्ध होती है प्लगिन 4.2 या कमांड लाइन से bundletool v1.0 का इस्तेमाल करते समय.

</dist:install-time>  
<dist:on-demand/> इससे पता चलता है कि यह मॉड्यूल, मांग पर उपलब्ध होने चाहिए डाउनलोड करें. इसका मतलब है कि इंस्टॉल के समय मॉड्यूल उपलब्ध नहीं होगा, लेकिन आपका ऐप्लिकेशन, बाद में इसे डाउनलोड करने का अनुरोध कर सकता है.

मांग पर डाउनलोड करने के बारे में ज़्यादा जानने के लिए, पढ़ें मांग पर डिलीवरी की सुविधा को कॉन्फ़िगर करें.

</dist:delivery>
<application
android:hasCode="true | false">
...
</application>
अगर फ़ीचर मॉड्यूल कोई DEX फ़ाइल जनरेट नहीं करता है, तो उसका मतलब है कि उसमें कोई कोड नहीं होता जिसे बाद में DEX फ़ाइल फ़ॉर्मैट में कंपाइल किया जाता है—आपको यह काम करना होगा (नहीं तो, आपको रनटाइम से जुड़ी गड़बड़ियां मिल सकती हैं):
  1. android:hasCode को "false" पर सेट करें. फ़ीचर मॉड्यूल के मेनिफ़ेस्ट का इस्तेमाल करें.
  2. अपने बेस मॉड्यूल के मेनिफ़ेस्ट में यह जानकारी जोड़ें:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>
    

अन्य संसाधन

सुविधा वाले मॉड्यूल का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, नीचे दिए गए संसाधनों को आज़माएं.

ब्लॉग पोस्ट

वीडियो

सेवा की शर्तें और डेटा की सुरक्षा

Play Feature Delivery लाइब्रेरी को ऐक्सेस या इस्तेमाल करने का मतलब है कि आप इन बातों से सहमत हैं Play की मुख्य सॉफ़्टवेयर डेवलपमेंट किट की सेवा की शर्तें. कृपया पढ़ें और इसे ऐक्सेस करने से पहले, लागू होने वाली सभी शर्तों और नीतियों को समझ लें.

डेटा की सुरक्षा

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

अन्य भाषाओं का एपीआई

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

Play Feature Delivery

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

हालांकि, हमारा लक्ष्य आपको ज़्यादा से ज़्यादा पारदर्शी रखना है, लेकिन आपकी ज़िम्मेदारी पूरी तरह से यह तय करने के लिए कि Google Play के डेटा की सुरक्षा वाले सेक्शन से जुड़े फ़ॉर्म का जवाब कैसे देना है आपके ऐप्लिकेशन में उपयोगकर्ता का डेटा इकट्ठा, शेयर, और सुरक्षा के तरीकों के बारे में जानकारी.