الحصول على تقارير أعطال قابلة للقراءة في لوحة بيانات Crashlytics (نظام التشغيل Android)

اختيار المنصة: iOS+ Android Flutter Unity


يمكن Crashlytics لبرنامج Gradle الإضافي رصد عملية تشويش الرموز تلقائيًا. عندما ينشئ الإصدار ملف ربط، يحمّله المكوّن الإضافي حتى تتمكّن خوادم Crashlytics من استخدام الملف لعرض تتبُّع تسلسل استدعاء الدوال البرمجية في تطبيقك كرمز برمجي غير مشوّش وقابل للقراءة.

الإعدادات المطلوبة عند استخدام R8 وProGuard وDexGuard

يمكن لأداة Crashlytics إزالة التشويش باستخدام أي ملف ربط متوافق مع ProGuard، وقد تم اختبارها أيضًا باستخدام ProGuard وR8 وDexGuard.

إذا كان تطبيقك يستخدم R8 مع تفعيل التشويش بالإضافة إلى الإصدار 4.2.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو إصدار أحدث، ستنتج Crashlytics تقارير أعطال قابلة للقراءة. يُرجى العِلم أنّنا Crashlytics حسّنّا مؤخرًا إمكانية رصد المشاكل في التطبيقات التي تستخدم كلاً من Kotlin وR8، ما قد يؤدي إلى تصنيف بعض المشاكل على نحو غير متوقّع.

إذا كان تطبيقك يستخدم ملف إعداد ProGuard، عليك الحفاظ على المعلومات التي تتطلّبها Crashlytics لإنشاء تقارير أعطال قابلة للقراءة، وذلك عن طريق إضافة الأسطر التالية إلى ملف إعداد ProGuard أو DexGuard:

-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.

للحصول على مساعدة بشأن الأسئلة أو المشاكل المتعلّقة بـ DexGuard، يُرجى التواصل مع فريق دعم Guardsquare مباشرةً. للحصول على مساعدة بشأن ProGuard، يُرجى الانتقال إلى منتديات Guardsquare للحصول على مساعدة من أحد الخبراء.

الاحتفاظ بتصاميم متنوعة مبهمة

لمنع المكوّن الإضافي Crashlytics لنظام Gradle من تحميل ملف الربط الخاص بالمتغيرات التي تستخدم التشويش، اضبط السمة firebaseCrashlytics.mappingFileUploadEnabled لإضافة Gradle على القيمة false في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً <project>/<app-module>/build.gradle.kts أو <project>/<app-module>/build.gradle). يمكن أن يساعد ذلك في تسريع أوقات الإنشاء لعمليات الإنشاء المشوَّشة، ولكن تجدر الإشارة إلى أنّ عمليات تتبُّع تسلسل استدعاء الدوال البرمجية الناتجة ستظهر مشوَّشة في صفحة Crashlytics بوحدة تحكّم Firebase.

Kotlin

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  getByName("debug") {
    minifyEnabled = true
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions += "environment"
productFlavors {
  create("staging") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
  create("prod") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = true
    }
  }
}
}

Groovy

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  debug {
    minifyEnabled true
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions "environment"
productFlavors {
  staging {
    dimension "environment"
    ...
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
  prod {
    dimension "environment"
    ...
    firebaseCrashlytics {
      mappingFileUploadEnabled true
    }
  }
}
}