تتتبّع هذه الصفحة عمليات إيقاف واجهة برمجة التطبيقات وعمليات إزالتها في المكوّن الإضافي لنظام 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
في ما يلي التحديثات المهمة لواجهة برمجة التطبيقات للإصدار 8.0 من AGP.
إزالة 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 API. إذا كان المكوّن الإضافي يستخدم واجهة برمجة التطبيقات هذه، من المستحسن أن تكون عملية التحويل مفعَّلة لكل نوع من الإصدارات، ليتمكّن مطوِّر التطبيق من إيقافها في إصدارات التطوير.
لتسجيل مهمة تحوّل جميع الفئات معًا، يقدّم الإصدار 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 مع AGP 8.0) والمكوّن الإضافي Hilt Gradle (الإصدار 2.40.1 متوافق مع 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
)
})
}