افزونهی Crashlytics Gradle میتواند بهطور خودکار تشخیص دهد که چه زمانی کد خود را مبهمسازی میکنید. وقتی ساخت شما یک فایل نگاشت ایجاد میکند، افزونه آن را آپلود میکند تا سرورهای Crashlytics بتوانند از این فایل برای رندر کردن ردپاهای پشتهی برنامهی شما بهعنوان کدی بدون ابهام و قابل خواندن توسط انسان استفاده کنند.
پیکربندیهای مورد نیاز هنگام استفاده از 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 } } } }