หากแอป Android ของคุณมีไลบรารีเนทีฟ คุณสามารถเปิดใช้สแต็กเทรซทั้งสแต็กและรายงานข้อขัดข้องโดยละเอียดสำหรับโค้ดแบบเนทีฟได้ จาก Firebase Crashlytics ด้วยการอัปเดตบิลด์ของแอปเล็กน้อย การกำหนดค่า
คู่มือนี้จะอธิบายวิธีกำหนดค่าการรายงานข้อขัดข้องด้วย SDK Firebase Crashlytics สำหรับ NDK
หากคุณกำลังมองหาวิธีเริ่มต้นใช้งาน Crashlytics ใน Unity โปรดดู คู่มือเริ่มต้นใช้งานสำหรับ Unity
ก่อนเริ่มต้น
เพิ่ม Firebase ลงใน Android หากยังไม่ได้เพิ่ม หากไม่มีแอป Android คุณก็ดาวน์โหลดได้ แอปตัวอย่าง
แนะนำ: หากต้องการให้ระบบแสดง บันทึกเบรดครัมบ์ เพื่อทำความเข้าใจการดำเนินการของผู้ใช้ที่นำไปสู่เหตุการณ์ข้อขัดข้อง ไม่ร้ายแรง หรือ ANR คุณต้องเปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase
หากโปรเจ็กต์ Firebase ที่มีอยู่ไม่มี Google Analytics เปิดใช้อยู่ คุณสามารถเปิดใช้ Google Analytics ได้จาก แท็บการผสานรวมของ
ในคอนโซล การตั้งค่าโปรเจ็กต์Firebase หากคุณกำลังสร้างโปรเจ็กต์ Firebase ใหม่ ให้เปิดใช้ Google Analytics ในระหว่างขั้นตอนการสร้างโปรเจ็กต์
ตรวจสอบว่าแอปมีเวอร์ชันขั้นต่ำที่จำเป็นต่อไปนี้
- Gradle 8.0
- ปลั๊กอิน Android Gradle 8.1.0
- ปลั๊กอิน Gradle 4.4.1 สำหรับบริการของ Google
ขั้นตอนที่ 1: เพิ่ม Crashlytics SDK สำหรับ NDK ลงในแอป
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (ปกติ<project>/<app-module>/build.gradle.kts
หรือ
<project>/<app-module>/build.gradle
)
เพิ่มทรัพยากร Dependency สำหรับไลบรารี NDK Crashlytics สำหรับ 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:33.1.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:19.0.3") implementation("com.google.firebase:firebase-analytics:22.0.2") }
ขั้นตอนที่ 2: เพิ่มปลั๊กอิน Gradle ขนาด Crashlytics ลงในแอป
ในไฟล์ Gradle ระดับราก (ระดับโปรเจ็กต์) (
<project>/build.gradle.kts
หรือ<project>/build.gradle
) ให้เพิ่ม ปลั๊กอิน Crashlytics Gradle บล็อก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.4.2" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.2" 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.4.2' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.2' 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
ทั้ง SDK Crashlytics สำหรับ NDK และปลั๊กอิน Crashlytics Gradle ขึ้นอยู่กับการมีอยู่ของรหัสบิลด์ GNU ภายในออบเจ็กต์ที่แชร์แบบเนทีฟ
คุณยืนยันว่ามีรหัสนี้ได้โดยการเรียกใช้
ในไบนารีแต่ละรายการ หากรหัสบิลด์คือ ไม่มี ให้เพิ่มreadelf -n
ลงในส่วน เพื่อแก้ไขปัญหา-Wl,--build-id
ขั้นตอนที่ 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 เพื่อดูข้อขัดข้องในการทดสอบ
หากรีเฟรชคอนโซลแล้ว แต่ยังไม่เห็นข้อขัดข้องจากการทดสอบ หลังจากผ่านไป 5 นาที เปิดใช้การบันทึกการแก้ไขข้อบกพร่อง เพื่อดูว่าแอปของคุณส่งรายงานข้อขัดข้องหรือไม่
เท่านี้ก็เรียบร้อย 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) ในกรณีเช่นนี้ ตัวเลือกต่อไปนี้อาจเป็น มีประโยชน์ในการอัปโหลดสัญลักษณ์
ตัวเลือก: อัปโหลดสัญลักษณ์สำหรับโมดูลไลบรารีและทรัพยากร Dependency ภายนอก
ตัวเลือกนี้จะมีประโยชน์ในสถานการณ์ต่อไปนี้
- หากคุณใช้กระบวนการบิลด์ NDK ที่กำหนดเองใน Gradle
- หากไลบรารีแบบเนทีฟสร้างขึ้นในโมดูลไลบรารี/ฟีเจอร์ หรือจัดทำโดย บุคคลที่สาม
- หากงานการอัปโหลดสัญลักษณ์อัตโนมัติ เกิดข้อผิดพลาดหรือคุณเห็นข้อขัดข้องที่ไม่ได้สัญลักษณ์ในแดชบอร์ด
ตัวเลือก: อัปโหลดสัญลักษณ์สำหรับบิลด์ที่ไม่ใช่ Gradle หรือไลบรารีเนทีฟที่ไม่ได้ Strip เข้าซึ่งเข้าถึงไม่ได้
ตัวเลือกนี้จะมีประโยชน์ในสถานการณ์ต่อไปนี้
หากใช้กระบวนการบิลด์ที่ไม่ใช่ Gradle
หากระบบส่งไลบรารีเนทีฟที่ไม่ได้ Strip ให้คุณในลักษณะดังกล่าว จะเข้าถึงไม่ได้ระหว่างบิลด์ Gradle