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 ของคุณ โปรดดูคู่มือ การเริ่มต้นใช้งาน Unity

ก่อนจะเริ่ม

  1. หากคุณยังไม่ได้ เพิ่ม Firebase ในโครงการ Android ของคุณ หากคุณไม่มีแอป Android คุณสามารถดาวน์โหลด แอปตัวอย่าง

  2. แนะนำ : หากต้องการรับคุณลักษณะต่างๆ เช่น ผู้ใช้ที่ไม่มีข้อขัดข้อง บันทึกการแสดงเส้นทาง และการแจ้งเตือนความเร็ว คุณต้องเปิดใช้ Google Analytics ในโครงการ Firebase

    • หากโปรเจ็กต์ Firebase ที่คุณมีอยู่ไม่ได้เปิดใช้งาน Google Analytics คุณสามารถเปิดใช้งาน 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.4.1')

    // 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.4.1')

    // 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 จำเป็นต้องรู้เกี่ยวกับสัญลักษณ์ในไบนารีเนทีฟของคุณ ปลั๊กอิน Crashlytics Gradle มีงาน 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 build ID ภายในอ็อบเจ็กต์ที่แชร์ในเครื่อง

    คุณสามารถตรวจสอบการมีอยู่ของ ID นี้ได้โดยเรียกใช้ readelf -n ในแต่ละไบนารี หากไม่มี build ID ให้เพิ่ม -Wl,--build-id ในแฟล็กของระบบบิลด์ของคุณเพื่อแก้ไขปัญหา

ขั้นตอนที่ 5 : บังคับให้หยุดการทดสอบเพื่อสิ้นสุดการตั้งค่า

หากต้องการตั้งค่า Crashlytics ให้เสร็จสิ้นและดูข้อมูลเบื้องต้นในแดชบอร์ด Crashlytics ของคอนโซล Firebase คุณต้องบังคับให้มีการทดสอบขัดข้อง

  1. เพิ่มโค้ดในแอปของคุณเพื่อใช้บังคับการทดสอบขัดข้อง

    คุณสามารถใช้โค้ดต่อไปนี้ใน MainActivity ของแอปเพื่อเพิ่มปุ่มลงในแอปที่เมื่อกดแล้วจะทำให้เกิดข้อขัดข้อง ปุ่มนี้มีชื่อว่า "Test Crash"

    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 เพื่อดูข้อขัดข้องของการทดสอบ

    หากคุณได้รีเฟรชคอนโซลแล้วและยังไม่เห็นการทดสอบขัดข้องหลังจากผ่านไป 5 นาที ให้เปิดใช้การบันทึกการแก้ไขข้อบกพร่อง เพื่อดูว่าแอปของคุณส่งรายงานข้อขัดข้องหรือไม่


และนั่นแหล่ะ! Crashlytics กำลังตรวจสอบแอปของคุณเพื่อหาข้อขัดข้อง และคุณสามารถดูและตรวจสอบรายงานข้อขัดข้องและสถิติในแดชบอร์ด Crashlytics



ตัวเลือกอื่นสำหรับการอัพโหลดสัญลักษณ์

เวิร์กโฟลว์หลักในหน้าด้านบนนี้ใช้ได้กับรุ่น Gradle มาตรฐาน อย่างไรก็ตาม แอพบางตัวใช้การกำหนดค่าหรือเครื่องมือที่แตกต่างกัน (เช่น กระบวนการสร้างอื่นที่ไม่ใช่ Gradle) ในสถานการณ์เหล่านี้ ตัวเลือกต่อไปนี้อาจเป็นประโยชน์สำหรับการอัปโหลดสัญลักษณ์ได้สำเร็จ

ตัวเลือก : อัปโหลดสัญลักษณ์สำหรับโมดูลไลบรารีและการพึ่งพาภายนอก

ตัวเลือกนี้จะมีประโยชน์ในสถานการณ์ต่อไปนี้:

  • หากคุณใช้กระบวนการสร้าง NDK ที่กำหนดเองภายใน Gradle
  • หากไลบรารีดั้งเดิมของคุณสร้างขึ้นในโมดูลไลบรารี/คุณลักษณะหรือจัดหาโดยบุคคลที่สาม
  • หาก งานอัปโหลดสัญลักษณ์อัตโนมัติ ล้มเหลวหรือคุณเห็นการขัดข้องที่ไม่มีสัญลักษณ์ในแดชบอร์ด

