iOS+ 
  Android 
  Flutter 
  Unity 
 
หน้านี้จะให้ความช่วยเหลือในการแก้ปัญหาและตอบคำถามที่พบบ่อยเกี่ยวกับการใช้ Crashlytics  หากไม่พบสิ่งที่ต้องการหรือต้องการความช่วยเหลือเพิ่มเติม โปรดติดต่อทีมสนับสนุน Firebase 
การแก้ปัญหา/คำถามที่พบบ่อยทั่วไป  
ไม่เห็นบันทึกเบรดครัมบ์ 
หากไม่เห็นบันทึกเส้นทาง 
เราขอแนะนำให้ตรวจสอบการกำหนดค่าของแอปสำหรับ Google Analytics 
โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้
 
ไม่เห็นการแจ้งเตือนอัตราความเร็ว 
หากไม่เห็นการแจ้งเตือนความเร็ว โปรดตรวจสอบว่าคุณใช้
Crashlytics SDK เวอร์ชัน 18.6.0 ขึ้นไป (หรือ Firebase BoM  เวอร์ชัน 32.6.0 ขึ้นไป)
 
ไม่เห็นเมตริกแบบไม่มีข้อขัดข้อง (หรือเห็นเมตริกที่ไม่น่าเชื่อถือ) 
หากไม่เห็นเมตริกที่ไม่มีข้อขัดข้อง (เช่น ผู้ใช้และเซสชันที่ไม่มีข้อขัดข้อง) หรือเห็นเมตริกที่ไม่น่าเชื่อถือ ให้ตรวจสอบสิ่งต่อไปนี้
 
เหตุใดจึงมีการรายงาน ANR สำหรับ Android 11 ขึ้นไปเท่านั้น
 
Crashlytics  รองรับการรายงาน ANR สำหรับแอป Android จากอุปกรณ์ที่ใช้
Android 11 ขึ้นไป API พื้นฐานที่เราใช้เพื่อรวบรวม ANR
(getHistoricalProcessExitReasons )
มีความน่าเชื่อถือมากกว่าวิธีการที่ใช้ SIGQUIT หรือ Watchdog API นี้ใช้ได้เฉพาะในอุปกรณ์ Android 11 ขึ้นไป
 
ทำไม ANR บางรายการจึงไม่มี BuildId 
หาก ANR บางรายการไม่มี BuildId ให้แก้ปัญหาดังนี้
ตรวจสอบว่าคุณใช้ Crashlytics  Android SDK และ
Crashlytics ปลั๊กอิน Gradle เวอร์ชันล่าสุด 
หากคุณไม่มี BuildId สำหรับ Android 11 และ ANR บางรายการของ Android 12 แสดงว่าคุณอาจใช้ SDK, ปลั๊กอิน Gradle หรือทั้ง 2 อย่างที่ล้าสมัย
หากต้องการรวบรวม BuildId สำหรับ ANR เหล่านี้อย่างถูกต้อง คุณต้องใช้เวอร์ชันต่อไปนี้
Crashlytics  Android SDK v18.3.5 ขึ้นไป (Firebase BoM  v31.2.2 ขึ้นไป) 
Crashlytics  ปลั๊กอิน Gradle v2.9.4 ขึ้นไป 
  
ตรวจสอบว่าคุณใช้ตำแหน่งที่ไม่ใช่มาตรฐานสำหรับไลบรารีที่ใช้ร่วมกันหรือไม่ 
หากคุณมีเพียงBuildIdสำหรับไลบรารีที่ใช้ร่วมกันของแอป แสดงว่าคุณอาจไม่ได้ใช้ตำแหน่งเริ่มต้นมาตรฐานสำหรับไลบรารีที่ใช้ร่วมกัน
 หากเป็นเช่นนี้ Crashlytics  อาจค้นหาBuildIdที่เชื่อมโยงไม่ได้ เราขอแนะนำให้คุณพิจารณาใช้ตำแหน่งมาตรฐาน
