หากแอป Android ของคุณมี ไลบรารีดั้งเดิม คุณสามารถเปิดใช้งานการติดตามสแต็กแบบเต็มและรายงานข้อขัดข้องโดยละเอียดสำหรับโค้ดเนทีฟของคุณจาก Firebase Crashlytics พร้อมการอัปเดตเล็กน้อยในการกำหนดค่าบิวด์ของแอปของคุณ
คู่มือนี้จะอธิบายวิธีกำหนดค่าการรายงานข้อขัดข้องด้วย Firebase Crashlytics SDK สำหรับ NDK
หากคุณกำลังมองหาวิธีเริ่มต้นใช้งาน Crashlytics ในโปรเจ็กต์ Unity ของคุณ โปรดดู คู่มือการเริ่มต้นใช้งาน Unity
ก่อนที่คุณจะเริ่ม
หากคุณยังไม่ได้ เพิ่ม Firebase ลงในโปรเจ็กต์ Android ของคุณ หากไม่มีแอป Android คุณสามารถดาวน์โหลด แอปตัวอย่างได้
แนะนำ : หากต้องการรับคุณลักษณะต่างๆ เช่น ผู้ใช้ที่ปราศจากข้อขัดข้อง บันทึกเบรดครัมบ์ และการแจ้งเตือนความเร็ว คุณต้องเปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase ของคุณ
หากโปรเจ็กต์ Firebase ที่มีอยู่ของคุณไม่ได้เปิดใช้งาน Google Analytics คุณสามารถเปิดใช้งาน Google Analytics ได้จาก แท็บ การรวมระบบ ของคุณ
หากคุณกำลังสร้างโปรเจ็กต์ Firebase ใหม่ ให้เปิดใช้งาน Google Analytics ในระหว่างขั้นตอนการสร้างโปรเจ็กต์
ขั้นตอนที่ 1 : เพิ่ม Crashlytics SDK สำหรับ NDK ลงในแอปของคุณ
ใน ไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ<project>/<app-module>/build.gradle.kts
หรือ <project>/<app-module>/build.gradle
) ให้เพิ่มการพึ่งพาสำหรับ Crashlytics NDK ไลบรารี่สำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมเวอร์ชันไลบรารีเพื่อประสบการณ์การใช้งาน Crashlytics ที่ดีที่สุด เราขอแนะนำ ให้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase และเพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอปของคุณ
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.6.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.6.0") implementation("com.google.firebase:firebase-analytics:21.5.0") }
ขั้นตอนที่ 2 : เพิ่มปลั๊กอิน Crashlytics Gradle ลงในแอปของคุณ
ในไฟล์ Gradle ระดับราก (ระดับโครงการ) ของคุณ (
<project>/build.gradle.kts
หรือ<project>/build.gradle
) ให้เพิ่มปลั๊กอิน Crashlytics Gradle ลงในบล็อกplugins
:Kotlin
plugins { id("com.android.application") version "7.3.0" apply false // ... // Make sure that you have the Google services Gradle plugin dependency id("com.google.gms.google-services") version "4.4.0" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "2.9.9" apply false }
Groovy
plugins { id 'com.android.application' version '7.3.0' apply false // ... // Make sure that you have the Google services Gradle plugin dependency id 'com.google.gms.google-services' version '4.4.0' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '2.9.9' apply false }
ในไฟล์ Gradle ของ โมดูล (ระดับแอป) (โดยปกติคือ
<project>/<app-module>/build.gradle.kts
หรือ<project>/<app-module>/build.gradle
) ให้เพิ่มปลั๊กอิน Crashlytics Gradle: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 ปลั๊กอิน Crashlytics Gradle มีงาน uploadCrashlyticsSymbolFile BUILD_VARIANT
เพื่อทำให้กระบวนการนี้เป็นแบบอัตโนมัติ
เพื่อให้คุณสามารถเข้าถึงงานสำหรับการอัปโหลดสัญลักษณ์อัตโนมัติได้ ตรวจสอบให้แน่ใจว่า
nativeSymbolUploadEnabled
ได้รับการตั้งค่าเป็นtrue
ในไฟล์ Gradle ของโมดูล (ระดับแอป)เพื่อให้ชื่อเมธอดปรากฏในการติดตามสแต็กของคุณ คุณต้องเรียกใช้งาน
uploadCrashlyticsSymbolFile BUILD_VARIANT
อย่างชัดเจนหลังจากแต่ละบิลด์ของไลบรารี NDK ของคุณ ตัวอย่างเช่น:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
ทั้ง Crashlytics SDK สำหรับ NDK และปลั๊กอิน Crashlytics Gradle ขึ้นอยู่กับการมีอยู่ของรหัสบิวด์ GNU ภายในออบเจ็กต์ที่แชร์แบบเนทีฟ
คุณสามารถตรวจสอบการมีอยู่ของ ID นี้ได้โดยเรียกใช้
readelf -n
ในแต่ละไบนารี หากไม่มี ID บิลด์ ให้เพิ่ม-Wl,--build-id
ไปยังแฟล็กของระบบ build ของคุณเพื่อแก้ไขปัญหา
ขั้นตอนที่ 5 : บังคับให้การทดสอบขัดข้องเพื่อตั้งค่าให้เสร็จสิ้น
หากต้องการตั้งค่า Crashlytics ให้เสร็จสิ้นและดูข้อมูลเริ่มต้นในหน้าแดชบอร์ด Crashlytics ของคอนโซล Firebase คุณจะต้องบังคับการทดสอบข้อขัดข้อง
เพิ่มโค้ดลงในแอปที่คุณสามารถใช้เพื่อบังคับการทดสอบข้อขัดข้อง
คุณสามารถใช้โค้ดต่อไปนี้ใน
MainActivity
ของแอปเพื่อเพิ่มปุ่มลงในแอปที่เมื่อกดแล้วจะทำให้แอปขัดข้อง ปุ่มนี้มีป้ายกำกับว่า "ทดสอบความผิดพลาด"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))
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 ได้
ไปที่ แดชบอร์ด Crashlytics ของคอนโซล Firebase เพื่อดูการทดสอบข้อขัดข้อง
หากคุณรีเฟรชคอนโซลแล้ว แต่ยังไม่เห็นการทดสอบข้อขัดข้องหลังจากผ่านไปห้านาที ให้เปิดใช้งานการบันทึกการแก้ไขข้อบกพร่อง เพื่อดูว่าแอปของคุณส่งรายงานข้อขัดข้องหรือไม่
แค่นั้นแหละ! ขณะนี้ Crashlytics กำลังตรวจสอบแอปของคุณเพื่อหาข้อขัดข้อง และคุณจะดูและตรวจสอบรายงานข้อขัดข้องและสถิติได้ในหน้าแดชบอร์ด Crashlytics
ขั้นตอนถัดไป
(แนะนำ) รับความช่วยเหลือในการแก้ไขข้อขัดข้องที่เกิดจากข้อผิดพลาดของหน่วยความจำภายในโดย การรวบรวมรายงาน GWP-ASan ข้อผิดพลาดเกี่ยวกับหน่วยความจำเหล่านี้อาจเชื่อมโยงกับความเสียหายของหน่วยความจำภายในแอปของคุณ ซึ่งเป็นสาเหตุหลักของช่องโหว่ด้านความปลอดภัยของแอป หากต้องการใช้ประโยชน์จากฟีเจอร์การแก้ไขข้อบกพร่องนี้ โปรดตรวจสอบว่าแอปของคุณ เปิดใช้ GWP-ASan อย่างชัดเจน และใช้ Crashlytics SDK ล่าสุดสำหรับ NDK (v18.3.6+ หรือ Firebase BoM v31.3.0+)
ปรับแต่งการตั้งค่ารายงานข้อขัดข้องของคุณ โดยเพิ่มการรายงานที่เลือก บันทึก คีย์ และการติดตามข้อผิดพลาดที่ไม่ร้ายแรง
ผสานรวมกับ Google Play เพื่อให้คุณสามารถกรองรายงานข้อขัดข้องของแอป Android ตามแทร็ก Google Play ได้โดยตรงในแดชบอร์ด Crashlytics วิธีนี้ช่วยให้คุณมุ่งความสนใจไปที่แดชบอร์ดของคุณไปที่บิวด์เฉพาะได้ดีขึ้น
การแก้ไขปัญหา
หากคุณเห็นสแต็กเทรซที่แตกต่างกันในคอนโซล Firebase และใน logcat โปรดดู คำแนะนำในการแก้ปัญหา
ตัวเลือกอื่นสำหรับการอัพโหลดสัญลักษณ์
ขั้นตอนการทำงานหลักในหน้านี้ใช้ได้กับรุ่น Gradle มาตรฐาน อย่างไรก็ตาม บางแอปใช้การกำหนดค่าหรือเครื่องมือที่แตกต่างกัน (เช่น กระบวนการสร้างอื่นที่ไม่ใช่ Gradle) ในสถานการณ์เหล่านี้ ตัวเลือกต่อไปนี้อาจเป็นประโยชน์ในการอัพโหลดสัญลักษณ์ได้สำเร็จ
ตัวเลือก : อัปโหลดสัญลักษณ์สำหรับโมดูลไลบรารีและการขึ้นต่อกันภายนอก
ตัวเลือกนี้จะมีประโยชน์ในสถานการณ์ต่อไปนี้:
- หากคุณใช้กระบวนการสร้าง NDK แบบกำหนดเองภายใน Gradle
- หากไลบรารีดั้งเดิมของคุณถูกสร้างขึ้นในไลบรารี/โมดูลคุณสมบัติหรือจัดทำโดยบุคคลที่สาม
- หาก งานอัพโหลดสัญลักษณ์อัตโนมัติ ล้มเหลวหรือคุณพบข้อขัดข้องที่ไม่ได้แสดงสัญลักษณ์ในแดชบอร์ด
งานอัปโหลดสัญลักษณ์ Crashlytics มาตรฐานจะถือว่าคุณกำลังสร้างไลบรารีดั้งเดิมของคุณโดยเป็นส่วนหนึ่งของรุ่น Gradle ของโมดูลแอป โดยใช้เครื่องมือสร้าง NDK มาตรฐาน เช่น CMake
อย่างไรก็ตาม หากคุณใช้กระบวนการสร้าง NDK แบบกำหนดเองภายใน Gradle หรือไลบรารีดั้งเดิมของคุณถูกสร้างขึ้นในไลบรารี/โมดูลคุณสมบัติหรือจัดทำโดยบุคคลที่สาม คุณอาจต้องระบุเส้นทางไปยังไลบรารีที่ยังไม่ได้แยกอย่างชัดเจน เพื่อให้บรรลุเป้าหมายนี้ คุณสามารถเพิ่มคุณสมบัติ unstrippedNativeLibsDir
ภายในส่วนขยาย Crashlytics ในไฟล์ Gradle build ของคุณ
ตรวจสอบให้แน่ใจว่าคุณได้ทำงานเริ่มต้นต่อไปนี้จากเวิร์กโฟลว์หลักก่อนหน้านี้ในหน้านี้แล้ว:
เพื่อให้งานอัปโหลดสัญลักษณ์อัตโนมัติสามารถค้นหาข้อมูลสัญลักษณ์ของคุณได้ ให้เพิ่มสิ่งต่อไปนี้ลงในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็น
<project>/<app-module>/build.gradle.kts
หรือ<project>/<app-module>/build.gradle
):Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { release { configure
{ nativeSymbolUploadEnabled = true unstrippedNativeLibsDir = file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } } Groovy
// ... android { // ... buildTypes { release { firebaseCrashlytics { nativeSymbolUploadEnabled true unstrippedNativeLibsDir file("PATH/TO/UNSTRIPPED/DIRECTORY") } } } }
ปลั๊กอิน Crashlytics จะค้นหาไลบรารีดั้งเดิมที่มีนามสกุล
.so
ในไดเร็กทอรีที่ระบุแบบวนซ้ำ จากนั้น Crashlytics จะแยกสัญลักษณ์การแก้ไขข้อบกพร่องออกจากไลบรารีดังกล่าวทั้งหมดแล้วอัปโหลดไปยังเซิร์ฟเวอร์ Firebaseนี่คือสิ่งที่คุณสามารถระบุในคุณสมบัติ
unstrippedNativeLibsDir
:อาร์กิวเมนต์ใด ๆ ที่อนุญาตสำหรับ
org.gradle.api.Project#files(Object...)
รวมถึง:java.lang.String
,java.io.File
หรือorg.gradle.api.file.FileCollection
หลายไดเร็กทอรีสำหรับบิวด์รสชาติเดียวโดยการจัดเตรียมรายการหรืออินสแตนซ์
FileCollection
สุดท้าย บังคับให้ทดสอบข้อขัดข้อง เพื่อตั้งค่า Crashlytics ให้เสร็จสิ้น และดูข้อมูลเริ่มต้นในแดชบอร์ด Crashlytics ของคอนโซล Firebase
ตัวเลือก : อัปโหลดสัญลักษณ์สำหรับบิลด์ที่ไม่ใช่ Gradle หรือไลบรารีเนทีฟที่ไม่ได้แยกส่วนที่ไม่สามารถเข้าถึงได้
ตัวเลือกนี้จะมีประโยชน์ในสถานการณ์ต่อไปนี้:
หากคุณใช้กระบวนการสร้างอื่นที่ไม่ใช่ Gradle
หากมีการจัดเตรียมไลบรารีเนทิฟที่ไม่ได้แยกออกมาให้กับคุณในลักษณะที่ไม่สามารถเข้าถึงได้ในระหว่างการสร้าง Gradle
ตัวเลือกนี้กำหนดให้คุณต้องเรียกใช้คำสั่ง Firebase CLI เมื่อคุณสร้างรุ่น release หรือรุ่นใดๆ ที่คุณต้องการดูการติดตามสแต็กสัญลักษณ์ในคอนโซล Firebase
ตรวจสอบให้แน่ใจว่าคุณได้ทำงานเริ่มต้นต่อไปนี้จากเวิร์กโฟลว์หลักก่อนหน้านี้ในหน้านี้แล้ว:
โปรดทราบว่าด้วยตัวเลือกนี้ คุณไม่จำเป็นต้องเพิ่มส่วนขยาย
firebaseCrashlytics
หรือตั้งค่าการอัปโหลดสัญลักษณ์อัตโนมัติ เนื่องจากคุณจะใช้ Firebase CLI แทน (ขั้นตอนถัดไปด้านล่าง) เพื่อสร้างและอัปโหลดไฟล์สัญลักษณ์ของคุณตั้งค่าสภาพแวดล้อมและโปรเจ็กต์ของคุณสำหรับการอัพโหลดสัญลักษณ์:
ทำตามคำแนะนำเพื่อ ติดตั้ง Firebase CLI
หากคุณได้ติดตั้ง CLI แล้ว อย่าลืม อัปเดตเป็นเวอร์ชันล่าสุด
(สำหรับแอปที่ใช้ Android API ระดับ 30+ เท่านั้น) อัปเดตเทมเพลต
AndroidManifest.xml
ของแอปของคุณเพื่อปิดใช้งานการแท็กพอยน์เตอร์:ทำเครื่องหมายในช่องสำหรับ การตั้งค่าเครื่องเล่น Android > การตั้งค่าการเผยแพร่ > สร้าง > ไฟล์ Manifest หลักที่กำหนดเอง
เปิดเทมเพลตรายการที่อยู่ใน
Assets/Plugins/Android/AndroidManifest.xml
เพิ่มแอตทริบิวต์ต่อไปนี้ให้กับแท็กแอปพลิเคชัน:
<application android:allowNativeHeapPointerTagging="false" ... />
สร้างโครงการของคุณ
อัปโหลดข้อมูลสัญลักษณ์ของคุณ
เมื่อบิลด์ของคุณเสร็จสิ้น ให้สร้างไฟล์สัญลักษณ์ที่เข้ากันได้กับ Crashlytics และอัปโหลดไปยังเซิร์ฟเวอร์ Firebase โดยเรียกใช้คำสั่ง Firebase CLI ต่อไปนี้:
firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/SYMBOLS
FIREBASE_APP_ID : รหัสแอป Firebase Android ของคุณ (ไม่ใช่ชื่อแพ็คเกจของคุณ)
ตัวอย่างรหัสแอป Android ของ Firebase:1:567383003300:android:17104a2ced0c9b9b
ต่อไปนี้เป็นสองวิธีในการค้นหารหัสแอป Firebase ของคุณ:
ในไฟล์
google-services.json
รหัสแอปของคุณคือค่าmobilesdk_app_id
หรือในคอนโซล Firebase ให้ไปที่ การตั้งค่าโครงการ เลื่อนลงไปที่การ์ด แอปของคุณ จากนั้นคลิกที่แอป Firebase ที่ต้องการเพื่อค้นหารหัสแอป
PATH/TO/SYMBOLS : เส้นทางไปยังไฟล์สัญลักษณ์ที่สร้างโดย CLI
ส่งออกไปยังโครงการ Android Studio - PATH/TO/SYMBOLS สามารถเป็นไดเร็กทอรีใดก็ได้ Firebase CLI จะค้นหาไดเร็กทอรีที่ระบุซ้ำสำหรับไลบรารีเนทิฟที่มีนามสกุล .
.so
สร้าง APK โดยตรงจากภายใน Unity — PATH/TO/SYMBOLS คือเส้นทางของไฟล์สัญลักษณ์ซิปที่สร้างขึ้นในไดเร็กทอรีรากของโปรเจ็กต์เมื่อการสร้างของคุณเสร็จสิ้น (เช่น:
myproject/myapp-1.0-v100.symbols.zip
.zip )
ดูตัวเลือกขั้นสูงสำหรับการใช้คำสั่ง Firebase CLI สำหรับการสร้างและอัปโหลดไฟล์สัญลักษณ์
ธง คำอธิบาย --generator=csym
ใช้ตัวสร้างไฟล์สัญลักษณ์ cSYM แบบเดิมแทนตัวสร้างไฟล์ Breakpad เริ่มต้น
ไม่แนะนำให้ใช้ เราขอแนะนำให้ใช้ตัวสร้างไฟล์สัญลักษณ์ Breakpad เริ่มต้น
--generator=breakpad
ใช้ตัวสร้างไฟล์สัญลักษณ์ Breakpad
โปรดทราบว่าค่าเริ่มต้นสำหรับการสร้างไฟล์สัญลักษณ์คือ Breakpad ใช้แฟล็กนี้เฉพาะเมื่อคุณได้เพิ่มแล้ว
symbolGenerator { csym() }
ในการกำหนดค่าบิลด์ของคุณและคุณต้องการแทนที่เพื่อใช้ Breakpad แทน--dry-run
สร้างไฟล์สัญลักษณ์แต่ไม่ได้อัปโหลด
แฟล็กนี้มีประโยชน์หากคุณต้องการตรวจสอบเนื้อหาของไฟล์ที่ถูกส่ง
--debug
ให้ข้อมูลการดีบักเพิ่มเติม สุดท้าย บังคับให้ทดสอบข้อขัดข้อง เพื่อตั้งค่า Crashlytics ให้เสร็จสิ้น และดูข้อมูลเริ่มต้นในแดชบอร์ด Crashlytics ของคอนโซล Firebase
หลังจากที่คุณสร้างแอปโดยเป็นส่วนหนึ่งของการบังคับให้เกิดข้อขัดข้อง ตรวจสอบให้แน่ใจว่าได้เรียกใช้คำสั่ง Firebase CLI
crashlytics:symbols:upload
เพื่ออัปโหลดไฟล์สัญลักษณ์ของคุณ