الحصول على تقارير أعطال قابلة للقراءة في لوحة بيانات Crashlytics


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

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

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

إذا كان تطبيقك يستخدم R8 مع تفعيل التشويش مع الإصدار 4.2.0 من Android Gradle والإصدارات الأحدث، 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 Community للحصول على مساعدة من خبير.

الاحتفاظ بنُسخ الإصدار المشفَّرة

لمنع المكوّن الإضافي Crashlytics Gradle من تحميل ملف الربط لملف الإصدارات التي تستخدم التشويش، اضبط سمة تمديد Gradle firebaseCrashlytics.mappingFileUploadEnabled على 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
    }
  }
}
}