إذا كان تطبيق Android يحتوي على مكتبات أصلية، يمكنك تفعيل عمليات تتبُّع تسلسل استدعاء الدوال البرمجية بالكامل وتقارير الأعطال التفصيلية للرمز البرمجي الأصلي. من Firebase Crashlytics من خلال بعض التعديلات البسيطة على إصدار تطبيقك التكوين.
يوضِّح هذا الدليل طريقة ضبط تقارير الأعطال باستخدام حزمة SDK لمنصة Firebase Crashlytics خاصة بحِزمة تطوير البرامج (NDK)
لمعرفة كيفية بدء استخدام Crashlytics في Unity المشروعات، فتحقق من دليل البدء في Unity
قبل البدء
أضِف Firebase إلى جهاز Android إذا لم يسبق لك إجراء ذلك. مشروعك. إذا لم يكن لديك تطبيق Android، يمكنك تنزيله نموذج تطبيق.
موصى به: للحصول تلقائيًا على سجلّات شريط التنقّل لفهم إجراءات المستخدم التي تؤدي إلى أعطال أو أحداث غير فادحة أو أخطاء ANR، عليك تفعيل "إحصاءات Google" في مشروعك على Firebase.
في حال لم تكن خدمة "إحصاءات Google" متوفرة في مشروعك الحالي على Firebase. بشكل عام، يمكنك تفعيل "إحصاءات Google" علامة التبويب عمليات الدمج في
في وحدة تحكُّم Firebase. > إعدادات المشروع إذا كنت بصدد إنشاء مشروع جديد على Firebase، فعِّل "إحصاءات Google". أثناء سير عمل إنشاء المشروع.
تأكَّد من أنّ تطبيقك يتضمّن الحد الأدنى من الإصدارات المطلوبة التالية:
- معيار Gradle 8.0
- الإصدار 8.1.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android
- الإصدار 4.4.1 من المكوّن الإضافي لنظام Gradle لخدمات Google
الخطوة 1: إضافة حزمة تطوير البرامج (SDK) في Crashlytics لـ NDK إلى تطبيقك
في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً<project>/<app-module>/build.gradle.kts
أو
<project>/<app-module>/build.gradle
)،
وأضف التبعية لمكتبة Crashlytics NDK لنظام Android. ننصح باستخدام
قائمة مواد العرض لنظام Android في Firebase
للتحكم في إصدارات المكتبة.
للحصول على أفضل تجربة في استخدام Crashlytics، ننصحك تفعيل "إحصاءات Google" في مشروعك على Firebase وإضافة حزمة تطوير البرامج (SDK) لمنصّة Firebase الخاصة بخدمة "إحصاءات Google" إلى تطبيقك.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.2")) // Add the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk") implementation("com.google.firebase:firebase-analytics") }
باستخدام قائمة قائمتها التشغيلية (Android BoM) من Firebase سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Android في Firebase.
(بديل) إضافة تبعيات مكتبة Firebase بدون استخدام BoM
إذا اخترت عدم استخدام قائمة عناصر Firebase، يجب تحديد كل إصدار من إصدارات مكتبة Firebase. في سطر التبعية.
يُرجى ملاحظة أنّه إذا كنت تستخدم مكتبات Firebase متعددة في تطبيقك، سنعتمد بشدة التوصية باستخدام BoM لإدارة نسخ المكتبة، مما يضمن نشر جميع النسخ متوافقة مع الأجهزة الجوّالة
dependencies { // Add the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk:19.0.3") implementation("com.google.firebase:firebase-analytics:22.0.2") }
الخطوة 2: إضافة المكوّن الإضافي Crashlytics Gradle إلى تطبيقك
في ملف Gradle على مستوى الجذر (على مستوى المشروع) (
<project>/build.gradle.kts
أو<project>/build.gradle
)، أضِف السمة المكوّن الإضافي Crashlytics Gradle إلى مجموعةplugins
:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.4.2" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.2" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.4.2' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.2' apply false }
في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً
<project>/<app-module>/build.gradle.kts
أو<project>/<app-module>/build.gradle
)، أضف المكون الإضافي Crashlytics Gradle:Kotlin
plugins { id("com.android.application") // ... // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") }
Groovy
plugins { id 'com.android.application' // ... // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' }
الخطوة 3: تثبيت إضافة Crashlytics إلى تصميمك
في ملف Gradle للوحدة (على مستوى التطبيق)
(عادةً <project>/<app-module>/build.gradle.kts
أو
<project>/<app-module>/build.gradle
)، اضبط إضافة Crashlytics.
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled = true } } } }
Groovy
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled true } } } }
الخطوة 4: إعداد التحميل التلقائي للرموز الأصلية
لإنشاء عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية القابلة للقراءة من أعطال NDK، يحتاج تطبيق Crashlytics إلى معرفة
حول الرموز في قيمك الثنائية الأصلية. المكوّن الإضافي Crashlytics Gradle
تتضمّن uploadCrashlyticsSymbolFileBUILD_VARIANT
لأتمتة هذه العملية.
وحتى تتمكن من الوصول إلى مهمة التحميل التلقائي للرموز، تأكد من تم ضبط
nativeSymbolUploadEnabled
علىtrue
في الوحدة (على مستوى التطبيق) Gradle.ولكي تظهر أسماء الطرق في عمليات تتبُّع تسلسل استدعاء الدوال البرمجية، عليك الاستدعاء صراحةً
uploadCrashlyticsSymbolFileBUILD_VARIANT
بعد كل إصدار من مكتبة NDK. على سبيل المثال:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
كل من حزمة تطوير البرامج (SDK) في Crashlytics لـ NDK والمكوّن الإضافي Crashlytics Gradle على وجود معرّف إصدار GNU داخل الكائنات المشتركة الأصلية.
يمكنك التأكّد من توفّر هذا المعرّف عن طريق تنفيذ
على كل برنامج ثنائي. إذا كان رقم تعريف الإصدار غير موجود، يُرجى إضافةreadelf -n
إلى حساب نظام التصميم لحلّ المشكلة.-Wl,--build-id
الخطوة 5: فرض عطل تجريبي لإنهاء الإعداد
لإنهاء إعداد Crashlytics والاطّلاع على البيانات الأولية في لوحة بيانات Crashlytics الخاصة بوحدة تحكم Firebase، وعليك فرض إجراء اختبار. والأعطال.
أضِف رمزًا إلى تطبيقك يمكنك استخدامه لفرض حدوث عطل تجريبي.
يمكنك استخدام الرمز التالي في
MainActivity
لتطبيقك لإضافة زر. إلى تطبيقك، ويؤدي الضغط عليه إلى حدوث عطل. تمت تسمية الزر "اختبار العطل"Kotlin+KTX
val crashButton = Button(this) crashButton.text = "Test Crash" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
Java
Button crashButton = new Button(this); crashButton.setText("Test Crash"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
أنشئ تطبيقك وشغِّله.
يمكنك فرض العطل التجريبي لإرسال تقرير الأعطال الأول لتطبيقك:
افتح تطبيقك من جهاز الاختبار أو المحاكي.
اضغط على "اختبار التعطّل" في تطبيقك الذي أضفته باستخدام الرمز أعلاه.
بعد تعطُّل تطبيقك، أعِد تشغيله حتى يرسل العُطل. تقديم تقرير إلى Firebase.
انتقِل إلى لوحة بيانات Crashlytics وحدة تحكُّم Firebase للاطّلاع على العُطل التجريبي.
إذا أعدت تحميل وحدة التحكّم ولكن لم يظهر عطل الاختبار بعد ذلك بعد خمس دقائق، تفعيل ميزة تسجيل معلومات تصحيح الأخطاء لمعرفة ما إذا كان تطبيقك يرسل تقارير الأعطال.
وهذا كل ما في الأمر! يراقب تطبيق Crashlytics الآن تطبيقك بحثًا عن أي أعطال،
عرض تقارير الأعطال والإحصاءات والتحقيق فيها في
لوحة بيانات Crashlytics
الخطوات التالية
(موصى به) يمكنك الحصول على مساعدة لتصحيح الأعطال الناتجة عن أخطاء الذاكرة الأصلية عن طريق جمع تقارير GWP-ASan يمكن أن ترتبط هذه الأخطاء المتعلقة بالذاكرة بتلف الذاكرة داخل تطبيقك، وهو السبب الرئيسي للثغرات الأمنية في التطبيق. للاستفادة من ميزة تصحيح الأخطاء هذه، عليك التأكّد من أنّ تطبيقك يتضمّن تم تفعيل GWP-ASan صراحةً ويستخدم أحدث إصدار من حزمة تطوير البرامج لـ Crashlytics لـ NDK (الإصدار 18.3.6 أو الإصدارات الأحدث أو Firebase BoM v31.3.0+ )
تخصيص إعداد تقرير الأعطال من خلال إضافة خيار تفعيل إعداد التقارير والسجلات والمفاتيح تتبع الأخطاء غير الفادحة.
الدمج مع Google Play حتى يمكنك فلترة تقارير أعطال تطبيق Android حسب قناة إصدار Google Play مباشرةً من لوحة بيانات Crashlytics ويتيح لك ذلك تركيز لوحة البيانات بشكل أفضل على إصدارات معيّنة.
تحديد المشاكل وحلّها
في حال ظهور عمليات تتبُّع تسلسُل استدعاء الدوال البرمجية مختلفة في وحدة تحكُّم Firebase سجلّ Logcat، يُرجى الرجوع إلى دليل تحديد المشاكل وحلّها.
خيارات بديلة لتحميل الرموز
ينطبق سير العمل الرئيسي في هذه الصفحة أعلاه على إصدارات Gradle القياسية. ومع ذلك، تستخدم بعض التطبيقات إعدادات أو أدوات مختلفة (على سبيل المثال، نموذج غير Gradle). في هذه المواقف، قد تكون الخيارات التالية مفيدة في تحميل الرموز بنجاح.
الخيار: تحميل رموز لوحدات المكتبة والتبعيات الخارجية
يمكن أن يكون هذا الخيار مفيدًا في الحالات التالية:
- إذا كنت تستخدم عملية إنشاء NDK مخصصة داخل Gradle
- إذا كانت المكتبات الأصلية مُدمجة في وحدة مكتبة أو وحدة ميزات أو تم توفيرها من خلال طرف ثالث
- إذا كانت مهمة تحميل الرموز التلقائي أخفق أو تظهر لك أعطال غير مرمزة في لوحة البيانات
الخيار: تحميل رموز للإصدارات التي لا تستخدم Gradle أو للمكتبات الأصلية التي لم تتم إزالتها والتي لا يمكن الوصول إليها
يمكن أن يكون هذا الخيار مفيدًا في الحالات التالية:
في حال استخدام عملية تصميم غير Gradle
إذا تم توفير المكتبات الأصلية التي لم تتم إزالتها بأي طريقة لا يمكن الوصول إليها أثناء إصدارات Gradle