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

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

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

इस टेबल में बताया गया है कि AGP API को कब बंद किया गया और कब हटाया गया की शर्तों को पूरा करता है.

एपीआई AGP वर्शन में अब काम नहीं करता एजीपी वर्शन से हटाया गया
Component.setAsmFramesComputationMode 7.2
Component.transformClassesWith 7.2
रेंडरस्क्रिप्ट 7.2
बदलाव करें 7.2 8.0

एजीपी 8.0

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

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

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

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

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

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

बाइटकोड को बदलने के लिए समर्थन

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

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

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

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

जनरेट की गई अतिरिक्त वैल्यू जोड़ने के लिए, MultipleArtifact.ALL_CLASSES_DIRS की जानकारी डायरेक्ट्री, प्रोजेक्ट क्लास की डायरेक्ट्री में शामिल की जाती है. Artifacts API अपने-आप चुन लिया जाएगा आपके कस्टम टास्क के लिए एक खास जगह. ज़्यादा जानकारी के लिए, addToAllClasses की रेसिपी पर जाएं.

पूरे प्रोग्राम विश्लेषण के आधार पर बदलावों के लिए सहायता

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

सभी क्लास को एक साथ बदलने वाले टास्क को रजिस्टर करने के लिए, Android Gradle प्लग इन 7.4 बुनियादी जानकारी आर्टफ़ैक्ट.फ़ोर स्कोप एपीआई. मौजूदा प्रोजेक्ट में सभी क्लास को बदलने के लिए, इसका इस्तेमाल करें 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 की रेसिपी उदाहरण के लिए, इस एपीआई को इस्तेमाल करने का तरीका और customizeAgpDsl की रेसिपी Android बिल्ड टाइप में कस्टम एक्सटेंशन रजिस्टर करने के तरीके का उदाहरण देखें.

अगर आपके इस्तेमाल का उदाहरण Android कॉम्पोनेंट एपीआई, कृपया गड़बड़ी की शिकायत करें.

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

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

एजीपी 7.2

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

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

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

Component.transformClassesWith और Component.setAsmFramesComputationMode के इस्तेमाल पर रोक लगा दी गई है

एजीपी 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
          )
      })
  }