| انتخاب پلتفرم: | iOS+ اندروید اندروید NDK فلاتر یونیتی |
اگر از کتابخانههای بومی در برنامه اندروید خود استفاده میکنید، میتوانید با چند بهروزرسانی کوچک در پیکربندی ساخت برنامه، ردیابی کامل پشته و گزارشهای خرابی دقیق را برای کد بومی خود از Firebase Crashlytics فعال کنید.
این راهنما نحوه پیکربندی گزارش خرابی با Firebase Crashlytics SDK برای NDK را شرح میدهد.
اگر به دنبال نحوه شروع کار با Crashlytics در پروژههای یونیتی خود هستید، راهنمای شروع به کار با یونیتی را بررسی کنید.
قبل از اینکه شروع کنی
اگر هنوز Firebase را به پروژه اندروید خود اضافه نکردهاید، آن را اضافه کنید. اگر برنامه اندروید ندارید، میتوانید یک برنامه نمونه را دانلود کنید.
توصیه میشود : برای اینکه گزارشهای breadcrumb به طور خودکار اقدامات کاربر را که منجر به خرابی، عدم موفقیت یا رویداد ANR میشود، درک کنند، باید Google Analytics در پروژه Firebase خود فعال کنید.
اگر در حال ایجاد یک پروژه جدید Firebase هستید، در طول فرآیند ایجاد پروژه، Google Analytics فعال کنید.
اگر از یک پروژه Firebase موجود استفاده میکنید که Google Analytics در آن فعال نیست، میتوانید آن را در ... فعال کنید.
Firebase صفحه ادغامها در کنسول فایربیس .
مطمئن شوید که برنامه شما حداقل نسخههای مورد نیاز زیر را دارد:
- گریدل ۸.۰
- افزونه اندروید گریدل ۸.۱.۰
- افزونه Gradle سرویسهای گوگل نسخه ۴.۴.۱
مرحله 1 : Crashlytics SDK for NDK را به برنامه خود اضافه کنید
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً<project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle )، وابستگی مربوط به کتابخانه Crashlytics NDK برای اندروید را اضافه کنید. توصیه میکنیم برای کنترل نسخهبندی کتابخانه Firebase Android BoM استفاده کنید.برای یک تجربه بهینه با Crashlytics ، توصیه میکنیم Google Analytics در پروژه Firebase خود فعال کنید و Firebase SDK را برای Google Analytics به برنامه خود اضافه کنید.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.18.0")) // Add the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk") implementation("com.google.firebase:firebase-analytics") }
با استفاده از Firebase Android BoM ، برنامه شما همیشه از نسخههای سازگار کتابخانههای اندروید Firebase استفاده خواهد کرد.
(جایگزین) اضافه کردن وابستگیهای کتابخانه Firebase بدون استفاده از BoM
اگر تصمیم به استفاده از Firebase BoM ندارید، باید هر نسخه از کتابخانه Firebase را در خط وابستگی آن مشخص کنید.
توجه داشته باشید که اگر از چندین کتابخانه Firebase در برنامه خود استفاده میکنید، اکیداً توصیه میکنیم از BoM برای مدیریت نسخههای کتابخانه استفاده کنید، که تضمین میکند همه نسخهها سازگار هستند.
dependencies { // Add the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk:20.1.0") implementation("com.google.firebase:firebase-analytics:23.2.0") }
مرحله 2 : افزونه Crashlytics Gradle را به برنامه خود اضافه کنید
در فایل Gradle سطح ریشه (سطح پروژه) خود (
<project>/build.gradle.ktsیا<project>/build.gradle)، افزونه Crashlytics Gradle را به بلوکpluginsاضافه کنید:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.5.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.8" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.5.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.8' apply false }
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً
<project>/<app-module>/build.gradle.ktsیا<project>/<app-module>/build.gradle)، افزونه Crashlytics Gradle را اضافه کنید:Kotlin
plugins { id("com.android.application") // ... // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") }
Groovy
plugins { id 'com.android.application' // ... // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' }
مرحله ۳ : افزونه Crashlytics را به سیستم خود اضافه کنید
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً <project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle )، افزونه Crashlytics را پیکربندی کنید.
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled = true } } } }
Groovy
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled true } } } }
مرحله ۴ : تنظیم آپلود خودکار نمادهای بومی
برای تولید ردپاهای پشتهای خوانا از خرابیهای NDK، Crashlytics باید از نمادهای موجود در فایلهای باینری بومی شما مطلع باشد. افزونه Crashlytics Gradle شامل وظیفه uploadCrashlyticsSymbolFile BUILD_VARIANT برای خودکارسازی این فرآیند است.
برای اینکه بتوانید به وظیفه آپلود خودکار نمادها دسترسی داشته باشید، مطمئن شوید که
nativeSymbolUploadEnabledدر فایل Gradle ماژول (سطح برنامه) شما رویtrueتنظیم شده است.برای اینکه نام متدها در ردپاهای پشته شما ظاهر شوند، باید پس از هر بار ساخت کتابخانه NDK خود، صریحاً وظیفه
uploadCrashlyticsSymbolFile BUILD_VARIANTفراخوانی کنید. برای مثال:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
هم Crashlytics SDK برای NDK و هم افزونه Crashlytics Gradle به وجود شناسه ساخت GNU در اشیاء مشترک بومی بستگی دارند.
شما میتوانید با اجرای دستور زیر، وجود این شناسه را تأیید کنید.
readelf -nروی هر باینری قرار دهید. اگر شناسه ساخت وجود ندارد، اضافه کنیدبرای رفع مشکل -Wl,--build-id را به پرچمهای سیستم ساخت خود اضافه کنید.
مرحله ۵ : برای اتمام راهاندازی، یک کرش آزمایشی را اعمال کنید
برای تکمیل راهاندازی Crashlytics و مشاهده دادههای اولیه در داشبورد Crashlytics کنسول Firebase ، باید یک crash آزمایشی را اجباری کنید.
کدی را به برنامه خود اضافه کنید که بتوانید از آن برای ایجاد خطای تست استفاده کنید.
شما میتوانید با استفاده از کد زیر در
MainActivityبرنامه خود، دکمهای به برنامه خود اضافه کنید که با فشردن آن، برنامه از کار بیفتد (Crash). این دکمه با عنوان "Test Crash" نامگذاری شده است.Kotlin
val crashButton = Button(this) crashButton.text = "Test Crash" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
Java
Button crashButton = new Button(this); crashButton.setText("Test Crash"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
برنامه خود را بسازید و اجرا کنید.
برای ارسال اولین گزارش خرابی برنامهتان، تست کرش را اجباری کنید:
برنامه خود را از دستگاه آزمایشی یا شبیهساز خود باز کنید.
در برنامهتان، دکمهی «تست کرش» را که با استفاده از کد بالا اضافه کردهاید، فشار دهید.
پس از اینکه برنامه شما از کار افتاد، آن را مجدداً راهاندازی کنید تا برنامه شما بتواند گزارش خرابی را به Firebase ارسال کند.
در کنسول Firebase ، به داشبورد DevOps & Engagement > Crashlytics بروید تا گزارش خرابی تست خود را بررسی کنید.
اگر کنسول را رفرش کردهاید و هنوز بعد از پنج دقیقه خطای آزمایشی را مشاهده نمیکنید، گزارشگیری اشکالزدایی را فعال کنید تا ببینید آیا برنامه شما گزارشهای خرابی را ارسال میکند یا خیر.
و تمام! Crashlytics اکنون برنامه شما را برای خرابیها رصد میکند و میتوانید گزارشها و آمار خرابی را در داشبورد Crashlytics مشاهده و بررسی کنید.
مراحل بعدی
(توصیه میشود) با جمعآوری گزارشهای GWP-ASan ، در رفع اشکال خرابیهای ناشی از خطاهای حافظه بومی کمک بگیرید. این خطاهای مربوط به حافظه میتوانند با فساد حافظه در برنامه شما مرتبط باشند که علت اصلی آسیبپذیریهای امنیتی برنامه است. برای بهرهمندی از این ویژگی اشکالزدایی، مطمئن شوید که برنامه شما GWP-ASan را به صراحت فعال کرده و از جدیدترین Crashlytics SDK برای NDK (نسخه 18.3.6+ یا Firebase BoM نسخه 31.3.0+) استفاده میکند.
با افزودن گزارشهای اختیاری، گزارشهای لاگ، کلیدها و ردیابی خطاهای غیرمهلک ، تنظیمات گزارش خرابی خود را سفارشی کنید .
با Google Play ادغام شوید تا بتوانید گزارشهای خرابی برنامه اندروید خود را بر اساس مسیر Google Play مستقیماً در داشبورد Crashlytics فیلتر کنید. این به شما امکان میدهد داشبورد خود را بهتر روی نسخههای خاص متمرکز کنید.
عیبیابی
اگر ردپاهای پشتهای متفاوتی را در کنسول Firebase و logcat مشاهده میکنید، به راهنمای عیبیابی مراجعه کنید.
گزینههای جایگزین برای آپلود نمادها
گردش کار اصلی در این صفحه بالا برای بیلدهای استاندارد Gradle قابل استفاده است. با این حال، برخی از برنامهها از پیکربندی یا ابزار متفاوتی استفاده میکنند (برای مثال، فرآیند ساختی غیر از Gradle). در این شرایط، گزینههای زیر ممکن است برای آپلود موفقیتآمیز نمادها مفید باشند.
گزینه : بارگذاری نمادها برای ماژولهای کتابخانه و وابستگیهای خارجی
این گزینه میتواند در شرایط زیر مفید باشد:
- اگر از یک فرآیند ساخت NDK سفارشی در Gradle استفاده میکنید
- اگر کتابخانههای بومی شما در یک ماژول کتابخانه/ویژگی ساخته شدهاند یا توسط شخص ثالث ارائه شدهاند
- اگر آپلود خودکار نماد با شکست مواجه شد یا در داشبورد Crashlytics با کرشهای بدون نماد مواجه شدید
وظیفه استاندارد آپلود نماد Crashlytics فرض میکند که شما در حال ساخت کتابخانههای بومی خود به عنوان بخشی از ساخت Gradle ماژول برنامه خود، با استفاده از ابزارهای ساخت استاندارد NDK مانند CMake هستید.
با این حال، اگر از یک فرآیند ساخت NDK سفارشی در Gradle استفاده میکنید، یا کتابخانههای بومی شما در یک ماژول کتابخانه/ویژگی ساخته شدهاند یا توسط یک شخص ثالث ارائه شدهاند، ممکن است لازم باشد مسیر کتابخانههای unstripped شده خود را به صراحت مشخص کنید. برای انجام این کار، میتوانید ویژگی unstrippedNativeLibsDir را در افزونه Crashlytics در فایل ساخت Gradle خود اضافه کنید.
مطمئن شوید که وظایف اولیه زیر را از گردش کار اصلی که قبلاً در این صفحه آمده است، انجام دادهاید:
برای اینکه وظیفه آپلود خودکار نماد بتواند اطلاعات نماد شما را پیدا کند، موارد زیر را به فایل Gradle ماژول (سطح برنامه) خود اضافه کنید (معمولاً
<project>/<app-module>/build.gradle.ktsیا<project>/<app-module>/build.gradle):Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Groovy
// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
افزونهی Crashlytics به صورت بازگشتی در دایرکتوری مشخص شده به دنبال کتابخانههای بومی با پسوند
.soجستجو میکند. سپس Crashlytics نمادهای اشکالزدایی را از تمام این کتابخانهها استخراج کرده و آنها را در سرورهای Firebase آپلود میکند.آنچه میتوانید در ویژگی
unstrippedNativeLibsDirمشخص کنید، به شرح زیر است:هر آرگومانی که برای
org.gradle.api.Project#files(Object...)مجاز باشد، از جمله:java.lang.String،java.io.File، یاorg.gradle.api.file.FileCollectionچندین دایرکتوری برای یک نسخه ساخت واحد با ارائه یک لیست یا نمونه
FileCollection(با شروع از افزونه Crashlytics Gradle نسخه ۳.۰.۰) چندین دایرکتوری را در محصولات جداگانه جمعآوری کنید و flavorها را بسازید.
در نهایت، برای اتمام راهاندازی Crashlytics و مشاهده دادههای اولیه در داشبورد Crashlytics کنسول Firebase ، یک کرش آزمایشی را اعمال کنید .
گزینه : نمادهای مربوط به نسخههای غیر Gradle یا کتابخانههای بومیِ بدون محدودیت دسترسی را آپلود کنید
این گزینه میتواند در شرایط زیر مفید باشد:
اگر از فرآیند ساخت دیگری غیر از Gradle استفاده میکنید
اگر کتابخانههای بومیِ بدونِ حذفِ شما به نحوی در اختیارتان قرار گرفتهاند که در طول ساختهای Gradle قابل دسترسی نیستند
این گزینه مستلزم آن است که هنگام ایجاد یک نسخه آزمایشی یا هر نسخهای که میخواهید ردپاهای پشته نمادین آن را در کنسول Firebase مشاهده کنید، یک دستور Firebase CLI اجرا کنید.
مطمئن شوید که وظایف اولیه زیر را از گردش کار اصلی که قبلاً در این صفحه آمده است، انجام دادهاید:
Crashlytics SDK برای NDK و افزونه Crashlytics Gradle اضافه شد.
توجه داشته باشید که با این گزینه، نیازی به اضافه کردن افزونه
firebaseCrashlyticsیا تنظیم آپلود خودکار نمادها ندارید، زیرا در عوض از Firebase CLI (مراحل بعدی در زیر) برای تولید و آپلود فایلهای نماد خود استفاده خواهید کرد.محیط و پروژه خود را برای آپلود نماد تنظیم کنید:
برای نصب Firebase CLI دستورالعملها را دنبال کنید.
اگر قبلاً CLI را نصب کردهاید، حتماً آن را به آخرین نسخه بهروزرسانی کنید .
(فقط برای برنامههایی که از API اندروید سطح ۳۰+ استفاده میکنند) قالب
AndroidManifest.xmlبرنامه خود را بهروزرسانی کنید تا برچسبگذاری اشارهگر غیرفعال شود:کادر تنظیمات پخشکننده اندروید > تنظیمات انتشار > ساخت > مانیفست اصلی سفارشی را علامت بزنید.
قالب مانیفست واقع در
Assets/Plugins/Android/AndroidManifest.xmlرا باز کنید.ویژگی زیر را به تگ application اضافه کنید:
<application android:allowNativeHeapPointerTagging="false" ... />
پروژه خود را بسازید.
اطلاعات نمادهای خود را بارگذاری کنید.
پس از اتمام ساخت، یک فایل نماد سازگار Crashlytics ایجاد کنید و با اجرای دستور Firebase CLI زیر، آن را در سرورهای Firebase آپلود کنید:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : شناسه برنامه اندروید Firebase شما (نه نام بسته شما)
مثالی از شناسه برنامه اندروید فایربیس:1:567383003300:android:17104a2ced0c9b9bدر اینجا دو روش برای یافتن شناسه برنامه Firebase شما وجود دارد:
در فایل
google-services.jsonشما، شناسه برنامه شما مقدارmobilesdk_app_idاست؛ یادر کنسول Firebase ، به تنظیمات پروژه خود بروید. به کارت «برنامههای شما» بروید، سپس روی برنامه فایربیس مورد نظر کلیک کنید تا شناسه برنامه آن را پیدا کنید.
PATH/TO/SYMBOLS : مسیر فایل نماد تولید شده توسط رابط خط فرمان (CLI)
به یک پروژه اندروید استودیو صادر میشود - PATH/TO/SYMBOLS میتواند هر دایرکتوری باشد. رابط خط Firebase به صورت بازگشتی دایرکتوری مشخص شده را برای کتابخانههای بومی با پسوند
.soجستجو میکند.APK را مستقیماً از داخل Unity ساختید - PATH/TO/SYMBOLS مسیر فایل نماد فشرده شدهای است که پس از اتمام ساخت، در دایرکتوری ریشه پروژه ایجاد شده است (برای مثال:
myproject/myapp-1.0-v100.symbols.zip).
گزینههای پیشرفته برای استفاده از دستور Firebase CLI برای تولید و آپلود فایل نماد را مشاهده کنید
پرچم توضیحات --generator=csymبه جای مولد پیشفرض Breakpad، از مولد فایل نماد قدیمی cSYM استفاده میکند.
برای استفاده توصیه نمیشود. توصیه میکنیم از مولد فایل نماد پیشفرض Breakpad استفاده کنید.
--generator=breakpadاز مولد فایل نماد Breakpad استفاده میکند
توجه داشته باشید که پیشفرض برای تولید فایل نماد، Breakpad است. فقط در صورتی از این پرچم استفاده کنید که ... را اضافه کرده باشید.
symbolGenerator { csym() }در پیکربندی ساخت خود دارید و میخواهید آن را لغو کنید تا به جای آن از Breakpad استفاده کنید.--dry-runفایلهای نماد را تولید میکند اما آنها را آپلود نمیکند
این پرچم در صورتی مفید است که بخواهید محتوای فایلهای ارسالی را بررسی کنید.
--debugاطلاعات اشکالزدایی اضافی ارائه میدهد در نهایت، برای اتمام راهاندازی Crashlytics و مشاهده دادههای اولیه در داشبورد Crashlytics کنسول Firebase ، یک کرش آزمایشی را اعمال کنید .
بعد از اینکه برنامه خود را به عنوان بخشی از فرآیند جلوگیری از خرابی ساختید، حتماً دستور
crashlytics:symbols:uploadدر Firebase CLI را اجرا کنید تا فایل نماد خود را آپلود کنید.
،
| انتخاب پلتفرم: | iOS+ اندروید اندروید NDK فلاتر یونیتی |
اگر از کتابخانههای بومی در برنامه اندروید خود استفاده میکنید، میتوانید با چند بهروزرسانی کوچک در پیکربندی ساخت برنامه، ردیابی کامل پشته و گزارشهای خرابی دقیق را برای کد بومی خود از Firebase Crashlytics فعال کنید.
این راهنما نحوه پیکربندی گزارش خرابی با Firebase Crashlytics SDK برای NDK را شرح میدهد.
اگر به دنبال نحوه شروع کار با Crashlytics در پروژههای یونیتی خود هستید، راهنمای شروع به کار با یونیتی را بررسی کنید.
قبل از اینکه شروع کنی
اگر هنوز Firebase را به پروژه اندروید خود اضافه نکردهاید، آن را اضافه کنید. اگر برنامه اندروید ندارید، میتوانید یک برنامه نمونه را دانلود کنید.
توصیه میشود : برای اینکه گزارشهای breadcrumb به طور خودکار اقدامات کاربر را که منجر به خرابی، عدم موفقیت یا رویداد ANR میشود، درک کنند، باید Google Analytics در پروژه Firebase خود فعال کنید.
اگر در حال ایجاد یک پروژه جدید Firebase هستید، در طول فرآیند ایجاد پروژه، Google Analytics فعال کنید.
اگر از یک پروژه Firebase موجود استفاده میکنید که Google Analytics در آن فعال نیست، میتوانید آن را در ... فعال کنید.
Firebase صفحه ادغامها در کنسول فایربیس .
مطمئن شوید که برنامه شما حداقل نسخههای مورد نیاز زیر را دارد:
- گریدل ۸.۰
- افزونه اندروید گریدل ۸.۱.۰
- افزونه Gradle سرویسهای گوگل نسخه ۴.۴.۱
مرحله 1 : Crashlytics SDK for NDK را به برنامه خود اضافه کنید
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً<project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle )، وابستگی مربوط به کتابخانه Crashlytics NDK برای اندروید را اضافه کنید. توصیه میکنیم برای کنترل نسخهبندی کتابخانه Firebase Android BoM استفاده کنید.برای یک تجربه بهینه با Crashlytics ، توصیه میکنیم Google Analytics در پروژه Firebase خود فعال کنید و Firebase SDK را برای Google Analytics به برنامه خود اضافه کنید.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.18.0")) // Add the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk") implementation("com.google.firebase:firebase-analytics") }
با استفاده از Firebase Android BoM ، برنامه شما همیشه از نسخههای سازگار کتابخانههای اندروید Firebase استفاده خواهد کرد.
(جایگزین) اضافه کردن وابستگیهای کتابخانه Firebase بدون استفاده از BoM
اگر تصمیم به استفاده از Firebase BoM ندارید، باید هر نسخه از کتابخانه Firebase را در خط وابستگی آن مشخص کنید.
توجه داشته باشید که اگر از چندین کتابخانه Firebase در برنامه خود استفاده میکنید، اکیداً توصیه میکنیم از BoM برای مدیریت نسخههای کتابخانه استفاده کنید، که تضمین میکند همه نسخهها سازگار هستند.
dependencies { // Add the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk:20.1.0") implementation("com.google.firebase:firebase-analytics:23.2.0") }
مرحله 2 : افزونه Crashlytics Gradle را به برنامه خود اضافه کنید
در فایل Gradle سطح ریشه (سطح پروژه) خود (
<project>/build.gradle.ktsیا<project>/build.gradle)، افزونه Crashlytics Gradle را به بلوکpluginsاضافه کنید:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.5.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.8" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.5.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.8' apply false }
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً
<project>/<app-module>/build.gradle.ktsیا<project>/<app-module>/build.gradle)، افزونه Crashlytics Gradle را اضافه کنید:Kotlin
plugins { id("com.android.application") // ... // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") }
Groovy
plugins { id 'com.android.application' // ... // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' }
مرحله ۳ : افزونه Crashlytics را به سیستم خود اضافه کنید
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً <project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle )، افزونه Crashlytics را پیکربندی کنید.
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled = true } } } }
Groovy
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled true } } } }
مرحله ۴ : تنظیم آپلود خودکار نمادهای بومی
برای تولید ردپاهای پشتهای خوانا از خرابیهای NDK، Crashlytics باید از نمادهای موجود در فایلهای باینری بومی شما مطلع باشد. افزونه Crashlytics Gradle شامل وظیفه uploadCrashlyticsSymbolFile BUILD_VARIANT برای خودکارسازی این فرآیند است.
برای اینکه بتوانید به وظیفه آپلود خودکار نمادها دسترسی داشته باشید، مطمئن شوید که
nativeSymbolUploadEnabledدر فایل Gradle ماژول (سطح برنامه) شما رویtrueتنظیم شده است.برای اینکه نام متدها در ردپاهای پشته شما ظاهر شوند، باید پس از هر بار ساخت کتابخانه NDK خود، صریحاً وظیفه
uploadCrashlyticsSymbolFile BUILD_VARIANTفراخوانی کنید. برای مثال:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
هم Crashlytics SDK برای NDK و هم افزونه Crashlytics Gradle به وجود شناسه ساخت GNU در اشیاء مشترک بومی بستگی دارند.
شما میتوانید با اجرای دستور زیر، وجود این شناسه را تأیید کنید.
readelf -nروی هر باینری قرار دهید. اگر شناسه ساخت وجود ندارد، اضافه کنیدبرای رفع مشکل -Wl,--build-id را به پرچمهای سیستم ساخت خود اضافه کنید.
مرحله ۵ : برای اتمام راهاندازی، یک کرش آزمایشی را اعمال کنید
برای تکمیل راهاندازی Crashlytics و مشاهده دادههای اولیه در داشبورد Crashlytics کنسول Firebase ، باید یک crash آزمایشی را اجباری کنید.
کدی را به برنامه خود اضافه کنید که بتوانید از آن برای ایجاد خطای تست استفاده کنید.
شما میتوانید با استفاده از کد زیر در
MainActivityبرنامه خود، دکمهای به برنامه خود اضافه کنید که با فشردن آن، برنامه از کار بیفتد (Crash). این دکمه با عنوان "Test Crash" نامگذاری شده است.Kotlin
val crashButton = Button(this) crashButton.text = "Test Crash" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
Java
Button crashButton = new Button(this); crashButton.setText("Test Crash"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
برنامه خود را بسازید و اجرا کنید.
برای ارسال اولین گزارش خرابی برنامهتان، تست کرش را اجباری کنید:
برنامه خود را از دستگاه آزمایشی یا شبیهساز خود باز کنید.
در برنامهتان، دکمهی «تست کرش» را که با استفاده از کد بالا اضافه کردهاید، فشار دهید.
پس از اینکه برنامه شما از کار افتاد، آن را مجدداً راهاندازی کنید تا برنامه شما بتواند گزارش خرابی را به Firebase ارسال کند.
در کنسول Firebase ، به داشبورد DevOps & Engagement > Crashlytics بروید تا گزارش خرابی تست خود را بررسی کنید.
اگر کنسول را رفرش کردهاید و هنوز بعد از پنج دقیقه خطای آزمایشی را مشاهده نمیکنید، گزارشگیری اشکالزدایی را فعال کنید تا ببینید آیا برنامه شما گزارشهای خرابی را ارسال میکند یا خیر.
و تمام! Crashlytics اکنون برنامه شما را برای خرابیها رصد میکند و میتوانید گزارشها و آمار خرابی را در داشبورد Crashlytics مشاهده و بررسی کنید.
مراحل بعدی
(توصیه میشود) با جمعآوری گزارشهای GWP-ASan ، در رفع اشکال خرابیهای ناشی از خطاهای حافظه بومی کمک بگیرید. این خطاهای مربوط به حافظه میتوانند با فساد حافظه در برنامه شما مرتبط باشند که علت اصلی آسیبپذیریهای امنیتی برنامه است. برای بهرهمندی از این ویژگی اشکالزدایی، مطمئن شوید که برنامه شما GWP-ASan را به صراحت فعال کرده و از جدیدترین Crashlytics SDK برای NDK (نسخه 18.3.6+ یا Firebase BoM نسخه 31.3.0+) استفاده میکند.
با افزودن گزارشهای اختیاری، گزارشهای لاگ، کلیدها و ردیابی خطاهای غیرمهلک ، تنظیمات گزارش خرابی خود را سفارشی کنید .
با Google Play ادغام شوید تا بتوانید گزارشهای خرابی برنامه اندروید خود را بر اساس مسیر Google Play مستقیماً در داشبورد Crashlytics فیلتر کنید. این به شما امکان میدهد داشبورد خود را بهتر روی نسخههای خاص متمرکز کنید.
عیبیابی
اگر ردپاهای پشتهای متفاوتی را در کنسول Firebase و logcat مشاهده میکنید، به راهنمای عیبیابی مراجعه کنید.
گزینههای جایگزین برای آپلود نمادها
گردش کار اصلی در این صفحه بالا برای بیلدهای استاندارد Gradle قابل استفاده است. با این حال، برخی از برنامهها از پیکربندی یا ابزار متفاوتی استفاده میکنند (برای مثال، فرآیند ساختی غیر از Gradle). در این شرایط، گزینههای زیر ممکن است برای آپلود موفقیتآمیز نمادها مفید باشند.
گزینه : بارگذاری نمادها برای ماژولهای کتابخانه و وابستگیهای خارجی
این گزینه میتواند در شرایط زیر مفید باشد:
- اگر از یک فرآیند ساخت NDK سفارشی در Gradle استفاده میکنید
- اگر کتابخانههای بومی شما در یک ماژول کتابخانه/ویژگی ساخته شدهاند یا توسط شخص ثالث ارائه شدهاند
- اگر آپلود خودکار نماد با شکست مواجه شد یا در داشبورد Crashlytics با کرشهای بدون نماد مواجه شدید
وظیفه استاندارد آپلود نماد Crashlytics فرض میکند که شما در حال ساخت کتابخانههای بومی خود به عنوان بخشی از ساخت Gradle ماژول برنامه خود، با استفاده از ابزارهای ساخت استاندارد NDK مانند CMake هستید.
با این حال، اگر از یک فرآیند ساخت NDK سفارشی در Gradle استفاده میکنید، یا کتابخانههای بومی شما در یک ماژول کتابخانه/ویژگی ساخته شدهاند یا توسط یک شخص ثالث ارائه شدهاند، ممکن است لازم باشد مسیر کتابخانههای unstripped شده خود را به صراحت مشخص کنید. برای انجام این کار، میتوانید ویژگی unstrippedNativeLibsDir را در افزونه Crashlytics در فایل ساخت Gradle خود اضافه کنید.
مطمئن شوید که وظایف اولیه زیر را از گردش کار اصلی که قبلاً در این صفحه آمده است، انجام دادهاید:
برای اینکه وظیفه آپلود خودکار نماد بتواند اطلاعات نماد شما را پیدا کند، موارد زیر را به فایل Gradle ماژول (سطح برنامه) خود اضافه کنید (معمولاً
<project>/<app-module>/build.gradle.ktsیا<project>/<app-module>/build.gradle):Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Groovy
// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
افزونهی Crashlytics به صورت بازگشتی در دایرکتوری مشخص شده به دنبال کتابخانههای بومی با پسوند
.soجستجو میکند. سپس Crashlytics نمادهای اشکالزدایی را از تمام این کتابخانهها استخراج کرده و آنها را در سرورهای Firebase آپلود میکند.آنچه میتوانید در ویژگی
unstrippedNativeLibsDirمشخص کنید، به شرح زیر است:هر آرگومانی که برای
org.gradle.api.Project#files(Object...)مجاز باشد، از جمله:java.lang.String،java.io.File، یاorg.gradle.api.file.FileCollectionچندین دایرکتوری برای یک نسخه ساخت واحد با ارائه یک لیست یا نمونه
FileCollection(با شروع از افزونه Crashlytics Gradle نسخه ۳.۰.۰) چندین دایرکتوری را در محصولات جداگانه جمعآوری کنید و flavorها را بسازید.
در نهایت، برای اتمام راهاندازی Crashlytics و مشاهده دادههای اولیه در داشبورد Crashlytics کنسول Firebase ، یک کرش آزمایشی را اعمال کنید .
گزینه : نمادهای مربوط به نسخههای غیر Gradle یا کتابخانههای بومیِ بدون محدودیت دسترسی را آپلود کنید
این گزینه میتواند در شرایط زیر مفید باشد:
اگر از فرآیند ساخت دیگری غیر از Gradle استفاده میکنید
اگر کتابخانههای بومیِ بدونِ حذفِ شما به نحوی در اختیارتان قرار گرفتهاند که در طول ساختهای Gradle قابل دسترسی نیستند
این گزینه مستلزم آن است که هنگام ایجاد یک نسخه آزمایشی یا هر نسخهای که میخواهید ردپاهای پشته نمادین آن را در کنسول Firebase مشاهده کنید، یک دستور Firebase CLI اجرا کنید.
مطمئن شوید که وظایف اولیه زیر را از گردش کار اصلی که قبلاً در این صفحه آمده است، انجام دادهاید:
Crashlytics SDK برای NDK و افزونه Crashlytics Gradle اضافه شد.
توجه داشته باشید که با این گزینه، نیازی به اضافه کردن افزونه
firebaseCrashlyticsیا تنظیم آپلود خودکار نمادها ندارید، زیرا در عوض از Firebase CLI (مراحل بعدی در زیر) برای تولید و آپلود فایلهای نماد خود استفاده خواهید کرد.محیط و پروژه خود را برای آپلود نماد تنظیم کنید:
برای نصب Firebase CLI دستورالعملها را دنبال کنید.
اگر قبلاً CLI را نصب کردهاید، حتماً آن را به آخرین نسخه بهروزرسانی کنید .
(فقط برای برنامههایی که از API اندروید سطح ۳۰+ استفاده میکنند) قالب
AndroidManifest.xmlبرنامه خود را بهروزرسانی کنید تا برچسبگذاری اشارهگر غیرفعال شود:کادر تنظیمات پخشکننده اندروید > تنظیمات انتشار > ساخت > مانیفست اصلی سفارشی را علامت بزنید.
قالب مانیفست واقع در
Assets/Plugins/Android/AndroidManifest.xmlرا باز کنید.ویژگی زیر را به تگ application اضافه کنید:
<application android:allowNativeHeapPointerTagging="false" ... />
پروژه خود را بسازید.
اطلاعات نمادهای خود را بارگذاری کنید.
پس از اتمام ساخت، یک فایل نماد سازگار Crashlytics ایجاد کنید و با اجرای دستور Firebase CLI زیر، آن را در سرورهای Firebase آپلود کنید:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : شناسه برنامه اندروید Firebase شما (نه نام بسته شما)
مثالی از شناسه برنامه اندروید فایربیس:1:567383003300:android:17104a2ced0c9b9bدر اینجا دو روش برای یافتن شناسه برنامه Firebase شما وجود دارد:
در فایل
google-services.jsonشما، شناسه برنامه شما مقدارmobilesdk_app_idاست؛ یادر کنسول Firebase ، به تنظیمات پروژه خود بروید. به کارت «برنامههای شما» بروید، سپس روی برنامه فایربیس مورد نظر کلیک کنید تا شناسه برنامه آن را پیدا کنید.
PATH/TO/SYMBOLS : مسیر فایل نماد تولید شده توسط رابط خط فرمان (CLI)
به یک پروژه اندروید استودیو صادر میشود - PATH/TO/SYMBOLS میتواند هر دایرکتوری باشد. رابط خط Firebase به صورت بازگشتی دایرکتوری مشخص شده را برای کتابخانههای بومی با پسوند
.soجستجو میکند.APK را مستقیماً از داخل Unity ساختید - PATH/TO/SYMBOLS مسیر فایل نماد فشرده شدهای است که پس از اتمام ساخت، در دایرکتوری ریشه پروژه ایجاد شده است (برای مثال:
myproject/myapp-1.0-v100.symbols.zip).
گزینههای پیشرفته برای استفاده از دستور Firebase CLI برای تولید و آپلود فایل نماد را مشاهده کنید
پرچم توضیحات --generator=csymبه جای مولد پیشفرض Breakpad، از مولد فایل نماد قدیمی cSYM استفاده میکند.
برای استفاده توصیه نمیشود. توصیه میکنیم از مولد فایل نماد پیشفرض Breakpad استفاده کنید.
--generator=breakpadاز مولد فایل نماد Breakpad استفاده میکند
توجه داشته باشید که پیشفرض برای تولید فایل نماد، Breakpad است. فقط در صورتی از این پرچم استفاده کنید که ... را اضافه کرده باشید.
symbolGenerator { csym() }در پیکربندی ساخت خود دارید و میخواهید آن را لغو کنید تا به جای آن از Breakpad استفاده کنید.--dry-runفایلهای نماد را تولید میکند اما آنها را آپلود نمیکند
این پرچم در صورتی مفید است که بخواهید محتوای فایلهای ارسالی را بررسی کنید.
--debugاطلاعات اشکالزدایی اضافی ارائه میدهد در نهایت، برای اتمام راهاندازی Crashlytics و مشاهده دادههای اولیه در داشبورد Crashlytics کنسول Firebase ، یک کرش آزمایشی را اعمال کنید .
بعد از اینکه برنامه خود را به عنوان بخشی از فرآیند جلوگیری از خرابی ساختید، حتماً دستور
crashlytics:symbols:uploadدر Firebase CLI را اجرا کنید تا فایل نماد خود را آپلود کنید.
،
| انتخاب پلتفرم: | iOS+ اندروید اندروید NDK فلاتر یونیتی |
اگر از کتابخانههای بومی در برنامه اندروید خود استفاده میکنید، میتوانید با چند بهروزرسانی کوچک در پیکربندی ساخت برنامه، ردیابی کامل پشته و گزارشهای خرابی دقیق را برای کد بومی خود از Firebase Crashlytics فعال کنید.
این راهنما نحوه پیکربندی گزارش خرابی با Firebase Crashlytics SDK برای NDK را شرح میدهد.
اگر به دنبال نحوه شروع کار با Crashlytics در پروژههای یونیتی خود هستید، راهنمای شروع به کار با یونیتی را بررسی کنید.
قبل از اینکه شروع کنی
اگر هنوز Firebase را به پروژه اندروید خود اضافه نکردهاید، آن را اضافه کنید. اگر برنامه اندروید ندارید، میتوانید یک برنامه نمونه را دانلود کنید.
توصیه میشود : برای اینکه گزارشهای breadcrumb به طور خودکار اقدامات کاربر را که منجر به خرابی، عدم موفقیت یا رویداد ANR میشود، درک کنند، باید Google Analytics در پروژه Firebase خود فعال کنید.
اگر در حال ایجاد یک پروژه جدید Firebase هستید، در طول فرآیند ایجاد پروژه، Google Analytics فعال کنید.
اگر از یک پروژه Firebase موجود استفاده میکنید که Google Analytics در آن فعال نیست، میتوانید آن را در ... فعال کنید.
Firebase صفحه ادغامها در کنسول فایربیس .
مطمئن شوید که برنامه شما حداقل نسخههای مورد نیاز زیر را دارد:
- گریدل ۸.۰
- افزونه اندروید گریدل ۸.۱.۰
- افزونه Gradle سرویسهای گوگل نسخه ۴.۴.۱
مرحله 1 : Crashlytics SDK for NDK را به برنامه خود اضافه کنید
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً<project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle )، وابستگی مربوط به کتابخانه Crashlytics NDK برای اندروید را اضافه کنید. توصیه میکنیم برای کنترل نسخهبندی کتابخانه Firebase Android BoM استفاده کنید.برای یک تجربه بهینه با Crashlytics ، توصیه میکنیم Google Analytics در پروژه Firebase خود فعال کنید و Firebase SDK را برای Google Analytics به برنامه خود اضافه کنید.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.18.0")) // Add the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk") implementation("com.google.firebase:firebase-analytics") }
با استفاده از Firebase Android BoM ، برنامه شما همیشه از نسخههای سازگار کتابخانههای اندروید Firebase استفاده خواهد کرد.
(جایگزین) اضافه کردن وابستگیهای کتابخانه Firebase بدون استفاده از BoM
اگر تصمیم به استفاده از Firebase BoM ندارید، باید هر نسخه از کتابخانه Firebase را در خط وابستگی آن مشخص کنید.
توجه داشته باشید که اگر از چندین کتابخانه Firebase در برنامه خود استفاده میکنید، اکیداً توصیه میکنیم از BoM برای مدیریت نسخههای کتابخانه استفاده کنید، که تضمین میکند همه نسخهها سازگار هستند.
dependencies { // Add the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk:20.1.0") implementation("com.google.firebase:firebase-analytics:23.2.0") }
مرحله 2 : افزونه Crashlytics Gradle را به برنامه خود اضافه کنید
در فایل Gradle سطح ریشه (سطح پروژه) خود (
<project>/build.gradle.ktsیا<project>/build.gradle)، افزونه Crashlytics Gradle را به بلوکpluginsاضافه کنید:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.5.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.8" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.5.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.8' apply false }
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً
<project>/<app-module>/build.gradle.ktsیا<project>/<app-module>/build.gradle)، افزونه Crashlytics Gradle را اضافه کنید:Kotlin
plugins { id("com.android.application") // ... // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") }
Groovy
plugins { id 'com.android.application' // ... // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' }
مرحله ۳ : افزونه Crashlytics را به سیستم خود اضافه کنید
در فایل Gradle ماژول (سطح برنامه) خود (معمولاً <project>/<app-module>/build.gradle.kts یا <project>/<app-module>/build.gradle )، افزونه Crashlytics را پیکربندی کنید.
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled = true } } } }
Groovy
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled true } } } }
مرحله ۴ : تنظیم آپلود خودکار نمادهای بومی
برای تولید ردپاهای پشتهای خوانا از خرابیهای NDK، Crashlytics باید از نمادهای موجود در فایلهای باینری بومی شما مطلع باشد. افزونه Crashlytics Gradle شامل وظیفه uploadCrashlyticsSymbolFile BUILD_VARIANT برای خودکارسازی این فرآیند است.
برای اینکه بتوانید به وظیفه آپلود خودکار نمادها دسترسی داشته باشید، مطمئن شوید که
nativeSymbolUploadEnabledدر فایل Gradle ماژول (سطح برنامه) شما رویtrueتنظیم شده است.برای اینکه نام متدها در ردپاهای پشته شما ظاهر شوند، باید پس از هر بار ساخت کتابخانه NDK خود، صریحاً وظیفه
uploadCrashlyticsSymbolFile BUILD_VARIANTفراخوانی کنید. برای مثال:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
هم Crashlytics SDK برای NDK و هم افزونه Crashlytics Gradle به وجود شناسه ساخت GNU در اشیاء مشترک بومی بستگی دارند.
شما میتوانید با اجرای دستور زیر، وجود این شناسه را تأیید کنید.
readelf -nروی هر باینری قرار دهید. اگر شناسه ساخت وجود ندارد، اضافه کنیدبرای رفع مشکل -Wl,--build-id را به پرچمهای سیستم ساخت خود اضافه کنید.
مرحله ۵ : برای اتمام راهاندازی، یک کرش آزمایشی را اعمال کنید
برای تکمیل راهاندازی Crashlytics و مشاهده دادههای اولیه در داشبورد Crashlytics کنسول Firebase ، باید یک crash آزمایشی را اجباری کنید.
کدی را به برنامه خود اضافه کنید که بتوانید از آن برای ایجاد خطای تست استفاده کنید.
شما میتوانید با استفاده از کد زیر در
MainActivityبرنامه خود، دکمهای به برنامه خود اضافه کنید که با فشردن آن، برنامه از کار بیفتد (Crash). این دکمه با عنوان "Test Crash" نامگذاری شده است.Kotlin
val crashButton = Button(this) crashButton.text = "Test Crash" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
Java
Button crashButton = new Button(this); crashButton.setText("Test Crash"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
برنامه خود را بسازید و اجرا کنید.
برای ارسال اولین گزارش خرابی برنامهتان، تست کرش را اجباری کنید:
برنامه خود را از دستگاه آزمایشی یا شبیهساز خود باز کنید.
در برنامهتان، دکمهی «تست کرش» را که با استفاده از کد بالا اضافه کردهاید، فشار دهید.
پس از اینکه برنامه شما از کار افتاد، آن را مجدداً راهاندازی کنید تا برنامه شما بتواند گزارش خرابی را به Firebase ارسال کند.
در کنسول Firebase ، به داشبورد DevOps & Engagement > Crashlytics بروید تا گزارش خرابی تست خود را بررسی کنید.
اگر کنسول را رفرش کردهاید و هنوز بعد از پنج دقیقه خطای آزمایشی را مشاهده نمیکنید، گزارشگیری اشکالزدایی را فعال کنید تا ببینید آیا برنامه شما گزارشهای خرابی را ارسال میکند یا خیر.
و تمام! Crashlytics اکنون برنامه شما را برای خرابیها رصد میکند و میتوانید گزارشها و آمار خرابی را در داشبورد Crashlytics مشاهده و بررسی کنید.
مراحل بعدی
(توصیه میشود) با جمعآوری گزارشهای GWP-ASan ، در رفع اشکال خرابیهای ناشی از خطاهای حافظه بومی کمک بگیرید. این خطاهای مربوط به حافظه میتوانند با فساد حافظه در برنامه شما مرتبط باشند که علت اصلی آسیبپذیریهای امنیتی برنامه است. برای بهرهمندی از این ویژگی اشکالزدایی، مطمئن شوید که برنامه شما GWP-ASan را به صراحت فعال کرده و از جدیدترین Crashlytics SDK برای NDK (نسخه 18.3.6+ یا Firebase BoM نسخه 31.3.0+) استفاده میکند.
با افزودن گزارشهای اختیاری، گزارشهای لاگ، کلیدها و ردیابی خطاهای غیرمهلک ، تنظیمات گزارش خرابی خود را سفارشی کنید .
با Google Play ادغام شوید تا بتوانید گزارشهای خرابی برنامه اندروید خود را بر اساس مسیر Google Play مستقیماً در داشبورد Crashlytics فیلتر کنید. این به شما امکان میدهد داشبورد خود را بهتر روی نسخههای خاص متمرکز کنید.
عیبیابی
اگر ردپاهای پشتهای متفاوتی را در کنسول Firebase و logcat مشاهده میکنید، به راهنمای عیبیابی مراجعه کنید.
گزینههای جایگزین برای آپلود نمادها
گردش کار اصلی در این صفحه بالا برای بیلدهای استاندارد Gradle قابل استفاده است. با این حال، برخی از برنامهها از پیکربندی یا ابزار متفاوتی استفاده میکنند (برای مثال، فرآیند ساختی غیر از Gradle). در این شرایط، گزینههای زیر ممکن است برای آپلود موفقیتآمیز نمادها مفید باشند.
گزینه : بارگذاری نمادها برای ماژولهای کتابخانه و وابستگیهای خارجی
این گزینه میتواند در شرایط زیر مفید باشد:
- اگر از یک فرآیند ساخت NDK سفارشی در Gradle استفاده میکنید
- اگر کتابخانههای بومی شما در یک ماژول کتابخانه/ویژگی ساخته شدهاند یا توسط شخص ثالث ارائه شدهاند
- اگر آپلود خودکار نماد با شکست مواجه شد یا در داشبورد Crashlytics با کرشهای بدون نماد مواجه شدید
وظیفه استاندارد آپلود نماد Crashlytics فرض میکند که شما در حال ساخت کتابخانههای بومی خود به عنوان بخشی از ساخت Gradle ماژول برنامه خود، با استفاده از ابزارهای ساخت استاندارد NDK مانند CMake هستید.
با این حال، اگر از یک فرآیند ساخت NDK سفارشی در Gradle استفاده میکنید، یا کتابخانههای بومی شما در یک ماژول کتابخانه/ویژگی ساخته شدهاند یا توسط یک شخص ثالث ارائه شدهاند، ممکن است لازم باشد مسیر کتابخانههای unstripped شده خود را به صراحت مشخص کنید. برای انجام این کار، میتوانید ویژگی unstrippedNativeLibsDir را در افزونه Crashlytics در فایل ساخت Gradle خود اضافه کنید.
مطمئن شوید که وظایف اولیه زیر را از گردش کار اصلی که قبلاً در این صفحه آمده است، انجام دادهاید:
برای اینکه وظیفه آپلود خودکار نماد بتواند اطلاعات نماد شما را پیدا کند، موارد زیر را به فایل Gradle ماژول (سطح برنامه) خود اضافه کنید (معمولاً
<project>/<app-module>/build.gradle.ktsیا<project>/<app-module>/build.gradle):Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Groovy
// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
افزونهی Crashlytics به صورت بازگشتی در دایرکتوری مشخص شده به دنبال کتابخانههای بومی با پسوند
.soجستجو میکند. سپس Crashlytics نمادهای اشکالزدایی را از تمام این کتابخانهها استخراج کرده و آنها را در سرورهای Firebase آپلود میکند.آنچه میتوانید در ویژگی
unstrippedNativeLibsDirمشخص کنید، به شرح زیر است:هر آرگومانی که برای
org.gradle.api.Project#files(Object...)مجاز باشد، از جمله:java.lang.String،java.io.File، یاorg.gradle.api.file.FileCollectionچندین دایرکتوری برای یک نسخه ساخت واحد با ارائه یک لیست یا نمونه
FileCollection(با شروع از افزونه Crashlytics Gradle نسخه ۳.۰.۰) چندین دایرکتوری را در محصولات جداگانه جمعآوری کنید و flavorها را بسازید.
در نهایت، برای اتمام راهاندازی Crashlytics و مشاهده دادههای اولیه در داشبورد Crashlytics کنسول Firebase ، یک کرش آزمایشی را اعمال کنید .
گزینه : نمادهای مربوط به نسخههای غیر Gradle یا کتابخانههای بومیِ بدون محدودیت دسترسی را آپلود کنید
This option can be helpful in the following situations:
If you use a build process other than Gradle
If your unstripped native libraries are provided to you in some way that they're not accessible during Gradle builds
This option requires that you run a Firebase CLI command when you create a release build or any build for which you want to see symbolicated stack traces in the Firebase console.
Make sure that you've completed the following initial tasks from the main workflow earlier on this page:
Added the Crashlytics SDK for NDK and the Crashlytics Gradle plugin .
Note that with this option, you don't need to add the
firebaseCrashlyticsextension or set up automatic symbol uploading because you'll instead use the Firebase CLI (next steps below) to generate and upload your symbol files.Set up your environment and project for symbol uploading:
Follow the instructions to install the Firebase CLI .
If you've already installed the CLI, make sure to update to its latest version .
(only for apps using Android API level 30+) Update your app's
AndroidManifest.xmltemplate to disable Pointer Tagging:Check the box for Android Player Settings > Publishing Settings > Build > Custom Main Manifest .
Open the manifest template located at
Assets/Plugins/Android/AndroidManifest.xml.Add the following attribute to the application tag:
<application android:allowNativeHeapPointerTagging="false" ... />
Build your project.
Upload your symbols information.
Once your build has finished, generate a Crashlytics -compatible symbol file and upload it to Firebase servers by running the following Firebase CLI command:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : Your Firebase Android App ID (not your package name)
Example Firebase Android App ID:1:567383003300:android:17104a2ced0c9b9bHere are two ways to find your Firebase App ID:
In your
google-services.jsonfile, your App ID is themobilesdk_app_idvalue; orIn the Firebase console, go to your Project settings . Go to the Your apps card, then click the intended Firebase App to find its App ID.
PATH/TO/SYMBOLS : The path to the symbol file generated by the CLI
Exported to an Android Studio project — PATH/TO/SYMBOLS can be any directory. The Firebase CLI will recursively search the specified directory for native libraries with a
.soextension.Built the APK directly from within Unity — PATH/TO/SYMBOLS is the path of the zipped symbol file generated in the project root directory when your build finished (for example:
myproject/myapp-1.0-v100.symbols.zip).
View advanced options for using the Firebase CLI command for symbol file generation and upload
پرچم توضیحات --generator=csymUses the legacy cSYM symbol file generator instead of the default Breakpad generator
Not recommended for use. We recommend using the default Breakpad symbol file generator.
--generator=breakpadUses the Breakpad symbol file generator
Note that the default for symbol file generation is Breakpad. Only use this flag if you've added
symbolGenerator { csym() }in your build configuration and you want to override it to use Breakpad instead.--dry-runGenerates the symbol files but does not upload them
This flag is useful if you want to inspect the content of the files that are sent.
--debugProvides additional debugging information Finally, force a test crash to finish setting up Crashlytics and to see initial data in the Crashlytics dashboard of the Firebase console.
After you build your app as part of forcing a crash, make sure to run the Firebase CLI
crashlytics:symbols:uploadcommand to upload your symbol file.
،
| انتخاب پلتفرم: | iOS+ Android Android NDK Flutter Unity |
If you use native libraries in your Android app, you can enable full stack traces and detailed crash reports for your native code from Firebase Crashlytics with a few small updates to your app's build configuration.
This guide describes how to configure crash reporting with the Firebase Crashlytics SDK for NDK.
If you're looking for how to get started with Crashlytics in your Unity projects, check out the Unity Getting Started guide .
قبل از اینکه شروع کنی
If you haven't already, add Firebase to your Android project. If you don't have an Android app, you can download a sample app .
Recommended : To automatically get breadcrumb logs to understand user actions leading up to a crash, non-fatal, or ANR event, you need to enable Google Analytics in your Firebase project.
If you're creating a new Firebase project, enable Google Analytics during the project creation workflow.
If you're using an existing Firebase project that doesn't have Google Analytics enabled, you can enable it in the
Firebase صفحه ادغامها در کنسول فایربیس .
Make sure your app has the following minimum required versions:
- Gradle 8.0
- Android Gradle plugin 8.1.0
- Google services Gradle plugin 4.4.1
Step 1 : Add the Crashlytics SDK for NDK to your app
In your module (app-level) Gradle file (usually<project>/<app-module>/build.gradle.kts or <project>/<app-module>/build.gradle ), add the dependency for the Crashlytics NDK library for Android. We recommend using the Firebase Android BoM to control library versioning.For an optimal experience with Crashlytics , we recommend enabling Google Analytics in your Firebase project and adding the Firebase SDK for Google Analytics to your app.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.18.0")) // Add the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk") implementation("com.google.firebase:firebase-analytics") }
با استفاده از Firebase Android BoM ، برنامه شما همیشه از نسخههای سازگار کتابخانههای اندروید Firebase استفاده خواهد کرد.
(جایگزین) اضافه کردن وابستگیهای کتابخانه Firebase بدون استفاده از BoM
اگر تصمیم به استفاده از Firebase BoM ندارید، باید هر نسخه از کتابخانه Firebase را در خط وابستگی آن مشخص کنید.
توجه داشته باشید که اگر از چندین کتابخانه Firebase در برنامه خود استفاده میکنید، اکیداً توصیه میکنیم از BoM برای مدیریت نسخههای کتابخانه استفاده کنید، که تضمین میکند همه نسخهها سازگار هستند.
dependencies { // Add the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk:20.1.0") implementation("com.google.firebase:firebase-analytics:23.2.0") }
Step 2 : Add the Crashlytics Gradle plugin to your app
In your root-level (project-level) Gradle file (
<project>/build.gradle.ktsor<project>/build.gradle), add the Crashlytics Gradle plugin to thepluginsblock:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.5.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.8" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.5.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.8' apply false }
In your module (app-level) Gradle file (usually
<project>/<app-module>/build.gradle.ktsor<project>/<app-module>/build.gradle), add the Crashlytics Gradle plugin:Kotlin
plugins { id("com.android.application") // ... // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") }
Groovy
plugins { id 'com.android.application' // ... // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' }
Step 3 : Add the Crashlytics extension to your build
In your module (app-level) Gradle file (usually <project>/<app-module>/build.gradle.kts or <project>/<app-module>/build.gradle ), configure the Crashlytics extension.
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled = true } } } }
Groovy
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled true } } } }
Step 4 : Set up automatic uploading of native symbols
To produce readable stack traces from NDK crashes, Crashlytics needs to know about the symbols in your native binaries. The Crashlytics Gradle plugin includes the uploadCrashlyticsSymbolFile BUILD_VARIANT task to automate this process.
So that you can access the task for automated symbol uploading, make sure that
nativeSymbolUploadEnabledis set totruein your module (app-level) Gradle file.For method names to appear in your stack traces, you must explicitly invoke the
uploadCrashlyticsSymbolFile BUILD_VARIANTtask after each build of your NDK library. For example:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
Both the Crashlytics SDK for NDK and the Crashlytics Gradle plugin depend on the presence of the GNU build ID within the native shared objects.
You can verify the presence of this ID by running
readelf -non each binary. If the build ID is absent, add-Wl,--build-idto your build system's flags to fix the problem.
Step 5 : Force a test crash to finish setup
To finish setting up Crashlytics and see initial data in the Crashlytics dashboard of the Firebase console, you need to force a test crash.
کدی را به برنامه خود اضافه کنید که بتوانید از آن برای ایجاد خطای تست استفاده کنید.
شما میتوانید با استفاده از کد زیر در
MainActivityبرنامه خود، دکمهای به برنامه خود اضافه کنید که با فشردن آن، برنامه از کار بیفتد (Crash). این دکمه با عنوان "Test Crash" نامگذاری شده است.Kotlin
val crashButton = Button(this) crashButton.text = "Test Crash" crashButton.setOnClickListener { throw RuntimeException("Test Crash") // Force a crash } addContentView(crashButton, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
Java
Button crashButton = new Button(this); crashButton.setText("Test Crash"); crashButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { throw new RuntimeException("Test Crash"); // Force a crash } }); addContentView(crashButton, new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
برنامه خود را بسازید و اجرا کنید.
برای ارسال اولین گزارش خرابی برنامهتان، تست کرش را اجباری کنید:
برنامه خود را از دستگاه آزمایشی یا شبیهساز خود باز کنید.
در برنامهتان، دکمهی «تست کرش» را که با استفاده از کد بالا اضافه کردهاید، فشار دهید.
پس از اینکه برنامه شما از کار افتاد، آن را مجدداً راهاندازی کنید تا برنامه شما بتواند گزارش خرابی را به Firebase ارسال کند.
در کنسول Firebase ، به داشبورد DevOps & Engagement > Crashlytics بروید تا گزارش خرابی تست خود را بررسی کنید.
If you've refreshed the console and you're still not seeing the test crash after five minutes, enable debug logging to see if your app is sending crash reports.
And that's it! Crashlytics is now monitoring your app for crashes, and you can view and investigate crash reports and statistics in the Crashlytics dashboard.
مراحل بعدی
(Recommended) Get help debugging crashes caused by native memory errors by collecting GWP-ASan reports . These memory-related errors can be associated with memory corruption within your app, which is the leading cause of app security vulnerabilities. To take advantage of this debugging feature, make sure your app has GWP-ASan explicitly enabled and uses the latest Crashlytics SDK for NDK (v18.3.6+ or Firebase BoM v31.3.0+).
با افزودن گزارشهای اختیاری، گزارشهای لاگ، کلیدها و ردیابی خطاهای غیرمهلک ، تنظیمات گزارش خرابی خود را سفارشی کنید .
Integrate with Google Play so that you can filter your Android app's crash reports by Google Play track directly in the Crashlytics dashboard. This allows you to better focus your dashboard on specific builds.
عیبیابی
If you're seeing different stack traces in the Firebase console and in the logcat, refer to the Troubleshooting guide .
Alternative options for uploading symbols
The main workflow on this page above is applicable for standard Gradle builds. However, some apps use a different configuration or tooling (for example a build process other than Gradle). In these situations, the following options might be helpful for successfully uploading symbols.
Option : Upload symbols for library modules and external dependencies
This option can be helpful in the following situations:
- If you use a customized NDK build process within Gradle
- If your native libraries are built in a library/feature module or provided by a third-party
- If the automatic symbol uploading task is failing or you're seeing unsymbolicated crashes in the Crashlytics dashboard
The standard Crashlytics symbol upload task assumes that you're building your native libraries as part of your app module's Gradle build, using standard NDK build tools such as CMake.
However, if you're using a customized NDK build process within Gradle, or your native libraries are built in a library/feature module or provided by a third-party, you may need to explicitly specify the path to your unstripped libraries. To accomplish this, you can add the unstrippedNativeLibsDir property within the Crashlytics extension in your Gradle build file.
Make sure that you've completed the following initial tasks from the main workflow earlier on this page:
So that the automatic symbol uploading task can find your symbol information, add the following to your module (app-level) Gradle file (usually
<project>/<app-module>/build.gradle.ktsor<project>/<app-module>/build.gradle):Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { release { configure<CrashlyticsExtension> { nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
Groovy
// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
The Crashlytics plugin will recursively search the specified directory for native libraries with a
.soextension. Crashlytics then extracts debugging symbols from all such libraries and uploads them to the Firebase servers.Here's what you can specify in the
unstrippedNativeLibsDirproperty:Any argument allowable for
org.gradle.api.Project#files(Object...), including:java.lang.String,java.io.File, ororg.gradle.api.file.FileCollectionMultiple directories for a single build flavor by providing a list or
FileCollectioninstance(Starting with Crashlytics Gradle plugin v3.0.0) Accumulate multiple directories in individual products and build flavors.
Finally, force a test crash to finish setting up Crashlytics and to see initial data in the Crashlytics dashboard of the Firebase console.
Option : Upload symbols for non-Gradle builds or inaccessible unstripped native libraries
This option can be helpful in the following situations:
If you use a build process other than Gradle
If your unstripped native libraries are provided to you in some way that they're not accessible during Gradle builds
This option requires that you run a Firebase CLI command when you create a release build or any build for which you want to see symbolicated stack traces in the Firebase console.
Make sure that you've completed the following initial tasks from the main workflow earlier on this page:
Added the Crashlytics SDK for NDK and the Crashlytics Gradle plugin .
Note that with this option, you don't need to add the
firebaseCrashlyticsextension or set up automatic symbol uploading because you'll instead use the Firebase CLI (next steps below) to generate and upload your symbol files.Set up your environment and project for symbol uploading:
Follow the instructions to install the Firebase CLI .
If you've already installed the CLI, make sure to update to its latest version .
(only for apps using Android API level 30+) Update your app's
AndroidManifest.xmltemplate to disable Pointer Tagging:Check the box for Android Player Settings > Publishing Settings > Build > Custom Main Manifest .
Open the manifest template located at
Assets/Plugins/Android/AndroidManifest.xml.Add the following attribute to the application tag:
<application android:allowNativeHeapPointerTagging="false" ... />
Build your project.
Upload your symbols information.
Once your build has finished, generate a Crashlytics -compatible symbol file and upload it to Firebase servers by running the following Firebase CLI command:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : Your Firebase Android App ID (not your package name)
Example Firebase Android App ID:1:567383003300:android:17104a2ced0c9b9bHere are two ways to find your Firebase App ID:
In your
google-services.jsonfile, your App ID is themobilesdk_app_idvalue; orIn the Firebase console, go to your Project settings . Go to the Your apps card, then click the intended Firebase App to find its App ID.
PATH/TO/SYMBOLS : The path to the symbol file generated by the CLI
Exported to an Android Studio project — PATH/TO/SYMBOLS can be any directory. The Firebase CLI will recursively search the specified directory for native libraries with a
.soextension.Built the APK directly from within Unity — PATH/TO/SYMBOLS is the path of the zipped symbol file generated in the project root directory when your build finished (for example:
myproject/myapp-1.0-v100.symbols.zip).
View advanced options for using the Firebase CLI command for symbol file generation and upload
پرچم توضیحات --generator=csymUses the legacy cSYM symbol file generator instead of the default Breakpad generator
Not recommended for use. We recommend using the default Breakpad symbol file generator.
--generator=breakpadUses the Breakpad symbol file generator
Note that the default for symbol file generation is Breakpad. Only use this flag if you've added
symbolGenerator { csym() }in your build configuration and you want to override it to use Breakpad instead.--dry-runGenerates the symbol files but does not upload them
This flag is useful if you want to inspect the content of the files that are sent.
--debugProvides additional debugging information Finally, force a test crash to finish setting up Crashlytics and to see initial data in the Crashlytics dashboard of the Firebase console.
After you build your app as part of forcing a crash, make sure to run the Firebase CLI
crashlytics:symbols:uploadcommand to upload your symbol file.