تؤدي الأعطال وأخطاء ANR في نظام التشغيل Android إلى إنشاء عملية تتبُّع تسلسُل استدعاء دوال برمجية، وهي عبارة عن لقطة لتسلسُل الدوال المتداخلة التي تم استدعاؤها في برنامجك حتى لحظة تعطُّلها. ويمكن أن تساعدك هذه اللقطات في تحديد أي مشاكل في المصدر وحلّها.
إذا تم تطوير تطبيقك أو لعبتك باستخدام لغة الترميز Java وكنت تستخدم ProGuard لتحسين تطبيقك وإخفاء مفاتيح فك تشفيره، يمكنك تحميل ملف ربط ProGuard لكل إصدار من إصدارات تطبيقك في Play Console. وفي حال تم التطوير باستخدام رموز برمجية أصلية، مثل C++، يمكنك تحميل ملف لتصحيح أخطاء الترميز لكل إصدار من إصدارات تطبيقك في Play Console. ويُسهِّل ذلك الإجراء تحليل الأعطال وأخطاء ANR وإصلاحها.
ملاحظة مهمة: لا يُستخدم سوى ملفات إعداد ReTrace المتوافقة لإزالة تشويش التطبيقات التي تم تطويرها باستخدام Java. وهذا هو التنسيق نفسه المستخدم في ProGuard أو R8.
الخطوة 1: إنشاء ملف ترميز أو إزالة تشويش
لإزالة تشويش أخطاء ANR أو الأعطال في أحد إصدارات تطبيقك أو ترميزها، عليك أولاً إنشاء الملفات المطلوبة للإصدار نفسه من تطبيقك. ويجب إنشاء ملف وتحميله لكل إصدار جديد من تطبيقك من أجل إزالة التشويش أو الترميز.
Java: إنشاء ملف ربط ProGuardلإزالة تشويش عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية في Java، عليك أولاً إنشاء ملف ربط ProGuard. للتعرّف على كيفية إجراء ذلك، انتقِل إلى موقع Google Developers الإلكتروني.
الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث
إذا كان مشروعك ينشئ مجموعة حزمات تطبيقات Android، يمكنك تلقائيًا تضمين ملف تصحيح أخطاء الترميز فيها. لتضمين هذا الملف، أضِف ما يلي إلى ملف build.gradle
في تطبيقك:
android.defaultConfig.ndk.debugSymbolLevel = 'FULL'
ملاحظة: الحد الأقصى المسموح به لحجم ملف تصحيح أخطاء الترميز هو 800 ميغابايت. وفي حال كان حجم الملف أكبر من ذلك، يمكنك استخدام SYMBOL_TABLE
بدلاً من FULL
لتقليل الحجم.
إذا كان مشروعك ينشئ حزمة APK، استخدِم إعداد إصدار build.gradle أعلاه لإنشاء ملف لتصحيح أخطاء الترميز بشكل منفصل. حمِّل يدويًا ملف تصحيح أخطاء الترميز إلى Google Play Console كما هو موضَّح أدناه في الخطوة 2: تحميل ملف ترميز أو إزالة تشويش. وكجزء من عملية التصميم، يعمل المكوّن إضافي لنظام Gradle المتوافق مع Android على إخراج هذا الملف في موقع المشروع التالي:
app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip
الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأقدم (وأنظمة التصميم الأخرى)
كجزء من عملية التصميم لحِزمة تطبيق أو حِزمة APK، يحتفظ المكوّن الإضافي لنظام Gradle المتوافق مع Android بنسخة من المكتبات التي لم تتم إزالتها في دليل المشروع، ويتّبِع هذا الدليل بنية مشابهة لما يلي:
app/build/intermediates/cmake/universal/release/obj
├── armeabi-v7a/
│ ├── libgamenegine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── arm64-v8a/
│ ├── libgamenegine.so
│ ├── libothercode.so
│ └── libvideocodec.so
├── x86/
│ ├── libgamenegine.so
│ ├── libothercode.so
│ └── libvideocodec.so
└── x86_64/
├── libgameengine.so
├── libothercode.so
└── libvideocodec.so
ملاحظة: إذا كنت تستخدم نظام تصميم مختلفًا، يمكنك تعديله لتخزين المكتبات التي لم تتم إزالتها في أي دليل يتبع البنية المطلوبة الواردة أعلاه.
- اضغط محتوى هذا الدليل:
-
$ cd app/build/intermediates/cmake/universal/release/obj
-
$ zip -r symbols.zip .
-
- حمِّل يدويًا ملف symbols.zip إلى Play Console على النحو الموضّح أدناه في الخطوة 2: تحميل ملف ترميز أو إزالة تشويش.
يبلغ الحد الأقصى المسموح به لحجم ملف تصحيح أخطاء الترميز 800 ميغابايت. وإذا كان الملف كبيرًا جدًا، من المرجّح أن يكون السبب هو احتواء ملفات .so على جدول رموز برمجية (أسماء الدوال)، بالإضافة إلى معلومات تصحيح الأخطاء في رموز DWARF (أسماء الملفات أو أسطر الرمز البرمجي). وهذه المعلومات غير ضرورية لكتابة الرمز البرمجي الخاص بك، ويمكنك إزالتها من خلال تنفيذ الأمر التالي:
$OBJCOPY --strip-debug lib.so lib.so.sym
ملاحظة: يشير $OBJCOPY
إلى الإصدار المحدّد لواجهة التطبيق الثنائية (ABI) التي تريد إزالتها، مثل: ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy
.
الخطوة 2: تحميل ملف ترميز أو إزالة تشويش
لإزالة تشويش أخطاء ANR أو الأعطال في أحد إصدارات تطبيقك أو ترميزها، عليك تحميل ملفات إزالة التشويش أو الترميز لكل إصدار من تطبيقك.
ملاحظة مهمة: هذه الخطوة مطلوبة فقط للمطوِّرين الذين يستخدمون حِزم APK. إذا كنت تستخدم حِزمة تطبيق والإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو الإصدارات الأحدث، في هذه الحالة ليس عليك اتّخاذ أي إجراء. وسنستخرج تلقائيًا ملف إزالة التشويش من الحزمة ويمكنك التخطّي إلى الخطوة 3: عرض عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية لتعطُّل التطبيق التي تمت إزالة تشويشها. يمكنك معرفة المزيد من المعلومات عن حِزم التطبيقات على موقع "مطوّرو تطبيقات Android".
تحميل الملفات باستخدام Play Consoleلتحميل ملف ترميز أو إزالة تشويش، اتّبِع الخطوات التالية:
- افتح Play Console.
- اختَر أحد التطبيقات.
- من القائمة اليمنى، اختَر
الاختبار والإصدار
> مستكشف حزم التطبيقات. - باستخدام أداة الاختيار في أعلى يسار الصفحة، اختَر العنصر المناسب.
- اختَر علامة التبويب عمليات التنزيل وانتقِل للأسفل إلى قسم "مواد العرض".
- انقر على سهم التحميل لملف الربط أو رموز تصحيح الأخطاء بحسب حالة تطبيقك لتحميل ملف الترميز أو إزالة التشويش للإصدار المحدَّد من تطبيقك.
لتحميل الملفات باستخدام Google Play Developer API، انتقِل إلى موقع Google Developers الإلكتروني.
الخطوة 3: عرض عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية لتعطُّل التطبيق التي تمت إزالة تشويشها
بعد تحميل ملف ربط ProGuard أو ملف تصحيح أخطاء الترميز لأحد إصدارات تطبيقك، ستتم إزالة التشويش لأي أعطال أو أخطاء ANR تحدث بعد ذلك. يمكنك مراجعة عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية التي تمت إزالة تشويشها لكلّ من الأعطال الفردية وأخطاء ANR في صفحة الأعطال وأخطاء ANR في تطبيقك.
- افتح Play Console.
- اختَر أحد التطبيقات.
- من القائمة اليمنى، اختَر المراقبة والتحسين > مؤشرات Android الحيوية > الأعطال وأخطاء ANR.
- اختَر عطلاً.
- في قسم "تتبُّع تسلسل استدعاء الدوال البرمجية"، ستظهر لك عمليات تتبُّع تسلسل استدعاء الدوال البرمجية التي تم ترميزها وإزالة تشويشها.
ملاحظة مهمة: بعد تحميل ملف الربط لأحد إصدارات تطبيقك، ستتم إزالة التشويش فقط عن الأعطال وأخطاء ANR التي تحدث مستقبلاً في هذا الإصدار من تطبيقك. ولن تتم إزالة التشويش عن أعطال التطبيق أو أخطاء ANR التي تحدث قبل تحميل ملف الربط لهذا الإصدار من تطبيقك.
الأسئلة الشائعة
لا أريد استخدام أداة الترميز أو إزالة التشويش في Play Console. هل يمكنني إجراء ذلك بلا اتصال بالإنترنت؟تستخدم Play Console أداة ndk-stack لترميز عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية للتطبيقات الأصلية وReTrace لأعطال Java. في حال اخترت عدم مشاركة ملفات إزالة التشويش، يمكنك نسخ حِزم الأعطال التي تم تشويشها من Play Console، ثم ترميزها باستخدام أداة مناسبة بلا اتصال بالإنترنت. ومع ذلك، يجب تنفيذ هذه العملية يدويًا لكل حزمة من الأعطال، ما يجعلها بطيئة وتستغرق وقتًا طويلاً. وعندما تتوفّر ملفات إزالة التشويش، ستتولى Play Console تنفيذ تلك العملية نيابةً عنك.
بعد تحميل ملف ربط ProGuard أو ملف تصحيح أخطاء الترميز لأحد إصدارات التطبيق، ستتم إزالة التشويش فقط عن الأعطال وأخطاء ANR التي تحدث بعد ذلك. لكي تظهر لك أخطاء ANR والأعطال التي تمت إزالة تشويشها في Play Console، يجب الانتظار فترة من الوقت إلى أن تبلِغ أجهزة المستخدمين عن أخطاء ANR والأعطال الجديدة.
سبب ذلك هو تحميل ملف ترميز أو إزالة تشويش غير مكتمل. احرِص على تضمين ملفات الترميز لتطبيقك بالكامل، خاصةً إذا كنت تستخدم عملية تصميم معقّدة أو متعددة المراحل. وأحد الأسباب الأكثر شيوعًا لإزالة التشويش بشكل جزئي هو استخدام مكتبة تابعة لجهة خارجية. وفي هذه الحالة، قد يكون بإمكانك الحصول على ملفات إزالة التشويش من موفِّر المكتبة.
بدون توفُّر ملفات إزالة التشويش، سيتم عرض العطل أو خطأ ANR نفسه على جهاز يعمل بإصدار 32 بت أو 64 بت أو معالجات ARM أو جهاز Intel بشكلٍ منفصل. وعند توفير ملفات إزالة التشويش، يمكننا تجميع هذه الأعطال معًا، ما يمنحك تصورًا أفضل عن الأعطال وأخطاء ANR الأكثر تأثيرًا في تطبيقك.
في حال نسيانك تحميل الملف لإصدار جديد من تطبيقك، ستتم إعادة تشويش الأعطال وأخطاء ANR. اتّبِع التعليمات أعلاه لتحميل الملف الآن. بعد تحميل ملف ربط ProGuard أو ملف تصحيح أخطاء الترميز لأحد إصدارات التطبيق، ستتم إزالة التشويش فقط عن الأعطال وأخطاء ANR التي تحدث بعد ذلك. لكي تظهر لك أخطاء ANR والأعطال التي تمت إزالة تشويشها في Play Console، يجب الانتظار فترة من الوقت إلى أن تبلِغ أجهزة المستخدمين عن أخطاء ANR والأعطال الجديدة.
لتجنُّب نسيان تحميل الملف، يمكنك تعديل عملية التصميم ليتم استخدام حِزم التطبيقات مع الإصدار 4.1 والإصدارات الأحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android. في هذه الحالة، يمكنك تلقائيًا تضمين ملف لتصحيح أخطاء الترميز في حِزمة التطبيق من خلال اتّباع التعليمات الواردة على موقع "مطوّرو تطبيقات Android".
في حال تحميل ملف غير صحيح لأحد إصدارات تطبيقك، ستتم إعادة تشويش الأعطال وأخطاء ANR. لتحميل نسخة مصحَّحة، اتَّبع الخطوات التالية:
- افتح Play Console.
- اختَر أحد التطبيقات.
- من القائمة اليمنى، اختَر
الاختبار والإصدار
> مستكشف حزم التطبيقات - باستخدام أداة الاختيار في أعلى يسار الصفحة، اختَر العنصر المناسب.
- اختَر علامة التبويب عمليات التنزيل وانتقِل للأسفل إلى قسم "مواد العرض".
- انقر على رمز الحذف بجانب ملف الترميز أو إزالة التشويش غير الصحيح.
- بعد حذف إصدار الملف غير الصحيح، انقر على رمز التحميل وحمِّل الملف الصحيح لإصدار تطبيقك.
بعد تحميل ملف ربط ProGuard الصحيح أو ملف تصحيح أخطاء الترميز لأحد إصدارات تطبيقك، ستتم إزالة التشويش فقط عن أي أعطال أو أخطاء ANR تحدث بعد ذلك. لتظهر أخطاء ANR والأعطال في Play Console التي تمت إزالة تشويشها، يجب الانتظار لبعض الوقت حتى يتم الإبلاغ عن أخطاء ANR والأعطال الجديدة على أجهزة المستخدمين.
ملاحظة: لتجنُّب مخاطر تحميل إصدار غير صحيح من الملف، يمكنك تعديل عملية التصميم ليتم استخدام حِزم التطبيقات مع الإصدار 4.1 من المكوِّن الإضافي لنظام Gradle المتوافق مع Android أو الإصدارات الأحدث. في هذه الحالة، يمكنك تلقائيًا تضمين ملف لتصحيح أخطاء الترميز في حِزمة التطبيق من خلال اتّباع التعليمات الواردة على موقع "مطوّرو تطبيقات Android".
للبدء، يُرجى الانتقال إلى موقع "مطوّرو تطبيقات Android".
نعم، يمكنك ذلك.
في بعض الأحيان، يواجه النظام خطأ ANR، ولكن يتعذّر عليه جمع بيانات عملية تتبُّع تسلسل استدعاء الدوال البرمجية. في مثل هذه الحالة، يتم عرض خطأ ANR لمنحك صورة أكثر شمولاً عن استقرار تطبيقك، ولكن لا يمكن عرض تقرير تتبُّع تسلسل استدعاء الدوال البرمجية ذاته. يتم تجميع أخطاء ANR بدون عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية حسب النوع والنشاط، لذا قد تساعد مراجعة أخطاء ANR المتشابهة وإصلاحها في تقليل عدد المعروض منها بدون عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية.