تحديثات واجهة برمجة التطبيقات Android Gradle API الإضافية

تتتبّع هذه الصفحة الإيقاف النهائي لواجهة برمجة التطبيقات لنظام Gradle المتوافق مع Android (AGP) وعمليات الإزالة. ويقدّم هذا القسم معلومات حول كيفية تعديل الرمز وفقًا لذلك.

أداة تتبُّع عمليات الإزالة والإيقاف النهائي لواجهة برمجة التطبيقات

يلخص الجدول التالي حالات إيقاف واجهات برمجة تطبيقات AGP وإزالتها، في بنود إصدار AGP.

واجهة برمجة التطبيقات تم إيقافها في إصدار AGP تمت الإزالة من إصدار AGP
Component.setAsmFramesComputationMode 7.2
Component.transformClassesWith 7.2
RenderScript 7.2
تحويل 7.2 من نظام التشغيل Android

8.0 دولار أسترالي

في ما يلي التحديثات المهمة لواجهة برمجة التطبيقات للإصدار 8.0 من AGP.

تمت إزالة Transform API

بدءًا من AGP 8.0، تحويل تمت إزالة واجهة برمجة التطبيقات. يعني ذلك أن جميع الفئات في الحزمة تمت إزالة com.android.build.api.transform.

جارٍ إزالة Transform API لتحسين أداء الإصدار. تُعد المشروعات التي استخدام واجهة برمجة التطبيقات Transform API لفرض استخدام AGP على استخدام تدفق أقل تحسينًا للإصدار الذي إلى تراجع كبير في مدد الإنشاء. من الصعب أيضًا استخدام تحويل واجهة برمجة التطبيقات ودمجها مع ميزات Gradle الأخرى؛ واجهات برمجة التطبيقات البديلة ونهدف إلى تسهيل تطوير AGP بدون تقديم أداء أو إنشاء والتصحيح.

واجهات برمجة التطبيقات البديلة

ليس هناك بديل واحد لواجهة Transform API؛ بل هناك تحديثات جديدة ومستهدفة واجهات برمجة التطبيقات لكل حالة استخدام. جميع واجهات برمجة التطبيقات البديلة متوفّرة في الجزء androidComponents {}. تتوفر جميع واجهات برمجة التطبيقات هذه بحلول الإصدار AGP 7.2.

دعم تحويل رمز البايت

لتحويل رمز البايت، استخدِم واجهة برمجة تطبيقات instrumentation API. بالنسبة للمكتبات، يمكنك تسجيل أداة لفئات المشروعات المحلية فقط؛ للتطبيقات والاختبارات يمكنك اختيار تسجيل أداة للفئات المحلية فقط أو جميع بما في ذلك التبعيات المحلية والبعيدة. لاستخدام واجهة برمجة التطبيقات هذه، تعمل الأداة بشكل مستقل في كل فئة، مع وصول محدود إلى الفئات في مسار الفصل (انظر createClassVisitor() للحصول على مزيد من المعلومات). يحسن هذا القيد أداء الإصدارات الكاملة والتزايدية، ويحافظ على بساطة عرض واجهة برمجة التطبيقات. كل مكتبة يتم قياسها بالتوازي بمجرد أن تصبح جاهزة، وليس بعد كل التجميع. بالإضافة إلى ذلك، قد يكون التغيير في فئة واحدة يعني أنه لا يجب إعادة تجهيز الفئات المتأثرة فقط على سبيل المثال لمعرفة كيفية استخدام واجهة برمجة تطبيقات الأداة، يُرجى مراجعة تطوير الصفوف باستخدام ASM وصفة AGP.

إمكانية إضافة صفوف تم إنشاؤها إلى تطبيقك

لإضافة المزيد من الصفوف التي تم إنشاؤها إلى التطبيق، استخدِم السمة العناصر واجهة برمجة تطبيقات مع MultipleArtifact.ALL_CLASSES_DIRS على وجه التحديد، استخدم

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

مع MultipleArtifact.ALL_CLASSES_DIRS لإلحاق المزيد من النصوص التي تم إنشاؤها أدلة لفئات المشروع. ستختار واجهة برمجة التطبيقات Artifacts API تلقائيًا. موقع فريد لمهمة المخصصة لإخراجه إليه. يمكنك الاطّلاع على وصفة addToAllClasses للحصول على مثال حول كيفية استخدام واجهة برمجة التطبيقات هذه.

دعم عمليات التحويل استنادًا إلى تحليل البرنامج بالكامل

لتنفيذ التحويلات بناءً على تحليل البرنامج بأكمله، يمكن لجميع الفئات معًا في مهمة واحدة. يجب استخدام هذا الأسلوب بحذر لأنّ تكلفة أداء الإصدار أعلى بكثير من تكلفة استخدام أداة قياس واجهة برمجة التطبيقات. إذا كان المكوّن الإضافي يستخدم واجهة برمجة التطبيقات هذه، ننصحك باستخدام التحويل الموافقة على كل نوع من أنواع الإصدارات، ليتمكّن مطوِّر التطبيقات من إيقافه بُنى التطوير.

لتسجيل مهمة تحول جميع الفئات معًا، الإصدار 7.4 من المكوّن الإضافي لنظام Gradle المتوافق مع Android تقدم 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 للحصول على مثال حول كيفية استخدام واجهة برمجة التطبيقات هذه تخصيص وصفة AgpDsl للاطّلاع على مثال حول كيفية تسجيل الإضافات المخصّصة في أنواع إصدارات Android.

وإذا لم تكن حالة استخدامك مشمولة بأي من مكونات Android واجهات برمجة التطبيقات، يُرجى الإبلاغ عن خطأ.

تم ترحيل العديد من المكونات الإضافية شائعة الاستخدام بالفعل لاستخدام واجهات برمجة التطبيقات الجديدة هذه، بما في ذلك المكوّن الإضافي لمراقبة أداء Firebase (الإصدار 1.4.1 متوافق مع AGP 8.0) والمكوّن الإضافي Hilt Gradle (الإصدار 2.40.1 متوافق مع AGP 8.0). مساعد Google ستساعد "مساعد الترقية" أيضًا مطوّري المشاريع على ترقية التطبيقات الشائعة الاستخدام. المكونات الإضافية حسب الحاجة.

إذا كنت تستخدم Transform API من خلال مكوّن إضافي تابع لجهة خارجية، يُرجى السماح المؤلف يعرف أن المكون الإضافي سيحتاج إلى تحديث للعمل مع واجهات برمجة التطبيقات الجديدة لـ AGP 8.0.

7.2 دولار أسترالي

في ما يلي تحديثات واجهة برمجة التطبيقات المهمة للإصدار 7.2 من AGP.

تم إيقاف RenderScript نهائيًا

بدءًا من AGP 7.2، تم إيقاف واجهات برمجة تطبيقات RenderScript نهائيًا. ستتم المتابعة لكي تعمل بشكل صحيح، إلا أنها تنطوي على تحذيرات، وستتم إزالتها تمامًا في المستقبل من AGP. للحصول على إرشادات حول كيفية الخروج من 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
          )
      })
  }