گزارش‌های خرابی Android NDK را دریافت کنید

اگر برنامه Android شما حاوی کتابخانه‌های بومی است ، می‌توانید ردیابی پشته کامل و گزارش‌های خرابی دقیق را برای کد بومی خود از Firebase Crashlytics با چند به‌روزرسانی کوچک در پیکربندی ساخت برنامه‌تان فعال کنید.

این راهنما نحوه پیکربندی گزارش خرابی با Firebase Crashlytics SDK برای NDK را شرح می‌دهد.

اگر به دنبال نحوه شروع کار با Crashlytics در پروژه های یونیتی خود هستید، راهنمای شروع Unity را بررسی کنید.

قبل از اینکه شروع کنی

  1. اگر قبلاً این کار را نکرده اید، Firebase را به پروژه اندروید خود اضافه کنید. اگر برنامه اندروید ندارید، می توانید یک برنامه نمونه دانلود کنید.

  2. توصیه می‌شود: برای دریافت ویژگی‌هایی مانند کاربران بدون خرابی، گزارش‌های سوخاری، و هشدارهای سرعت، باید Google Analytics را در پروژه Firebase خود فعال کنید.

    • اگر پروژه Firebase موجود شما Google Analytics را فعال نمی کند، می توانید Google Analytics را از برگه ادغام > تنظیمات پروژه در کنسول Firebase فعال کنید.

    • اگر در حال ایجاد یک پروژه Firebase هستید، Google Analytics را در جریان کار ایجاد پروژه فعال کنید.

مرحله 1 : Firebase Crashlytics SDK برای NDK را به برنامه خود اضافه کنید

با استفاده از Firebase Android BoM ، وابستگی را برای کتابخانه Android Crashlytics NDK در فایل Gradle ماژول (سطح برنامه) خود (معمولا app/build.gradle ) اعلام کنید.

برای تجربه بهینه با Crashlytics، توصیه می‌کنیم Google Analytics را در پروژه Firebase خود فعال کنید و Firebase SDK برای Google Analytics را به برنامه خود اضافه کنید.

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.1.0')

    // Declare 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 {
    // Declare 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:18.2.11'
    implementation 'com.google.firebase:firebase-analytics:21.0.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.1.0')

    // Declare 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-ktx'
}

با استفاده از Firebase Android BoM ، برنامه شما همیشه از نسخه‌های سازگار کتابخانه‌های Firebase Android استفاده می‌کند.

(جایگزین) وابستگی های کتابخانه Firebase را بدون استفاده از BoM اعلام کنید

اگر تصمیم گرفتید از Firebase BoM استفاده نکنید، باید هر نسخه کتابخانه Firebase را در خط وابستگی آن مشخص کنید.

توجه داشته باشید که اگر از چندین کتابخانه Firebase در برنامه خود استفاده می کنید، ما به شدت توصیه می کنیم از BoM برای مدیریت نسخه های کتابخانه استفاده کنید، که تضمین می کند همه نسخه ها سازگار هستند.

dependencies {
    // Declare 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:18.2.11'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'
}

مرحله 2 : افزونه Firebase Crashlytics را به برنامه خود اضافه کنید

  1. در فایل build.gradle در سطح پروژه خود، افزونه Crashlytics Gradle را به عنوان وابستگی Buildscript اضافه کنید.

    buildscript {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    
        dependencies {
            // ...
    
            // Check that you have the Google services Gradle plugin v4.3.2 or later
            // (if not, add it).
            classpath 'com.google.gms:google-services:4.3.13'
    
            // Add the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1'
        }
    }
    
    allprojects {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    }
  2. در فایل build.gradle سطح برنامه خود، افزونه Crashlytics Gradle را اعمال کنید:

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin
    
    // Apply the Crashlytics Gradle plugin
    apply plugin: 'com.google.firebase.crashlytics'
    

مرحله 3 : افزونه firebaseCrashlytics را به بیلد خود اضافه کنید

در فایل Gradle ماژول (سطح برنامه) خود (معمولا app/build.gradle )، پسوند firebaseCrashlytics را اضافه کنید.

Java

// ...

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
          }
      }
  }
}

Kotlin+KTX

// ...

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
          }
      }
  }
}

مرحله 4 : آپلود خودکار نمادهای بومی را تنظیم کنید

