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

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


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

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

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

إذا كان تطبيقك يستخدم R8 مع تفعيل إخفاء الرموز بالإضافة إلى Android Gradle 4.2.0 أو إصدار أحدث، 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 من تحميل ملف الربط للمتغيّرات التي تستخدم إخفاء الرموز، اضبط خاصية الإضافة firebaseCrashlytics.mappingFileUploadEnabled في Gradle على false في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً ما يكون <project>/<app-module>/build.gradle.kts أو <project>/<app-module>/build.gradle). يمكن أن يساعد ذلك في تسريع أوقات الإصدار للإصدارات المخفية، ولكن يُرجى العِلم أنّ تتبُّع تسلسل استدعاء الدوال الناتج سيظهر مخفيًا في صفحة Crashlytics في Firebase console.

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
    }
  }
}
}