| เลือกแพลตฟอร์ม | iOS+ Android Android NDK Flutter Unity |
หากใช้ไลบรารีแบบเนทีฟในแอป Android คุณสามารถเปิดใช้สแต็กเทรซแบบเต็มและรายงานข้อขัดข้องโดยละเอียดสำหรับโค้ดแบบเนทีฟจาก Firebase Crashlytics ได้ด้วยการอัปเดตเล็กน้อย 2-3 รายการในการกำหนดค่าบิลด์ของแอป
คู่มือนี้อธิบายวิธีกำหนดค่าการรายงานข้อขัดข้องด้วย SDK 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 8.1.0
- ปลั๊กอิน Gradle สำหรับบริการของ Google 4.4.1
ขั้นตอนที่ 1: เพิ่ม Crashlytics SDK สำหรับ NDK ลงในแอป
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ<project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ให้เพิ่มทรัพยากร Dependency สำหรับไลบรารี Crashlytics NDK สำหรับ Android เราขอแนะนำให้ใช้
Firebase Android BoM
เพื่อควบคุมการกำหนดเวอร์ชันของไลบรารี
เราขอแนะนำให้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase และเพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอปเพื่อให้ได้รับประสบการณ์การใช้งาน Crashlytics ที่ดีที่สุด
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.2")) // 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 เวอร์ชันที่เข้ากันได้อยู่เสมอ
(ทางเลือก) เพิ่มทรัพยากร Dependency ของไลบรารี Firebase โดยไม่ใช้ BoM
หากเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันของไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดทรัพยากร Dependency
โปรดทราบว่าหากคุณใช้ไลบรารี 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:21.0.0") implementation("com.google.firebase:firebase-analytics:24.0.0") }
ขั้นตอนที่ 2: เพิ่มปลั๊กอิน 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' }
ขั้นตอนที่ 3: เพิ่มส่วนขยาย 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 } } } }
ขั้นตอนที่ 4: ตั้งค่าการอัปโหลดสัญลักษณ์เนทีฟโดยอัตโนมัติ
Crashlytics ต้องทราบเกี่ยวกับสัญลักษณ์ในไบนารีแบบเนทีฟเพื่อให้สร้างสแต็กเทรซที่อ่านได้จากข้อขัดข้องของ NDK ปลั๊กอิน Gradle ของ Crashlytics มีงาน uploadCrashlyticsSymbolFileBUILD_VARIANT เพื่อทำให้กระบวนการนี้เป็นแบบอัตโนมัติ
เพื่อให้คุณเข้าถึงงานสำหรับการอัปโหลดสัญลักษณ์อัตโนมัติได้ โปรดตรวจสอบว่าได้ตั้งค่า
nativeSymbolUploadEnabledเป็นtrueในไฟล์ Gradle ของโมดูล (ระดับแอป)หากต้องการให้ชื่อเมธอดปรากฏในสแต็กเทรซ คุณต้องเรียกใช้
uploadCrashlyticsSymbolFileBUILD_VARIANTอย่างชัดแจ้งหลังจากสร้างไลบรารี NDK แต่ละครั้ง เช่น>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
ทั้ง Crashlytics SDK สำหรับ NDK และปลั๊กอิน Crashlytics Gradle ต้องอาศัยการมีอยู่ของรหัสบิลด์ GNU ภายในออบเจ็กต์ที่ใช้ร่วมกันแบบเนทีฟ
คุณสามารถยืนยันการมีอยู่ของรหัสนี้ได้โดยเรียกใช้
ในไบนารีแต่ละรายการ หากไม่มีรหัสบิลด์ ให้เพิ่มreadelf -n ลงในแฟล็กของระบบบิลด์เพื่อแก้ไขปัญหา-Wl,--build-id
ขั้นตอนที่ 5: บังคับให้เกิดข้อขัดข้องเพื่อทดสอบการตั้งค่าให้เสร็จสมบูรณ์
หากต้องการตั้งค่า 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 เพื่อตรวจสอบรายงานข้อขัดข้องทดสอบ
หากรีเฟรชคอนโซลแล้วและยังไม่เห็นข้อขัดข้องทดสอบหลังจากผ่านไป 5 นาที ให้เปิดใช้การบันทึกการแก้ไขข้อบกพร่องเพื่อดูว่าแอปส่งรายงานข้อขัดข้องหรือไม่
เพียงเท่านี้ก็เรียบร้อยแล้ว ตอนนี้ Crashlytics กำลังตรวจสอบข้อขัดข้องในแอปของคุณ และคุณสามารถดูและตรวจสอบรายงานข้อขัดข้องและสถิติในแดชบอร์ด Crashlytics ได้
ขั้นตอนถัดไป
(แนะนำ) รับความช่วยเหลือในการแก้ไขข้อบกพร่องของข้อขัดข้องที่เกิดจากข้อผิดพลาดด้านหน่วยความจำของระบบโดยรวบรวมรายงาน GWP-ASan ข้อผิดพลาดเกี่ยวกับหน่วยความจำเหล่านี้อาจเชื่อมโยงกับความเสียหายของหน่วยความจำภายในแอป ซึ่งเป็นสาเหตุหลักของช่องโหว่ด้านความปลอดภัยของแอป หากต้องการใช้ประโยชน์จากฟีเจอร์การแก้ไขข้อบกพร่องนี้ โปรดตรวจสอบว่าแอปของคุณเปิดใช้ GWP-ASan อย่างชัดแจ้ง และใช้ SDK Crashlytics ล่าสุดสำหรับ NDK (v18.3.6 ขึ้นไปหรือ Firebase BoM v31.3.0 ขึ้นไป)
ปรับแต่งการตั้งค่ารายงานข้อขัดข้องโดยเพิ่มการรายงานแบบเลือกใช้ บันทึก คีย์ และการติดตามข้อผิดพลาดที่ไม่ร้ายแรง
ผสานรวมกับ Google Play เพื่อให้คุณกรองรายงานข้อขัดข้องของแอป Android ตามแทร็ก Google Play ได้โดยตรงในแดชบอร์ด Crashlytics ซึ่งจะช่วยให้คุณมุ่งเน้นแดชบอร์ดไปที่บิลด์ที่เฉพาะเจาะจงได้ดีขึ้น
การแก้ปัญหา
หากเห็นสแต็กเทรซที่แตกต่างกันในคอนโซล Firebase และใน Logcat โปรดดูคู่มือการแก้ปัญหา
ตัวเลือกอื่นๆ สำหรับการอัปโหลดสัญลักษณ์
เวิร์กโฟลว์หลักในหน้านี้ด้านบนใช้ได้กับบิลด์ Gradle มาตรฐาน อย่างไรก็ตาม บางแอปใช้การกำหนดค่าหรือเครื่องมือที่แตกต่างกัน (เช่น กระบวนการบิลด์อื่นที่ไม่ใช่ Gradle) ในสถานการณ์เหล่านี้ ตัวเลือกต่อไปนี้อาจช่วยให้คุณอัปโหลดสัญลักษณ์ได้สำเร็จ
ตัวเลือก: อัปโหลดสัญลักษณ์สำหรับโมดูลไลบรารีและการขึ้นต่อกันภายนอก
ตัวเลือกนี้มีประโยชน์ในสถานการณ์ต่อไปนี้
- หากคุณใช้กระบวนการบิลด์ NDK ที่ปรับแต่งเองภายใน Gradle
- หากไลบรารีแบบเนทีฟสร้างขึ้นในโมดูลไลบรารี/โมดูลฟีเจอร์หรือมาจากบุคคลที่สาม ให้ทำดังนี้
- หากงานการอัปโหลดสัญลักษณ์อัตโนมัติไม่สำเร็จ หรือคุณเห็นข้อขัดข้องที่ไม่มีสัญลักษณ์ในแดชบอร์ด Crashlytics
ตัวเลือก: อัปโหลดสัญลักษณ์สำหรับบิลด์ที่ไม่ใช่ Gradle หรือไลบรารีแบบเนทีฟที่ไม่ได้แยกซึ่งเข้าถึงไม่ได้
ตัวเลือกนี้มีประโยชน์ในสถานการณ์ต่อไปนี้
หากคุณใช้กระบวนการบิลด์อื่นที่ไม่ใช่ Gradle
หากคุณได้รับไลบรารีแบบเนทีฟที่ไม่ได้แยกสัญลักษณ์ในลักษณะที่ทำให้ไม่สามารถเข้าถึงได้ระหว่างการบิลด์ Gradle