'Android Gradle प्लग इन' एपीआई के अपडेट

इस पेज पर, Android Gradle प्लग इन (AGP) के एपीआई के बंद होने और हटाए जाने की जानकारी ट्रैक की जाती है. साथ ही, इस पेज पर अपने कोड को अपडेट करने का तरीका भी बताया जाता है.

एपीआई के बंद होने और हटाए जाने का ट्रैकर

यहां दी गई टेबल में, AGP वर्शन के हिसाब से यह जानकारी दी गई है कि AGP एपीआई कब बंद किए गए और कब हटाए गए.

एपीआई AGP वर्शन में अब काम नहीं करता AGP वर्शन से हटाया गया
Component.setAsmFramesComputationMode 7.2
Component.transformClassesWith 7.2
RenderScript 7.2
ट्रांसफ़ॉर्म करें 7.2 8.0

एजीपी 8.8

यहां AGP 8.8 के लिए एपीआई से जुड़े अहम अपडेट दिए गए हैं.

रिसॉर्स कॉन्फ़िगरेशन का इस्तेमाल बंद कर दिया गया है

संसाधन कॉन्फ़िगरेशन का इस्तेमाल, AGP 8.8 के बाद से नहीं किया जा सकता. ऐसा इसलिए किया गया, क्योंकि एजीपी अब अलग-अलग रिसॉर्स डेंसिटी के साथ काम नहीं करता. साथ ही, Google Play Console में अब यह ज़रूरी है कि ऐप्लिकेशन, ऐप्लिकेशन बंडल के तौर पर पब्लिश किए जाएं. भाषा के कॉन्फ़िगरेशन के लिए, localeFilters DSL का इस्तेमाल करके, ऐसी भाषाओं की जानकारी दी जा सकती है जिनमें आपका ऐप्लिकेशन काम करता है. इससे, भाषा के कॉन्फ़िगरेशन को उनसे जुड़े संसाधनों पर मैप किया जा सकता है.

AGP 8.0

यहां AGP 8.0 के लिए एपीआई से जुड़े अहम अपडेट दिए गए हैं.

Transform API को हटा दिया गया है

AGP 8.0 से, Transform एपीआई को हटा दिया गया है. इसका मतलब है कि पैकेज com.android.build.api.transform में मौजूद सभी क्लास हटा दी गई हैं.

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

रीप्लेसमेंट एपीआई

Transform API की जगह कोई एक एपीआई नहीं लेगा. हर इस्तेमाल के उदाहरण के लिए, नए और टारगेट किए गए एपीआई उपलब्ध हैं. बदले गए सभी एपीआई, androidComponents {} ब्लॉक में हैं. ये सभी एपीआई, AGP 7.2 के साथ उपलब्ध हैं.

बाइटकोड को बदलने की सुविधा

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

अपने ऐप्लिकेशन में जनरेट की गई क्लास जोड़ने के लिए सहायता

ऐप्लिकेशन में जनरेट की गई अन्य क्लास जोड़ने के लिए, MultipleArtifact.ALL_CLASSES_DIRS के साथ आर्टफ़ैक्ट एपीआई का इस्तेमाल करें. खास तौर पर,

artifacts.use(TaskProvider)
  .wiredWith(...)
  .toAppend(Artifact.Multiple)

का इस्तेमाल करें.MultipleArtifact.ALL_CLASSES_DIRS आर्टफ़ैक्ट एपीआई, आपके कस्टम टास्क के आउटपुट के लिए, अपने-आप एक यूनीक जगह चुन लेगा. इस एपीआई का इस्तेमाल करने का उदाहरण देखने के लिए, addToAllClasses रेसिपी देखें.

पूरे प्रोग्राम के विश्लेषण के आधार पर ट्रांसफ़ॉर्मेशन की सुविधा

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

