หากแอป 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
เพื่อควบคุมการกำหนดเวอร์ชันไลบรารี
เราขอแนะนําให้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase และเพิ่ม Firebase SDK สําหรับ Google Analytics ลงในแอปเพื่อให้ได้รับประสบการณ์การใช้งาน Crashlytics ที่ดีที่สุด
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.3.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 เวอร์ชันที่เข้ากันได้เสมอ
(ทางเลือก) เพิ่มทรัพยากร 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.1.0") implementation("com.google.firebase:firebase-analytics:22.1.0") }
ขั้นตอนที่ 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
) ให้เพิ่มปลั๊กอิน 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
มีuploadCrashlyticsSymbolFileBUILD_VARIANT
งานที่จะทําให้กระบวนการนี้เป็นแบบอัตโนมัติ
เพื่อให้คุณสามารถเข้าถึงงานสำหรับการอัปโหลดสัญลักษณ์อัตโนมัติ โปรดตรวจสอบว่า มีการตั้งค่า
nativeSymbolUploadEnabled
เป็นtrue
ในโมดูล (ระดับแอป) ไฟล์ Gradleหากต้องการให้ชื่อเมธอดปรากฏในสแต็กเทรซ คุณต้องเรียกใช้
uploadCrashlyticsSymbolFileBUILD_VARIANT
task อย่างชัดแจ้งหลังจากการบิลด์แต่ละครั้งของไลบรารี 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+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