برای ایجاد ردیابی پشته قابل خواندن از خرابی های NDK، Crashlytics باید درباره نمادهای موجود در باینری های بومی شما بداند. پلاگین Crashlytics Gradle شامل کار uploadCrashlyticsSymbolFile BUILD_VARIANT برای خودکارسازی این فرآیند است.

  1. برای اینکه بتوانید به وظیفه آپلود خودکار نمادها دسترسی داشته باشید، مطمئن شوید که nativeSymbolUploadEnabled در فایل Gradle ماژول (سطح برنامه) روی true تنظیم شده باشد.

  2. برای اینکه نام روش‌ها در ردیابی پشته شما ظاهر شود، باید صراحتاً وظیفه uploadCrashlyticsSymbolFile BUILD_VARIANT پس از هر ساخت کتابخانه NDK خود فراخوانی کنید. مثلا:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. هم Crashlytics SDK برای NDK و هم پلاگین Crashlytics Gradle به وجود شناسه ساخت GNU در اشیاء مشترک بومی بستگی دارد.

    می توانید با اجرای readelf -n در هر باینری وجود این شناسه را تأیید کنید. اگر شناسه ساخت وجود ندارد، -Wl,--build-id را به پرچم‌های سیستم ساخت خود اضافه کنید تا مشکل برطرف شود.

مرحله 5 : یک خرابی آزمایشی را مجبور کنید تا راه‌اندازی تمام شود

برای تکمیل راه‌اندازی Crashlytics و دیدن داده‌های اولیه در داشبورد Crashlytics کنسول Firebase، باید یک خرابی آزمایشی را اجباری کنید.

  1. کدی را به برنامه خود اضافه کنید که می توانید از آن برای اجبار تست خرابی استفاده کنید.

    می توانید از کد زیر در MainActivity برنامه خود استفاده کنید تا دکمه ای را به برنامه خود اضافه کنید که با فشار دادن آن باعث خرابی می شود. این دکمه دارای برچسب "تست خرابی" است.

    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));
    

    Kotlin+KTX

    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))
    
  2. اپلیکیشن خود را بسازید و اجرا کنید.

  3. برای ارسال اولین گزارش خرابی برنامه، خرابی آزمایشی را اجباری کنید:

    1. برنامه خود را از دستگاه آزمایشی یا شبیه ساز خود باز کنید.

    2. در برنامه خود، دکمه «Test Crash» را که با استفاده از کد بالا اضافه کردید، فشار دهید.

    3. پس از خراب شدن برنامه، آن را مجدداً راه اندازی کنید تا برنامه شما بتواند گزارش خرابی را به Firebase ارسال کند.

  4. برای مشاهده خرابی آزمایشی خود، به داشبورد Crashlytics کنسول Firebase بروید.

    اگر کنسول را به‌روزرسانی کرده‌اید و بعد از پنج دقیقه هنوز خرابی آزمایشی را نمی‌بینید، ثبت اشکال‌زدایی را فعال کنید تا ببینید آیا برنامه شما گزارش‌های خرابی را ارسال می‌کند یا خیر.


و بس! Crashlytics اکنون برنامه شما را از نظر خرابی زیر نظر دارد و می توانید گزارش ها و آمار خرابی ها را در داشبورد Crashlytics مشاهده و بررسی کنید.



گزینه های جایگزین برای بارگذاری نمادها

گردش کار اصلی در این صفحه در بالا برای ساخت‌های استاندارد Gradle قابل اجرا است. با این حال، برخی از برنامه ها از پیکربندی یا ابزار متفاوتی استفاده می کنند (مثلاً فرآیند ساخت غیر از Gradle). در این شرایط، گزینه‌های زیر ممکن است برای بارگذاری موفقیت‌آمیز نمادها مفید باشند.

گزینه : نمادها را برای ماژول های کتابخانه و وابستگی های خارجی بارگذاری کنید

این گزینه می تواند در شرایط زیر مفید باشد:

  • اگر از یک فرآیند ساخت NDK سفارشی شده در Gradle استفاده می کنید
  • اگر کتابخانه‌های بومی شما در یک ماژول کتابخانه/ویژگی ساخته شده‌اند یا توسط شخص ثالث ارائه شده‌اند
  • اگر کار آپلود خودکار نماد ناموفق باشد یا خرابی های غیر نمادین را در داشبورد می بینید

گزینه : بارگذاری نمادها برای ساخت‌های غیر Gradle یا کتابخانه‌های بومی غیرقابل دسترس

این گزینه می تواند در شرایط زیر مفید باشد:

  • اگر از یک فرآیند ساخت غیر از Gradle استفاده می کنید

  • اگر کتابخانه‌های بومی غیرمستقیم شما به نحوی در اختیار شما قرار می‌گیرند که در طول ساخت‌های Gradle در دسترس نیستند.



عیب یابی

اگر ردیابی پشته های مختلف در کنسول Firebase و در logcat مشاهده می کنید، به راهنمای عیب یابی مراجعه کنید.

مراحل بعدی