सभी क्लास को एक साथ बदलने वाले टास्क को रजिस्टर करने के लिए, Android Gradle प्लग इन 7.4 में Artifacts.forScope एपीआई को शामिल किया गया है. मौजूदा प्रोजेक्ट में सभी क्लास को बदलने के लिए, Artifacts.forScope.PROJECT का इस्तेमाल करें. मौजूदा प्रोजेक्ट, इंपोर्ट किए गए प्रोजेक्ट, और सभी बाहरी डिपेंडेंसी में सभी क्लास को बदलने के लिए, Artifacts.forScope.ALL का इस्तेमाल करें. नीचे दिया गया कोड, सभी क्लास को एक साथ बदलने वाले टास्क को रजिस्टर करने के लिए, Artifacts.forScope.ALL का इस्तेमाल करने का तरीका बताता है:

variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
    .use(taskProvider)
    .toTransform(
        ScopedArtifact.CLASSES,
        ModifyClassesTask::allJars,
        ModifyClassesTask::allDirectories,
        ModifyClassesTask::output,
    )

इस एपीआई का इस्तेमाल करने का उदाहरण पाने के लिए, modifyProjectClasses recipe देखें. साथ ही, Android बिल्ड टाइप में कस्टम एक्सटेंशन रजिस्टर करने का उदाहरण पाने के लिए, customizeAgpDsl recipe देखें.

अगर आपके इस्तेमाल के उदाहरण को AndroidComponents के किसी भी एपीआई में शामिल नहीं किया गया है, तो कृपया बग की शिकायत करें.

आम तौर पर इस्तेमाल किए जाने वाले कई प्लग इन, इन नए एपीआई का इस्तेमाल करने के लिए पहले ही माइग्रेट हो चुके हैं. इनमें Firebase परफ़ॉर्मेंस मॉनिटरिंग प्लग इन (1.4.1, AGP 8.0 के साथ काम करता है) और Hilt Gradle प्लग इन (2.40.1, AGP 8.0 के साथ काम करता है) शामिल हैं. AGP के अपग्रेड असिस्टेंट की मदद से, प्रोजेक्ट डेवलपर ज़रूरत के मुताबिक, आम तौर पर इस्तेमाल किए जाने वाले प्लग इन को अपग्रेड कर पाएंगे.

अगर किसी तीसरे पक्ष के प्लगिन के ज़रिए Transform API का इस्तेमाल किया जा रहा है, तो कृपया लेखक को बताएं कि AGP 8.0 के नए एपीआई के साथ काम करने के लिए, उन्हें अपने प्लग इन को अपडेट करना होगा.

एजीपी 7.2

यहां AGP 7.2 के लिए एपीआई से जुड़े अहम अपडेट दिए गए हैं.

RenderScript अब काम नहीं करता

AGP 7.2 से, RenderScript API का इस्तेमाल नहीं किया जा सकता. वे काम करते रहेंगे, लेकिन चेतावनियों को दिखाएँगे. साथ ही, एजीपी के आने वाले वर्शन में इन्हें पूरी तरह से हटा दिया जाएगा. RenderScript से ट्रांज़िशन करने का तरीका जानने के लिए, RenderScript से माइग्रेट करना लेख पढ़ें.

Component.transformClassesWith और Component.setAsmFramesComputationMode का अब इस्तेमाल नहीं किया जा सकता

AGP 7.2 से, क्लास बाइटकोड इंस्ट्रूमेंटेशन एपीआई Component.transformClassesWith और Component.setAsmFramesComputationMode का इस्तेमाल नहीं किया जा सकता. इन्हें एक नए ब्लॉक, Component.instrumentation में ले जाया गया है. इसमें, इंस्ट्रुमेंटेशन प्रोसेस को कॉन्फ़िगर करने से जुड़े सभी एपीआई शामिल हैं. इन इंस्ट्रूमेंटेशन सुविधाओं का इस्तेमाल जारी रखने के लिए, नए ब्लॉक में उनसे जुड़े एपीआई का इस्तेमाल करें. इस बारे में नीचे दिए गए कोड स्निपेट में बताया गया है:

androidComponents {
      onVariants(selector().all(), {
          instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
                                               InstrumentationScope.Project) { params ->
              params.x = "value"
          }
          instrumentation.setAsmFramesComputationMode(
              COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
          )
      })
  }