iOS
Android
Flutter
Unity
หน้านี้จะให้ความช่วยเหลือในการแก้ปัญหาและคำตอบสำหรับคำถามที่พบบ่อย
คำถามเกี่ยวกับการใช้ Crashlytics หากคุณ
ไม่พบสิ่งที่คุณต้องการหรือต้องการความช่วยเหลือเพิ่มเติม โปรดติดต่อ
การสนับสนุน Firebase
การแก้ปัญหาทั่วไป/คำถามที่พบบ่อย
ไม่เห็น
เมตริกที่ปลอดอุบัติเหตุและ/หรือการแจ้งเตือนอัตราความเร็ว
หากคุณไม่เห็นเมตริกที่ไม่มีข้อขัดข้อง (เช่น ผู้ใช้และเซสชันที่ไม่พบข้อขัดข้อง)
และ/หรือการแจ้งเตือนอัตราความเร็ว โปรดตรวจสอบว่าคุณกำลังใช้
Crashlytics SDK v18.6.0 ขึ้นไป (หรือ Firebase BoM v32.6.0 ขึ้นไป)
ไม่เห็นบันทึกเบรดครัมบ์
หากคุณไม่เห็นตำแหน่ง
บันทึกเบรดครัมบ์
เราขอแนะนำให้คุณตรวจสอบการกำหนดค่าแอปสำหรับ Google Analytics
ตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้
เหตุใดจึงมีเฉพาะ ANR
รายงานว่าใช้กับ Android 11 ขึ้นไปได้ไหม
Crashlytics รองรับการรายงาน ANR สำหรับแอป Android จากอุปกรณ์ที่เรียกใช้
Android 11 ขึ้นไป API ที่สำคัญที่เราใช้ในการรวบรวม ANR
(get HistoryProcessExitReasons )
มีความน่าเชื่อถือมากกว่าวิธีการที่ใช้ SIGQUIT หรือ Watchdog API นี้
ใช้ได้เฉพาะในอุปกรณ์ Android 11 ขึ้นไปเท่านั้น
เหตุใด ANR บางรายการจึงหายไป
BuildId
ของพวกเขาไหม
หาก ANR บางรายการไม่มี BuildId
ให้แก้ปัญหาดังนี้
ตรวจสอบว่าคุณใช้ Crashlytics Android SDK ล่าสุดและ
เวอร์ชันปลั๊กอิน Crashlytics Gradle
หากคุณไม่เห็น BuildId
สำหรับ Android 11 และ ANR ของ Android 12 บางรายการ ให้ทำดังนี้
อาจเป็นไปได้ว่าคุณใช้ SDK ที่ล้าสมัย ปลั๊กอิน Gradle หรือทั้งคู่
คุณต้องใช้สิ่งต่อไปนี้เพื่อรวบรวม BuildId
สำหรับ ANR เหล่านี้อย่างเหมาะสม
เวอร์ชัน:
Crashlytics Android SDK v18.3.5 ขึ้นไป (Firebase BoM v31.2.2 ขึ้นไป)
ปลั๊กอิน Crashlytics Gradle v2.9.4 ขึ้นไป
ตรวจสอบว่าคุณใช้ตำแหน่งที่ไม่ใช่มาตรฐานสำหรับคลังภาพที่แชร์หรือไม่
หากคุณมีเพียง BuildId
รายการสำหรับไลบรารีที่ใช้ร่วมกันของแอป ก็มีแนวโน้ม
คุณไม่ได้ใช้ตำแหน่งเริ่มต้นแบบมาตรฐานสำหรับไลบรารีที่ใช้ร่วมกัน ถ้า
ในกรณีนี้ Crashlytics อาจไม่พบ
BuildId
ที่เกี่ยวข้อง เราขอแนะนำให้คุณลองใช้มาตรฐาน
ตำแหน่งของไลบรารีที่ใช้ร่วมกัน
ตรวจสอบว่าคุณไม่ได้ตัด BuildId
ออกระหว่างกระบวนการสร้าง
โปรดทราบว่าเคล็ดลับการแก้ปัญหาต่อไปนี้ใช้ได้กับทั้ง ANR และโฆษณาเนทีฟ
ขัดข้อง
ตรวจสอบว่ามี BuildId
อยู่หรือไม่โดยเรียกใช้ readelf -n
ในไบนารีของคุณ ถ้า
ไม่มี BuildId
ให้เพิ่ม -Wl,--build-id
ลงในแฟล็กสำหรับ
ระบบบิลด์
ตรวจสอบว่าคุณไม่ได้ตัด BuildId
ออกโดยไม่ได้ตั้งใจ
เพื่อลดขนาด APK
หากคุณยังมีไลบรารีเวอร์ชันที่มีการนำหรือถอดออกอย่างต่อเนื่อง โปรดทำดังนี้
ชี้ไปยังเวอร์ชันที่ถูกต้องในโค้ดของคุณ
ความแตกต่าง
ระหว่างรายงาน ANR ในหน้าแดชบอร์ด Crashlytics กับ
คอนโซล Google Play
จำนวน ANR ระหว่าง Google Play กับ
Crashlytics กรณีนี้เกิดขึ้นอยู่แล้วเนื่องจาก ความแตกต่างในกลไกของ
กำลังรวบรวมและรายงานข้อมูล ANR Crashlytics จะรายงาน ANR เมื่อแอป
จากนั้น Android Vitals จะส่งข้อมูล ANR หลังจากเกิด ANR
นอกจากนี้ Crashlytics จะแสดง ANR ที่เกิดขึ้นในอุปกรณ์ที่เรียกใช้เท่านั้น
Android 11 ขึ้นไป (เทียบกับ Google Play ที่แสดง ANR จากอุปกรณ์ที่มี)
ยอมรับความยินยอมในการเก็บรวบรวมข้อมูลและบริการ Google Play แล้ว
ความแตกต่าง
ระหว่างสแต็กเทรซ NDK ในหน้าแดชบอร์ด Crashlytics และ Logcat
เครื่องมือเชน LLVM และ GNU มีค่าเริ่มต้นและวิธีจัดการแบบอ่านอย่างเดียวที่แตกต่างกัน
ไบนารีของแอป ซึ่งอาจสร้างสแต็กเทรซที่ไม่สอดคล้องกัน
ในคอนโซล Firebase เพื่อลดปัญหานี้ ให้เพิ่มแฟล็ก Linker ต่อไปนี้
กับกระบวนการบิลด์ดังนี้
หากยังคงเห็นสแต็กเทรซไม่สอดคล้องกัน (หรือทั้ง 2 แฟล็กไม่ได้
ที่เกี่ยวข้องกับเครื่องมือเชนของคุณ) ลองเพิ่มสิ่งต่อไปนี้ลงในกระบวนการบิลด์
แทน:
-fno-omit-frame-pointer
ฉันจะใช้
ไบนารีของโปรแกรมสร้างไฟล์สัญลักษณ์ Breakpad ของฉันเองสำหรับ NDK
ปลั๊กอิน Crashlytics จะรวม
โปรแกรมสร้างไฟล์สัญลักษณ์ Breakpad แบบกำหนดเอง
หากคุณต้องการใช้ไบนารีของคุณเองในการสร้างไฟล์สัญลักษณ์ Breakpad (สำหรับ
ตัวอย่างเช่น หากคุณต้องการสร้างไฟล์สั่งการแบบเนทีฟทั้งหมดในห่วงโซ่บิลด์
แหล่งที่มา) ให้ใช้พร็อพเพอร์ตี้ส่วนขยาย symbolGeneratorBinary
ซึ่งไม่บังคับเพื่อระบุ
เส้นทางไปยังไฟล์ปฏิบัติการ
หมายเหตุ: ต้องใช้โปรแกรมสร้างไฟล์สัญลักษณ์ Breakpad เวอร์ชัน Linux เพื่อ
ไบนารีของ Android
คุณสามารถระบุเส้นทางไปยังไบนารีของโปรแกรมสร้างไฟล์สัญลักษณ์ Breakpad ได้ในหนึ่งไฟล์
ของ 2 วิธีต่อไปนี้
ตัวเลือกที่ 1 : ระบุเส้นทางผ่าน firebaseCrashlytics
นามสกุลในไฟล์ build.gradle
เพิ่มโค้ดต่อไปนี้ลงในไฟล์ build.gradle.kts
ระดับแอป
ปลั๊กอิน Gradle เวอร์ชัน 3.0.0 ขึ้นไป
android {
buildTypes {
release {
configure<CrashlyticsExtension> {
nativeSymbolUploadEnabled = true
// Add these optional fields to specify the path to the executable
symbolGeneratorType = "breakpad"
breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS ")
}
}
}
}
เวอร์ชันปลั๊กอินที่ต่ำกว่า
android {
// ...
buildTypes {
// ...
release {
// ...
firebaseCrashlytics {
// existing; required for either symbol file generator
nativeSymbolUploadEnabled true
// Add this optional new block to specify the path to the executable
symbolGenerator {
breakpad {
binary file("/PATH/TO/BREAKPAD/DUMP_SYMS ")
}
}
}
}
}
ตัวเลือกที่ 2 : ระบุเส้นทางผ่านเส้นพร็อพเพอร์ตี้ใน Gradle
ไฟล์คุณสมบัติ
คุณสามารถใช้ com.google.firebase.crashlytics.breakpadBinary
เพื่อระบุเส้นทางไปยังไฟล์ปฏิบัติการ
คุณอัปเดตไฟล์คุณสมบัติ Gradle ด้วยตนเองหรืออัปเดตไฟล์ก็ได้
ผ่านบรรทัดคำสั่ง เช่น การระบุเส้นทางผ่านคำสั่ง
ให้ใช้คำสั่งดังต่อไปนี้
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \
-Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \
app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
ไม่ได้รับข้อขัดข้องกับ
เดกซ์การ์ด
หากคุณเห็นข้อยกเว้นต่อไปนี้ อาจเป็นไปได้ว่าคุณกำลังใช้
DexGuard ที่เข้ากันไม่ได้กับ Firebase Crashlytics SDK:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
ข้อยกเว้นนี้จะไม่ทำให้แอปของคุณขัดข้อง แต่จะป้องกันไม่ให้แอปส่งข้อขัดข้อง
รายงาน วิธีแก้ไขปัญหามีดังนี้
ตรวจสอบว่าคุณใช้ DexGuard 8.x รุ่นล่าสุด เวอร์ชันล่าสุด
มีกฎที่ Firebase Crashlytics SDK กำหนด
หากไม่ต้องการเปลี่ยนเวอร์ชัน DexGuard ให้ลองเพิ่มรายการต่อไปนี้
บรรทัดกฎการสร้างความสับสน (ในไฟล์การกำหนดค่า DexGuard) ให้ทำดังนี้
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
ทำไมฉันจึงเห็นข้อขัดข้อง
จากไฟล์ .kt
รายการที่มีป้ายกำกับเป็นปัญหา .java
ใช่ไหม
เมื่อแอปใช้การปรับให้ยากต่อการอ่าน (Obfuscator) ที่ไม่เปิดเผยนามสกุลไฟล์
Crashlytics จะสร้างปัญหาแต่ละรายการกับนามสกุลไฟล์ .java
โดยค่าเริ่มต้น
เพื่อให้ Crashlytics สร้างปัญหาเกี่ยวกับนามสกุลไฟล์ที่ถูกต้องได้
โปรดตรวจสอบว่าแอปใช้การตั้งค่าต่อไปนี้
ใช้ Android Gradle 4.2.0 ขึ้นไป
ใช้ R8 โดยเปิดการปรับให้ยากต่อการอ่าน (Obfuscation) ไว้ ในการอัปเดตแอปเป็น R8 ให้ทำดังนี้
เอกสารประกอบ
โปรดทราบว่าหลังจากอัปเดตการตั้งค่าตามที่อธิบายข้างต้น คุณอาจเริ่มเห็น
ปัญหา .kt
ใหม่ที่ซ้ำกับปัญหา .java
ที่มีอยู่ โปรดดู
คำถามที่พบบ่อย เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับกรณีนั้น
เหตุใดฉันจึงเห็น
.kt
ปัญหาที่ซ้ำกับปัญหาที่มีอยู่
.java
ปัญหาใช่ไหม
ตั้งแต่ช่วงกลางเดือนธันวาคม 2021 Crashlytics ได้ปรับปรุงการรองรับแอปพลิเคชัน
ที่ใช้ Kotlin
ก่อนหน้านี้ Obfuscator ที่พร้อมใช้งานยังไม่ได้แสดงนามสกุลไฟล์ ดังนั้น
Crashlytics จะสร้างปัญหาแต่ละรายการด้วยนามสกุลไฟล์ .java
โดยค่าเริ่มต้น
แต่สำหรับ Android Gradle 4.2.0 นั้น R8 รองรับนามสกุลไฟล์
การอัปเดตนี้ทำให้ Crashlytics สามารถระบุได้ว่าแต่ละคลาสที่ใช้งานภายใน
แอปเขียนด้วย Kotlin และมีชื่อไฟล์ที่ถูกต้องในปัญหา
ลายเซ็น ระบุข้อขัดข้องไปยังไฟล์ .kt
รายการอย่างถูกต้องแล้ว (ตามความเหมาะสม)
หากแอปมีการตั้งค่าต่อไปนี้
แอปของคุณใช้ Android Gradle 4.2.0 ขึ้นไป
แอปของคุณใช้ R8 โดยเปิดการปรับให้ยากต่อการอ่าน (Obfuscation) ไว้
เนื่องจากข้อขัดข้องใหม่มีนามสกุลไฟล์ที่ถูกต้องอยู่ในปัญหา
คุณอาจเห็นปัญหา .kt
ใหม่ที่เป็นเพียงรายการที่ซ้ำกัน
ปัญหาที่มีอยู่ซึ่งติดป้ายกำกับ .java
ในคอนโซล Firebase เราพยายามระบุ
และจะแจ้งให้คุณทราบหากปัญหา .kt
ใหม่อาจซ้ำกับ
ปัญหาที่มีอยู่ซึ่งติดป้ายกำกับว่า .java
ใครสามารถดู เขียน และลบบันทึกเกี่ยวกับปัญหา
หมายเหตุช่วยให้สมาชิกโปรเจ็กต์สามารถแสดงความคิดเห็นเกี่ยวกับปัญหาหรือคำถามและสถานะที่เฉพาะเจาะจง
อัปเดต ฯลฯ
เมื่อสมาชิกโครงการโพสต์หมายเหตุจะมีป้ายกำกับเป็นอีเมล
ของคุณได้ อีเมลนี้จะปรากฏพร้อมกับโน้ตของทุกโปรเจ็กต์
สมาชิกที่มีสิทธิ์ดูโน้ต
ข้อมูลต่อไปนี้จะอธิบายถึงการเข้าถึงที่จำเป็นในการดู เขียน และลบ
หมายเหตุ
ใครสามารถดู เขียน และลบบันทึกเกี่ยวกับปัญหา
หมายเหตุช่วยให้สมาชิกโปรเจ็กต์สามารถแสดงความคิดเห็นเกี่ยวกับปัญหาหรือคำถามและสถานะที่เฉพาะเจาะจง
อัปเดต ฯลฯ
เมื่อสมาชิกโครงการโพสต์หมายเหตุจะมีป้ายกำกับเป็นอีเมล
ของคุณได้ อีเมลนี้จะปรากฏพร้อมกับโน้ตของทุกโปรเจ็กต์
สมาชิกที่มีสิทธิ์ดูโน้ต
ข้อมูลต่อไปนี้จะอธิบายถึงการเข้าถึงที่จำเป็นในการดู เขียน และลบ
หมายเหตุ
การผสานรวม
แอปยังใช้
SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google แต่ไม่เกิดข้อขัดข้อง
หากโปรเจ็กต์ของคุณใช้ Crashlytics ควบคู่ไปกับ SDK โฆษณาในอุปกรณ์เคลื่อนที่ของ Google
มีความเป็นไปได้ว่า ผู้รายงานปัญหาจะเข้ามาแทรกแซง
การลงทะเบียนเครื่องจัดการข้อยกเว้น ในการแก้ไขปัญหานี้ ให้ปิดการรายงานข้อขัดข้องใน
Mobile Ads SDK โดยการเรียกใช้ disableSDKCrashReporting
ชุดข้อมูล BigQuery ของฉันอยู่ที่ไหน
หลังจากลิงก์ Crashlytics กับ BigQuery แล้ว ชุดข้อมูลใหม่ที่คุณสร้างจะมีดังนี้
ในสหรัฐอเมริกาโดยอัตโนมัติ ไม่ว่าตำแหน่งของโฆษณา
โปรเจ็กต์ Firebase
Crashlytics รองรับ armeabi ไหม
Firebase Crashlytics NDK ไม่รองรับ ARMv5 (armeabi)
การรองรับ ABI นี้ถูกนำออกตั้งแต่วันที่ NDK r17
ปัญหาเดิม
การถดถอยคืออะไร
ปัญหาเคยมีการถดถอยเมื่อคุณปิดปัญหาไปก่อนหน้านี้แต่
Crashlytics จะได้รับรายงานใหม่ว่าเกิดปัญหาซ้ำ
Crashlytics จะเปิดปัญหาเดิมอีกครั้งโดยอัตโนมัติเพื่อให้คุณสามารถ
จัดการตามความเหมาะสมสำหรับแอปของคุณ
ต่อไปนี้คือสถานการณ์ตัวอย่างที่อธิบายวิธีที่ Crashlytics จัดหมวดหมู่
ที่เป็นการถดถอย
Crashlytics ได้รับรายงานข้อขัดข้องเกี่ยวกับข้อขัดข้องเป็นครั้งแรก
"A" Crashlytics เปิดปัญหาที่สอดคล้องกันสำหรับข้อขัดข้องดังกล่าว (ปัญหา "A")
คุณแก้ไขข้อบกพร่องนี้อย่างรวดเร็ว ปิดปัญหา "ก" แล้วเผยแพร่เวอร์ชันใหม่
แอปของคุณ
Crashlytics ได้รับรายงานอื่นเกี่ยวกับปัญหา "A" หลังจากปิด
ปัญหา
หากรายงานมาจากเวอร์ชันแอปที่ Crashlytics รู้จัก
เมื่อปิดปัญหาแล้ว (หมายความว่าเวอร์ชันได้ส่งข้อขัดข้อง
สำหรับข้อขัดข้องใดๆ เลย) Crashlytics จะไม่พิจารณา
ว่าเกิดปัญหาซ้ำ ปัญหานี้จะยังคงปิดอยู่
หากรายงานมาจากเวอร์ชันแอปที่ Crashlytics ไม่ได้
ทราบเมื่อคุณปิดปัญหาแล้ว (หมายความว่าเวอร์ชัน
ไม่เคย ส่งรายงานข้อขัดข้องใดๆ สำหรับข้อขัดข้องใดๆ เลย) จากนั้น
Crashlytics จะพิจารณาปัญหาเดิมและจะเปิด
ปัญหา
หมายเหตุ: ก่อนเดือนกุมภาพันธ์ 2022 Crashlytics ได้จัดหมวดหมู่ปัญหาเป็น
การถดถอยเมื่อเกิดปัญหานั้นซ้ำในแอปเวอร์ชันใดก็ได้ รวมถึงแอปเวอร์ชันด้วย
เวอร์ชันที่เรารู้เมื่อคุณปิดปัญหาแล้ว ซึ่งส่งผลให้เกิด
บางครั้ง Crashlytics ระบุการถดถอยอย่างไม่ถูกต้อง ตอนนี้เราใช้
ดังที่อธิบายไว้ข้างต้น
เมื่อปัญหาเกิดการถดถอย เราจะส่งการแจ้งเตือนการตรวจหาการถดถอยและเพิ่ม
สัญญาณการเกิดปัญหาซ้ำเพื่อแจ้งให้ทราบว่า Crashlytics มี
เปิดปัญหานี้อีกครั้ง หากคุณไม่ต้องการให้ปัญหาเปิดขึ้นใหม่เนื่องจาก
อัลกอริทึมการถดถอย "ปิดเสียง" ปัญหาแทนที่จะปิดไปเฉยๆ
ทำไมฉันจึงเห็นการถดถอย
สำหรับแอปเวอร์ชันเก่า
หากรายงานมาจากแอปเวอร์ชันเก่าที่ไม่เคยส่งรายงานข้อขัดข้อง
เมื่อปิดปัญหาแล้ว Crashlytics จะพิจารณาปัญหา
เกิดปัญหาซ้ำและจะเปิดปัญหาอีกครั้ง
สถานการณ์นี้อาจเกิดขึ้นได้ในสถานการณ์ต่อไปนี้: คุณได้แก้ไขข้อบกพร่องและ
เปิดตัวแอปเวอร์ชันใหม่แล้ว แต่คุณยังมีผู้ใช้เวอร์ชันเก่าอยู่
โดยไม่ต้องแก้ไขข้อบกพร่อง หากเวอร์ชันที่เก่ากว่าเวอร์ชันใดเวอร์ชันหนึ่งไม่ ได้ส่ง
รายงานข้อขัดข้องเลย เมื่อคุณปิดปัญหาแล้ว และผู้ใช้เหล่านั้นเริ่ม
หากพบข้อบกพร่อง ก็จะทำให้เกิดปัญหาเดิม
หากคุณไม่ต้องการให้ปัญหาเปิดขึ้นอีกครั้งเนื่องจากอัลกอริทึมการถดถอยของเรา คุณสามารถ "ปิดเสียง" ได้
ปัญหาแทนที่จะปิดไปเฉยๆ
หมายเหตุ: ก่อนเดือนกุมภาพันธ์ 2022 Crashlytics ได้จัดประเภทปัญหาเป็น
การถดถอยเมื่อเกิดปัญหานั้นซ้ำในแอปเวอร์ชันใดก็ตาม แม้แต่ในเวอร์ชันแอป
ที่เราทราบเมื่อคุณปิดปัญหานี้แล้ว การดำเนินการนี้ส่งผลให้เกิด Crashlytics
บางครั้งระบุการถดถอยอย่างไม่ถูกต้อง ตอนนี้เราใช้ข้อตกลง
ที่อธิบายไว้ข้างต้น หากคุณเห็นการถดถอยที่ระบุผิดพลาดเป็นจำนวนมากจาก
ก่อนเดือนกุมภาพันธ์ 2022 คุณสามารถปิดโฆษณาอีกครั้งเพื่อป้องกันไม่ให้เปิดได้อีก