สำหรับไลบรารีที่ใช้ร่วมกัน
 
ตรวจสอบว่าคุณไม่ได้ลบ BuildIds ในระหว่างกระบวนการสร้าง 
โปรดทราบว่าเคล็ดลับในการแก้ปัญหาต่อไปนี้ใช้ได้กับทั้ง ANR และข้อขัดข้องที่เกิดในโค้ดเนทีฟ
ตรวจสอบว่ามี BuildId หรือไม่โดยเรียกใช้ readelf -n ในไบนารี หากไม่มี BuildId ให้เพิ่ม -Wl,--build-id ลงในแฟล็กสำหรับ
ระบบบิลด์
 
ตรวจสอบว่าคุณไม่ได้ลบBuildIdโดยไม่ตั้งใจเพื่อ
ลดขนาด APK
 
หากคุณเก็บไลบรารีทั้งเวอร์ชันที่แยกและไม่ได้แยก ให้ตรวจสอบว่าได้
ชี้ไปยังเวอร์ชันที่ถูกต้องในโค้ด
 
  
 
 
ความแตกต่าง
  ระหว่างรายงาน ANR ในCrashlytics  แดชบอร์ดและ
  Google Play Console 
จำนวน ANR ระหว่าง Google Play กับ
Crashlytics  อาจไม่ตรงกัน ความแตกต่างนี้อาจเกิดขึ้นได้เนื่องจากกลไกการรวบรวมและรายงานข้อมูล ANR แตกต่างกัน
 Crashlytics  จะรายงาน ANR เมื่อแอป
เริ่มทํางานครั้งถัดไป ในขณะที่ Android Vitals จะส่งข้อมูล ANR หลังจากเกิด ANR
นอกจากนี้ Crashlytics  จะแสดงเฉพาะ ANR ที่เกิดขึ้นในอุปกรณ์ที่ใช้ Android 11 ขึ้นไปเท่านั้น ซึ่งแตกต่างจาก Google Play ที่แสดง ANR จากอุปกรณ์ที่ยอมรับข้อกำหนดในการให้บริการของ Google Play และยินยอมให้เก็บรวบรวมข้อมูล
 
ความแตกต่าง
  ระหว่าง Stack Trace ของ NDK ในแดชบอร์ด Crashlytics  กับ Logcat 
LLVM และ GNU Toolchain มีค่าเริ่มต้นและการจัดการที่แตกต่างกันสำหรับส่วนแบบอ่านอย่างเดียวของไบนารีของแอป ซึ่งอาจสร้าง Stack Trace ที่ไม่สอดคล้องกันในFirebase  คอนโซล หากต้องการลดปัญหานี้ ให้เพิ่มแฟล็ก Linker ต่อไปนี้
ลงในกระบวนการบิลด์
หากยังคงเห็นความไม่สอดคล้องกันของ Stack Trace (หรือหากไม่มีแฟล็กใดที่เกี่ยวข้องกับ Toolchain) ให้ลองเพิ่มสิ่งต่อไปนี้ลงในกระบวนการบิลด์แทน
-fno-omit-frame-pointer 
 
ฉันจะใช้ไบนารีตัวสร้างไฟล์สัญลักษณ์ Breakpad ของตัวเองสำหรับ NDK ได้อย่างไร 
Crashlytics  ปลั๊กอินจะรวม
เครื่องมือสร้างไฟล์สัญลักษณ์ Breakpad ที่ปรับแต่งแล้ว 
หากต้องการใช้ไบนารีของคุณเองเพื่อสร้างไฟล์สัญลักษณ์ Breakpad (เช่น หากต้องการสร้างไฟล์ปฏิบัติการแบบเนทีฟทั้งหมดในห่วงโซ่การสร้างจากแหล่งที่มา) ให้ใช้พร็อพเพอร์ตี้ส่วนขยาย symbolGeneratorBinary ที่ไม่บังคับเพื่อระบุเส้นทางไปยังไฟล์ปฏิบัติการ
หมายเหตุ:  ต้องใช้เครื่องมือสร้างไฟล์สัญลักษณ์ Breakpad เวอร์ชัน Linux สำหรับไบนารี Android  
คุณระบุเส้นทางไปยังไบนารีของเครื่องมือสร้างไฟล์สัญลักษณ์ Breakpad ได้ 1 ใน 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
properties
คุณใช้พร็อพเพอร์ตี้ com.google.firebase.crashlytics.breakpadBinary
 เพื่อระบุเส้นทางไปยังไฟล์ที่เรียกใช้งานได้
