پلاگین 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
Gradle را در فایل Gradle ماژول (سطح برنامه) (معمولا <project>/<app-module>/build.gradle.kts
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 } } } }