ตัวเลือก : อัปโหลดสัญลักษณ์สำหรับบิลด์ที่ไม่ใช่ Gradle หรือไลบรารีเนทีฟที่ไม่สามารถเข้าถึงได้

ตัวเลือกนี้จะมีประโยชน์ในสถานการณ์ต่อไปนี้:

  • หากคุณใช้กระบวนการสร้างอื่นที่ไม่ใช่ Gradle

  • หากไลบรารีเนทีฟแบบ unstripped ของคุณมีให้ในลักษณะที่ไม่สามารถเข้าถึงได้ระหว่าง Gradle builds



การแก้ไขปัญหา

หากคุณเห็นสแต็กเทรซต่างๆ ในคอนโซล Firebase และใน Logcat ให้อ้างอิงกับ คู่มือการแก้ไขปัญหา

ขั้นตอนถัดไป

  • ปรับแต่งการตั้งค่ารายงานข้อขัดข้อง ด้วยการเพิ่มการรายงาน บันทึก คีย์ และการติดตามข้อผิดพลาดที่ไม่ร้ายแรง

  • ผสานรวมกับ Google Play เพื่อให้คุณสามารถกรองรายงานข้อขัดข้องของแอป Android ตามแทร็ก Google Play ได้โดยตรงในแดชบอร์ด Crashlytics ซึ่งจะทำให้คุณสามารถโฟกัสแดชบอร์ดของคุณไปที่บิลด์เฉพาะได้ดีขึ้น

,

หากแอป Android ของคุณมี ไลบรารีดั้งเดิม คุณสามารถเปิดใช้งานการติดตามสแต็กแบบเต็มและรายงานข้อขัดข้องโดยละเอียดสำหรับโค้ดเนทีฟของคุณจาก Firebase Crashlytics ด้วยการอัปเดตเล็กน้อยในการกำหนดค่าบิลด์ของแอป

คู่มือนี้อธิบายวิธีกำหนดค่าการรายงานข้อขัดข้องด้วย Firebase Crashlytics SDK สำหรับ NDK

หากคุณกำลังมองหาวิธีเริ่มต้นใช้งาน Crashlytics ในโครงการ Unity ของคุณ โปรดดูคู่มือ การเริ่มต้นใช้งาน Unity

ก่อนจะเริ่ม

  1. หากคุณยังไม่ได้ เพิ่ม Firebase ในโครงการ Android ของคุณ หากคุณไม่มีแอป Android คุณสามารถดาวน์โหลด แอปตัวอย่าง

  2. แนะนำ : หากต้องการรับคุณลักษณะต่างๆ เช่น ผู้ใช้ที่ไม่มีข้อขัดข้อง บันทึกการแสดงเส้นทาง และการแจ้งเตือนความเร็ว คุณต้องเปิดใช้ Google Analytics ในโครงการ Firebase

    • หากโปรเจ็กต์ Firebase ที่คุณมีอยู่ไม่ได้เปิดใช้งาน Google Analytics คุณสามารถเปิดใช้งาน 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.4.1')

    // 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.4.1')

    // 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 จำเป็นต้องรู้เกี่ยวกับสัญลักษณ์ในไบนารีเนทีฟของคุณ ปลั๊กอิน Crashlytics Gradle มีงาน 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 build ID ภายในอ็อบเจ็กต์ที่แชร์ในเครื่อง

    คุณสามารถตรวจสอบการมีอยู่ของ ID นี้ได้โดยเรียกใช้ readelf -n ในแต่ละไบนารี หากไม่มี build ID ให้เพิ่ม -Wl,--build-id ในแฟล็กของระบบบิลด์ของคุณเพื่อแก้ไขปัญหา

ขั้นตอนที่ 5 : บังคับให้หยุดการทดสอบเพื่อสิ้นสุดการตั้งค่า

