The Crashlytics Gradle plugin can automatically detect when you obfuscate your code. When your build generates a mapping file, the plugin uploads it so the Crashlytics servers can use the file to render your app's stack traces as unobfuscated and human-readable code.
پیکربندیهای مورد نیاز هنگام استفاده از R8، ProGuard و DexGuard
Crashlytics میتواند با هر فایل نگاشت سازگار با ProGuard از حالت مبهم خارج شود و علاوه بر این با ProGuard، R8 و DexGuard نیز آزمایش شده است.
اگر برنامه شما از R8 با قابلیت مبهمسازی فعال و اندروید 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 Gradle را در فایل Gradle ماژول (سطح برنامه) خود (معمولاً <project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle ) روی false تنظیم کنید. این میتواند به افزایش سرعت زمان ساخت برای ساختهای مبهمسازی شده کمک کند، اما توجه داشته باشید که ردپاهای پشته حاصل در صفحه 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 } } } }