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

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

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

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

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

AGP 8.8

في ما يلي تحديثات مهمة لواجهة برمجة التطبيقات في AGP 8.8.

إيقاف إعدادات الموارد نهائيًا

تم إيقاف إعدادات الموارد نهائيًا اعتبارًا من الإصدار 8.8 من AGP. تم إجراء ذلك لأنّ حزمة تطوير البرامج (AGP) لم تعُد متوافقة مع كثافات الموارد المختلفة، وتتطلّب أداة Google Play Console الآن نشر التطبيقات كحِزم تطبيقات. لضبط اللغة، يمكنك تحديد اللغات التي يتيحها تطبيقك باستخدام لغة برمجة localeFilters لربط إعدادات اللغات بالموارد المقابلة.

AGP 8.0

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

إزالة Transform API

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

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

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

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

إتاحة تحويل الرمز الثنائي

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

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

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

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

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

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

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

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

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

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

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

AGP 7.2

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

تم إيقاف 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
          )
      })
  }