หากต้องการตั้งค่า Crashlytics ให้เสร็จสิ้นและดูข้อมูลเบื้องต้นในแดชบอร์ด Crashlytics ของคอนโซล Firebase คุณต้องบังคับให้มีการทดสอบขัดข้อง

  1. เพิ่มโค้ดในแอปของคุณเพื่อใช้บังคับการทดสอบขัดข้อง

    คุณสามารถใช้โค้ดต่อไปนี้ใน MainActivity ของแอปเพื่อเพิ่มปุ่มลงในแอปที่เมื่อกดแล้วจะทำให้เกิดข้อขัดข้อง ปุ่มนี้มีชื่อว่า "Test Crash"

    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 เพื่อดูข้อขัดข้องของการทดสอบ

    หากคุณได้รีเฟรชคอนโซลแล้วและยังไม่เห็นการทดสอบขัดข้องหลังจากผ่านไป 5 นาที ให้เปิดใช้การบันทึกการแก้ไขข้อบกพร่อง เพื่อดูว่าแอปของคุณส่งรายงานข้อขัดข้องหรือไม่


และนั่นแหล่ะ! Crashlytics กำลังตรวจสอบแอปของคุณเพื่อหาข้อขัดข้อง และคุณสามารถดูและตรวจสอบรายงานข้อขัดข้องและสถิติในแดชบอร์ด Crashlytics



ตัวเลือกอื่นสำหรับการอัพโหลดสัญลักษณ์

เวิร์กโฟลว์หลักในหน้าด้านบนนี้ใช้ได้กับรุ่น Gradle มาตรฐาน อย่างไรก็ตาม แอพบางตัวใช้การกำหนดค่าหรือเครื่องมือที่แตกต่างกัน (เช่น กระบวนการสร้างอื่นที่ไม่ใช่ Gradle) ในสถานการณ์เหล่านี้ ตัวเลือกต่อไปนี้อาจเป็นประโยชน์สำหรับการอัปโหลดสัญลักษณ์ได้สำเร็จ

ตัวเลือก : อัปโหลดสัญลักษณ์สำหรับโมดูลไลบรารีและการพึ่งพาภายนอก

ตัวเลือกนี้จะมีประโยชน์ในสถานการณ์ต่อไปนี้:

  • หากคุณใช้กระบวนการสร้าง NDK ที่กำหนดเองภายใน Gradle
  • หากไลบรารีดั้งเดิมของคุณสร้างขึ้นในโมดูลไลบรารี/คุณลักษณะหรือจัดหาโดยบุคคลที่สาม
  • หาก งานอัปโหลดสัญลักษณ์อัตโนมัติ ล้มเหลวหรือคุณเห็นการขัดข้องที่ไม่มีสัญลักษณ์ในแดชบอร์ด

ตัวเลือก : อัปโหลดสัญลักษณ์สำหรับบิลด์ที่ไม่ใช่ Gradle หรือไลบรารีเนทีฟที่ไม่สามารถเข้าถึงได้

ตัวเลือกนี้จะมีประโยชน์ในสถานการณ์ต่อไปนี้:

  • หากคุณใช้กระบวนการสร้างอื่นที่ไม่ใช่ Gradle

  • หากไลบรารีเนทีฟแบบ unstripped ของคุณมีให้ในลักษณะที่ไม่สามารถเข้าถึงได้ระหว่าง Gradle builds



การแก้ไขปัญหา

หากคุณเห็นสแต็กเทรซต่างๆ ในคอนโซล Firebase และใน Logcat ให้อ้างอิงกับ คู่มือการแก้ไขปัญหา

ขั้นตอนถัดไป

  • ปรับแต่งการตั้งค่ารายงานข้อขัดข้อง ด้วยการเพิ่มการรายงาน บันทึก คีย์ และการติดตามข้อผิดพลาดที่ไม่ร้ายแรง

  • ผสานรวมกับ Google Play เพื่อให้คุณสามารถกรองรายงานข้อขัดข้องของแอป Android ตามแทร็ก Google Play ได้โดยตรงในแดชบอร์ด Crashlytics ซึ่งจะทำให้คุณสามารถโฟกัสแดชบอร์ดของคุณไปที่บิลด์เฉพาะได้ดีขึ้น