คุณอัปเดตไฟล์ Gradle Properties ด้วยตนเองหรืออัปเดตไฟล์
ผ่านบรรทัดคำสั่งได้ เช่น หากต้องการระบุเส้นทางผ่านบรรทัดคำสั่ง ให้ใช้คำสั่งต่อไปนี้
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \
  -Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS  \
  app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
  
 
 
ไม่พบข้อขัดข้องเมื่อใช้
  Dexguard 
หากคุณเห็นข้อยกเว้นต่อไปนี้ แสดงว่าคุณอาจใช้ DexGuard เวอร์ชันที่ไม่เข้ากันกับ Firebase Crashlytics  SDK
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
  
ข้อยกเว้นนี้จะไม่ทำให้แอปขัดข้อง แต่จะป้องกันไม่ให้แอปส่งรายงานข้อขัดข้อง วิธีแก้ปัญหามีดังนี้
ตรวจสอบว่าคุณใช้ DexGuard 8.x เวอร์ชันล่าสุด เวอร์ชันล่าสุด
มีกฎที่ SDK ของ Firebase Crashlytics  กำหนด
 
หากไม่ต้องการเปลี่ยนเวอร์ชัน DexGuard ให้ลองเพิ่มบรรทัดต่อไปนี้
ลงในกฎการปกปิดโค้ด (ในไฟล์กำหนดค่า DexGuard)
- keepresourcexmlelements   manifest / application / service / meta - data @value = cct  
 
 
เหตุใดฉันจึงเห็นข้อขัดข้อง
 จากไฟล์ .kt ที่ติดป้ายกำกับเป็นปัญหา .java 
เมื่อแอปใช้ Obfuscator ที่ไม่แสดงนามสกุลไฟล์
Crashlytics  จะสร้างปัญหาแต่ละรายการด้วยนามสกุลไฟล์ .java โดยค่าเริ่มต้น
เพื่อให้ Crashlytics  สร้างปัญหาที่มีนามสกุลไฟล์ที่ถูกต้องได้
โปรดตรวจสอบว่าแอปของคุณใช้การตั้งค่าต่อไปนี้
ใช้ Android Gradle 4.2.0 ขึ้นไป 
ใช้ R8 โดยเปิดการปิดบังไว้ หากต้องการอัปเดตแอปเป็น 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 โดยเปิดการปิดบัง 
 
เนื่องจากข้อขัดข้องใหม่ๆ จะมีนามสกุลไฟล์ที่ถูกต้องในลายเซ็นปัญหา
 คุณจึงอาจเห็นปัญหาใหม่ๆ .kt ซึ่งจริงๆ แล้วเป็นเพียงปัญหาที่ซ้ำกับปัญหาที่มีอยู่ซึ่งติดป้ายกำกับ .java ในFirebase คอนโซล เราพยายามระบุ
และแจ้งให้คุณทราบหาก.ktปัญหาใหม่มีลักษณะคล้ายกับ.javaปัญหาที่มีอยู่
 
