Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

احصل على تقارير أعطال Android NDK

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

إذا كان تطبيق Android الخاص بك يحتوي على مكتبات أصلية ، فيمكنك تمكين تتبع المكدس الكامل وتقارير الأعطال التفصيلية للرمز الأصلي الخاص بك من Firebase Crashlytics مع بعض التحديثات الصغيرة لتهيئة بنية التطبيق.

يصف هذا الدليل كيفية تكوين تقارير الأعطال باستخدام Firebase Crashlytics SDK لـ NDK.

إذا كنت تبحث عن كيفية بدء استخدام Crashlytics في مشاريع الوحدة الخاصة بك ، فراجع دليل بدء التشغيل Unity .

قبل ان تبدأ

  1. أضف Firebase إلى مشروع Android ، إذا لم تكن قد قمت بذلك بالفعل. إذا لم يكن لديك تطبيق Android ، فيمكنك تنزيل نموذج للتطبيق .

  2. موصى به : للحصول على ميزات مثل المستخدمين الذين لم يتعرضوا للأعطال وسجلات التنقل وتنبيهات السرعة ، تحتاج إلى تمكين Google Analytics في مشروع Firebase.

    • إذا لم يتم تمكين Google Analytics لمشروع Firebase الحالي ، فيمكنك تمكين Google Analytics من علامة التبويب " التكامل " في > إعدادات المشروع في وحدة تحكم Firebase.

    • إذا كنت تنشئ مشروع Firebase جديدًا ، فقم بتمكين Google Analytics أثناء سير عمل إنشاء المشروع.

الخطوة 1 : أضف Crashlytics SDK لـ NDK إلى تطبيقك

في ملف Gradle (على مستوى التطبيق) الوحدة النمطية الخاصة بك (عادةً <project>/<app-module>/build.gradle ) ، أضف التبعية لمكتبة Crashlytics NDK Android. نوصي باستخدام Firebase Android BoM للتحكم في إصدارات المكتبة.

للحصول على تجربة مثالية مع 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.5.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:18.2.13'
    implementation 'com.google.firebase:firebase-analytics:21.1.1'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.5.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-ktx'
}

باستخدام 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:18.2.13'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.1.1'
}

الخطوة 2 : أضف المكوّن الإضافي Crashlytics Gradle إلى تطبيقك

  1. في ملف Gradle على مستوى الجذر (على مستوى المشروع) ( <project>/build.gradle ) ، أضف المكوّن الإضافي Crashlytics Gradle باعتباره تبعية buildscript:

    buildscript {
        repositories {
          // Make sure that you have the following two repositories
          google()  // Google's Maven repository
          mavenCentral()  // Maven Central repository
        }
    
        dependencies {
            ...
            classpath 'com.android.tools.build:gradle:7.2.0'
    
            // Make sure that you have the Google services Gradle plugin dependency
            classpath 'com.google.gms:google-services:4.3.14'
    
            // Add the dependency for the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
        }
    }
  2. في ملف Gradle (على مستوى التطبيق) الوحدة النمطية الخاصة بك (عادةً <project>/<app-module>/build.gradle ) ، أضف البرنامج الإضافي Crashlytics Gradle:

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

الخطوة 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 إلى معرفة الرموز الموجودة في ثنائياتك الأصلية. يتضمن المكون الإضافي uploadCrashlyticsSymbolFile BUILD_VARIANT مهمة uploadCrashlyticsSymbolFile BUILD_VARIANT لأتمتة هذه العملية.

  1. حتى تتمكن من الوصول إلى مهمة التحميل الآلي للرموز ، تأكد من nativeSymbolUploadEnabled على " true " في ملف Gradle (مستوى التطبيق) الخاص بالوحدة.

  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. في تطبيقك ، اضغط على زر "اختبار التعطل" الذي أضفته باستخدام الرمز أعلاه.

    3. بعد تعطل تطبيقك ، أعد تشغيله حتى يتمكن تطبيقك من إرسال تقرير التعطل إلى Firebase.

  4. انتقل إلى لوحة معلومات Crashlytics بوحدة تحكم Firebase لمشاهدة اختبار تحطم الطائرة.

    إذا قمت بتحديث وحدة التحكم وما زلت لا ترى تعطل الاختبار بعد خمس دقائق ، فقم بتمكين تسجيل تصحيح الأخطاء لمعرفة ما إذا كان تطبيقك يرسل تقارير الأعطال أم لا.


وهذا كل شيء! تراقب Crashlytics الآن تطبيقك بحثًا عن الأعطال ، ويمكنك عرض تقارير الأعطال والإحصاءات والتحقيق فيها في لوحة معلومات Crashlytics.



خيارات بديلة لتحميل الرموز

إن سير العمل الرئيسي في هذه الصفحة أعلاه قابل للتطبيق على إصدارات Gradle القياسية. ومع ذلك ، تستخدم بعض التطبيقات تكوينًا أو أدوات مختلفة (على سبيل المثال ، عملية إنشاء بخلاف Gradle). في هذه المواقف ، قد تكون الخيارات التالية مفيدة لتحميل الرموز بنجاح.

الخيار : تحميل الرموز لوحدات المكتبة والتبعيات الخارجية

يمكن أن يكون هذا الخيار مفيدًا في المواقف التالية:

  • إذا كنت تستخدم عملية إنشاء NDK مخصصة داخل Gradle
  • إذا تم إنشاء مكتباتك الأصلية في وحدة مكتبة / ميزة أو تم توفيرها بواسطة جهة خارجية
  • إذا فشلت مهمة التحميل التلقائي للرمز أو كنت ترى أعطالًا غير رمزية في لوحة القيادة

الخيار : تحميل الرموز للبنيات غير Gradle أو المكتبات الأصلية التي لا يمكن الوصول إليها

يمكن أن يكون هذا الخيار مفيدًا في المواقف التالية:

  • إذا كنت تستخدم عملية إنشاء بخلاف Gradle

  • إذا تم توفير مكتباتك الأصلية غير المخططة لك بطريقة ما بحيث لا يمكن الوصول إليها أثناء إنشاءات Gradle



استكشاف الأخطاء وإصلاحها

إذا كنت ترى آثار مكدس مختلفة في وحدة تحكم Firebase وفي logcat ، فراجع دليل استكشاف الأخطاء وإصلاحها .

الخطوات التالية

  • قم بتخصيص إعداد تقرير الأعطال عن طريق إضافة تقارير الاشتراك والسجلات والمفاتيح وتتبع الأخطاء غير الفادحة.

  • تكامل مع Google Play حتى تتمكن من تصفية تقارير أعطال تطبيق Android الخاص بك عن طريق مسار Google Play مباشرة في لوحة معلومات Crashlytics. يتيح لك هذا التركيز بشكل أفضل على لوحة القيادة الخاصة بك على تصميمات محددة.