گزارش‌های خرابی قابل خواندن را در داشبورد Crashlytics دریافت کنید


پلاگین 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 دیدن کنید تا از یک متخصص کمک بگیرید.

انواع ساخت مبهم را حفظ کنید

برای جلوگیری از افزونه Crashlytics Gradle از بارگذاری پرونده نقشه برداری برای انواع مختلفی که از آن استفاده می کنند ، firebaseCrashlytics.mappingFileUploadEnabled تنظیم کنید. MappingFileUploadenabled Gradle Extension به false در ماژول خود (برنامه برنامه) (معمولاً <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
    }
  }
}
}