| انتخاب پلاتفرم: | iOS+ Android Flutter Unity |
افزونه Gradle Crashlytics میتواند بهطور خودکار تشخیص دهد که چه زمانی کدتان را مبهمسازی میکنید. وقتی ساخت شما فایل نگاشت تولید میکند، افزونه آن را بارگذاری میکند تا سرورهای Crashlytics بتوانند از فایل برای ارائه ردگیریهای پشته برنامه شما بهعنوان کد غیرمبهم و قابلخواندن برای انسان استفاده کنند.
پیکربندی لازم هنگام استفاده از R8، ProGuard، و DexGuard
Crashlytics میتواند با هر فایل نگاشت سازگار با ProGuard ابهامزدایی کند، و علاوهبراین با ProGuard، R8، و DexGuard آزمایش شده است.
اگر برنامهتان از R8 با ابهامسازی روشن بههمراه 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 بروید تا از کارشناسان کمک بگیرید.
نگه داشتن تنوعهای ساخت مبهمسازیشده
برای جلوگیری از بارگذاری فایل نگاشت توسط افزونه Gradle Crashlytics برای
انواعی که از مبهمسازی استفاده میکنند، ویژگی افزونه 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 } } } }