ใครดู เขียน และลบหมายเหตุในปัญหาได้บ้าง 
หมายเหตุช่วยให้สมาชิกโปรเจ็กต์แสดงความคิดเห็นเกี่ยวกับปัญหาที่เฉพาะเจาะจงได้ด้วยคำถาม การอัปเดตสถานะ
และอื่นๆ
เมื่อสมาชิกในโปรเจ็กต์โพสต์โน้ต ระบบจะติดป้ายกำกับด้วยอีเมลของบัญชี Google
 อีเมลนี้จะแสดงพร้อมกับหมายเหตุต่อสมาชิกโปรเจ็กต์ทั้งหมดที่มีสิทธิ์ดูหมายเหตุ
ต่อไปนี้จะอธิบายสิทธิ์เข้าถึงที่จำเป็นในการดู เขียน และลบ
โน้ต 
 
การผสานรวม  
แอปยังใช้ SDK Google Mobile Ads  แต่ไม่พบข้อขัดข้อง 
หากโปรเจ็กต์ใช้ Crashlytics  ควบคู่กับ SDK ของ Google Mobile Ads 
มีแนวโน้มที่เครื่องมือรายงานข้อขัดข้องจะรบกวนเมื่อ
ลงทะเบียนตัวแฮนเดิลข้อยกเว้น หากต้องการแก้ไขปัญหานี้ ให้ปิดการรายงานข้อขัดข้องใน SDK ของ Mobile Ads  โดยเรียกใช้ disableSDKCrashReporting
 
ชุดข้อมูล BigQuery ของฉันอยู่ที่ไหน 
หลังจากลิงก์ Crashlytics  กับ BigQuery แล้ว ชุดข้อมูลใหม่ที่คุณสร้างจะอยู่ในสหรัฐอเมริกาโดยอัตโนมัติ ไม่ว่าโปรเจ็กต์ Firebase จะอยู่ที่ใด
 
Crashlytics  รองรับ armeabi ไหม
Firebase Crashlytics  NDK ไม่รองรับ ARMv5 (armeabi)
เราได้นำการรองรับ ABI นี้ออกแล้วตั้งแต่ NDK r17
 
ปัญหาเดิม  
ปัญหาที่ถดถอยคืออะไร 
ปัญหาเกิดการถดถอยเมื่อคุณปิดปัญหาไปก่อนหน้านี้ แต่
Crashlytics  ได้รับรายงานใหม่ว่าปัญหาเกิดขึ้นอีกครั้ง
Crashlytics  จะเปิดปัญหาที่ถดถอยเหล่านี้อีกครั้งโดยอัตโนมัติเพื่อให้คุณ
แก้ไขปัญหาดังกล่าวได้ตามความเหมาะสมกับแอป
ต่อไปนี้คือสถานการณ์ตัวอย่างที่อธิบายวิธีที่ Crashlytics  จัดหมวดหมู่ปัญหาเป็นรีเกรสชัน
เป็นครั้งแรกที่ Crashlytics  ได้รับรายงานข้อขัดข้องเกี่ยวกับข้อขัดข้อง "ก"
 Crashlytics  จะเปิดปัญหาที่เกี่ยวข้องกับการขัดข้องนั้น (ปัญหา "ก") 
