| انتخاب پلاتفرم: | iOS+ Android Android NDK Flutter Unity |
اگر در برنامه Android خود از کتابخانههای بومی استفاده میکنید، میتوانید با چند بهروزرسانی کوچک در پیکربندی ساخت برنامه، ردیابی پشته کامل و گزارشهای دقیق خرابی را برای کد بومی خود از Firebase Crashlytics فعال کنید.
این راهنما نحوه پیکربندی گزارش خرابی با کیت توسعه نرمافزار Firebase Crashlytics برای NDK را شرح میدهد.
اگر بهدنبال نحوه شروع کار با Crashlytics در پروژههای Unity خود هستید، راهنمای شروع کار با Unity را بررسی کنید.
قبل از شروع
اگر قبلاً این کار را نکردهاید، Firebase را به پروژه Android خود اضافه کنید. اگر برنامه Android ندارید، میتوانید برنامه نمونه را بارگیری کنید.
توصیه میشود: برای دریافت خودکار گزارشهای ردپای خردهنان برای درک کنشهای کاربر که منجر به رویداد خرابی، غیرمهلک، یا ANR میشود، باید Google Analytics را در پروژه Firebase خود فعال کنید.
اگر پروژه Firebase جدیدی ایجاد میکنید، Google Analytics را درطول گردش کار ایجاد پروژه فعال کنید.
اگر از پروژه Firebase موجودی استفاده میکنید که Google Analytics در آن فعال نیست، میتوانید آن را در صفحه
تنظیمات > ادغامها در کنسول Firebase فعال کنید.
مطمئن شوید برنامه شما دارای حداقل نسخههای موردنیاز زیر است:
- Gradle 8.0
- افزایه Android Gradle نسخه ۸.۱.۰
- افزایه Gradle سرویسهای Google نسخه ۴.۴.۱
مرحله ۱: افزودن کیت توسعه نرمافزار Crashlytics برای NDK به برنامه
در فایل Gradle واحد (سطح برنامه) (معمولاً<project>/<app-module>/build.gradle.kts یا
<project>/<app-module>/build.gradle)،
وابستگی کتابخانه Crashlytics NDK را برای Android اضافه کنید. توصیه میکنیم از
Firebase Android BoM
برای کنترل نسخهبندی کتابخانه استفاده کنید.
برای داشتن تجربهای بهینه با Crashlytics، توصیه میکنیم Google Analytics را در پروژه Firebase خود فعال کنید و «کیت توسعه نرمافزار Firebase برای Google Analytics» را به برنامهتان اضافه کنید.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.19.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 Android استفاده خواهد کرد.
(جایگزین) افزودن وابستگیهای کتابخانه 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.1") implementation("com.google.firebase:firebase-analytics:23.2.0") }
مرحله ۲: افزودن افزایه Crashlytics Gradle به برنامه
در فایل Gradle سطح ریشه (سطح پروژه) (
<project>/build.gradle.ktsیا<project>/build.gradle)، افزایه Gradle Crashlytics را به بلوک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)، افزایه Gradle Crashlytics را اضافه کنید: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
شامل تکلیف uploadCrashlyticsSymbolFileBUILD_VARIANT
برای خودکارسازی این فرایند است.
برای اینکه بتوانید به تکلیف بارگذاری خودکار نماد دسترسی داشته باشید، مطمئن شوید که
nativeSymbolUploadEnabledدر فایل Gradle واحد (سطح برنامه) رویtrueتنظیم شده باشد.برای اینکه نامهای روش در ردیابی پشته شما نشان داده شود، باید بهطور صریح پساز هر ساخت کتابخانه NDK، تکلیف
uploadCrashlyticsSymbolFileBUILD_VARIANTرا فراخوانی کنید. برای مثال:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
هم کیت توسعه نرمافزار Crashlytics برای NDK و هم افزایه Crashlytics Gradle به وجود شناسه ساخت GNU در اشیای همرسانیشده بومی وابسته هستند.
با اجرای
روی هر فایل باینری میتوانید وجود این شناسه را درستیسنجی کنید. اگر شناسه ساخت وجود ندارد،readelf -n را به پرچمهای سیستم ساخت اضافه کنید تا مشکل برطرف شود.-Wl,--build-id
مرحله ۵: برای تکمیل راهاندازی، خرابی آزمایشی اجباری ایجاد کنید
برای تکمیل راهاندازی Crashlytics و دیدن دادههای اولیه در داشبورد Crashlytics کنسول Firebase، باید خرابی آزمایشی اجباری ایجاد کنید.
کدی به برنامهتان اضافه کنید که بتوانید از آن برای ایجاد خرابی آزمایشی اجباری استفاده کنید.
میتوانید از کد زیر در
MainActivityبرنامهتان برای افزودن دکمهای به برنامهتان استفاده کنید که با فشار دادن آن، برنامه ازکار بیفتد. دکمه با «خرابی آزمایشی» برچسبگذاری شده است.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 و تعامل > Crashlytics داشبورد بروید تا گزارش خرابی آزمایشیتان را بررسی کنید.
اگر کنسول را بازآوری کردهاید و همچنان خرابی آزمایشی را پساز پنج دقیقه نمیبینید، گزارشگیری اشکالزدایی را فعال کنید تا ببینید آیا برنامه شما گزارش خرابی ارسال میکند یا نه.
و تمام! Crashlytics اکنون برنامه شما را برای خرابیها پایش میکند و میتوانید گزارشها و آمار خرابی را در داشبورد Crashlytics مشاهده و بررسی کنید.
مراحل بعدی
(توصیهشده) با جمعآوری گزارشهای GWP-ASan، برای اشکالزدایی خرابیهای ناشی از خطاهای حافظه محلی کمک دریافت کنید. این خطاهای مربوط به حافظه میتواند با خراب شدن حافظه در برنامه شما مرتبط باشد که دلیل اصلی آسیبپذیریهای امنیتی برنامه است. برای بهرهمندی از این ویژگی اشکالزدایی، مطمئن شوید که برنامهتان GWP-ASan را بهطور صریح فعال کرده است و از جدیدترین Crashlytics کیت توسعه نرمافزار برای NDK (نسخه ۱۸.۳.۶ یا Firebase BoM نسخه ۳۱.۳.۰ یا بالاتر) استفاده میکند.
با افزودن گزارش موافقت، گزارشهای ورود به سیستم، کلیدها، و پیگیری خطاهای غیرمهلک، راهاندازی گزارش خرابی را سفارشیسازی کنید.
با Google Play ادغام کنید تا بتوانید گزارشهای خرابی برنامه Android خود را مستقیماً در داشبورد Crashlytics براساس مسیر Google Play فیلتر کنید. این کار به شما امکان میدهد داشبوردتان را بهتر روی ساختهای خاصی متمرکز کنید.
عیبیابی
اگر ردیابی پشتههای مختلفی را در کنسول Firebase و در logcat میبینید، به راهنمای عیبیابی مراجعه کنید.
گزینههای جایگزین برای بارگذاری نمادها
گردش کار اصلی در این صفحه در بالا برای ساختهای استاندارد Gradle قابلاجرا است. بااینحال، برخیاز برنامهها از پیکربندی یا ابزار دیگری استفاده میکنند (برای مثال، فرایند ساختاری غیر از Gradle). در این شرایط، گزینههای زیر ممکن است برای بارگذاری موفق نمادها مفید باشند.
گزینه: بارگذاری نمادها برای واحدهای کتابخانه و وابستگیهای خارجی
این گزینه در موقعیتهای زیر میتواند مفید باشد:
- اگر از فرایند ساخت NDK سفارشیسازیشده در Gradle استفاده میکنید
- اگر کتابخانههای بومی شما در واحد کتابخانه/ویژگی ساخته شده باشند یا توسط طرف سوم ارائه شده باشند
- اگر تکلیف بارگذاری نماد خودکار با مشکل مواجه است یا خرابیهای بدون نماد را در داشبورد Crashlytics میبینید
گزینه: بارگذاری نمادها برای ساختهای غیرGradle یا کتابخانههای بومی غیرقابلدسترس و بدونحذف
این گزینه در موقعیتهای زیر میتواند مفید باشد:
اگر از فرایند ساخت دیگری بهجز Gradle استفاده میکنید
اگر کتابخانههای بومی بدون نوار شما به نحوی ارائه شده است که درطول ساختهای Gradle قابلدسترس نیستند