คุณแก้ไขข้อบกพร่องนี้อย่างรวดเร็ว ปิดปัญหา "ก" แล้วจึงเผยแพร่แอปเวอร์ชันใหม่ 
Crashlytics  ได้รับรายงานอีกฉบับเกี่ยวกับปัญหา "ก" หลังจากที่คุณปิดปัญหาแล้ว
หากรายงานมาจากแอปเวอร์ชันที่ Crashlytics  ทราบ 
เมื่อคุณปิดปัญหา (หมายความว่าเวอร์ชันได้ส่งรายงานข้อขัดข้อง
สำหรับข้อขัดข้องใดๆ ) Crashlytics  จะไม่ถือว่าปัญหา
ดังกล่าวเป็นปัญหาที่เกิดซ้ำ เราจะปิดปัญหาต่อไป 
หากรายงานมาจากแอปเวอร์ชันที่ Crashlytics  ไม่ทราบ 
เกี่ยวกับ เมื่อคุณปิดปัญหา (หมายความว่าเวอร์ชันไม่เคย ส่งรายงานข้อขัดข้องใดๆ  สำหรับข้อขัดข้องใดๆ เลย) Crashlytics จะถือว่าปัญหาเกิดซ้ำและจะเปิดปัญหาอีกครั้ง 
  
 
หมายเหตุ:  ก่อนเดือนกุมภาพันธ์ 2022 Crashlytics  จัดประเภทปัญหาเป็น
การถดถอยเมื่อปัญหานั้นเกิดขึ้นอีกครั้งในแอปเวอร์ชันใดก็ได้  แม้ว่าจะเป็นแอป
เวอร์ชันที่เราทราบเมื่อคุณปิดปัญหาแล้วก็ตาม ซึ่งส่งผลให้Crashlytics  ระบุการถดถอยไม่ถูกต้องในบางครั้ง ตอนนี้เราใช้
รูปแบบที่อธิบายไว้ข้างต้น  
เมื่อเกิดปัญหาซ้ำ เราจะส่งการแจ้งเตือนการตรวจหาการเกิดซ้ำและเพิ่ม
สัญญาณการเกิดซ้ำลงในปัญหาเพื่อแจ้งให้คุณทราบว่า Crashlytics  ได้
เปิดปัญหาอีกครั้ง หากไม่ต้องการให้ระบบเปิดปัญหาอีกครั้งเนื่องจาก
อัลกอริทึมการถดถอยของเรา ให้ "ปิดเสียง" ปัญหาแทนการปิด
 
เหตุใดฉันจึงเห็นปัญหาที่ถดถอย
  สำหรับแอปเวอร์ชันเก่า 
หากรายงานมาจากแอปเวอร์ชันเก่าที่ไม่เคยส่งรายงานข้อขัดข้องเลยเมื่อคุณปิดปัญหา Crashlytics  จะถือว่าปัญหาดังกล่าวCrashlytics กลับมาเกิดซ้ำและจะเปิดปัญหาอีกครั้ง
สถานการณ์นี้อาจเกิดขึ้นในกรณีต่อไปนี้ คุณแก้ไขข้อบกพร่องและ
เผยแพร่แอปเวอร์ชันใหม่แล้ว แต่ยังมีผู้ใช้ที่ใช้แอปเวอร์ชันเก่า
ที่ไม่มีการแก้ไขข้อบกพร่อง หากเวอร์ชันเก่าเหล่านั้นไม่เคย ส่งรายงานข้อขัดข้องเลยเมื่อคุณปิดปัญหา และผู้ใช้เริ่มพบข้อบกพร่อง รายงานข้อขัดข้องเหล่านั้นจะทําให้เกิดปัญหาที่ถดถอย
หากไม่ต้องการให้ระบบเปิดปัญหาอีกครั้งเนื่องจากอัลกอริทึมการถดถอยของเรา ให้ "ปิดเสียง"
ปัญหาแทนการปิด
หมายเหตุ:  ก่อนเดือนกุมภาพันธ์ 2022 Crashlytics  จัดประเภทปัญหาเป็น
การถดถอยเมื่อปัญหานั้นเกิดขึ้นอีกครั้งในแอปเวอร์ชันใดก็ตาม แม้ว่าจะเป็นแอปเวอร์ชัน
ที่เราทราบเมื่อคุณปิดปัญหาแล้วก็ตาม ซึ่งส่งผลให้Crashlytics 
บางครั้งระบุการถดถอยอย่างไม่ถูกต้อง ตอนนี้เราใช้รูปแบบ
ที่อธิบายไว้ข้างต้น  หากเห็นการถดถอยที่ระบุไม่ถูกต้องจำนวนมากจากช่วงก่อนเดือนกุมภาพันธ์ 2022 คุณสามารถปิดอีกครั้งเพื่อป้องกันไม่ให้มีการเปิดอีก