Nhận báo cáo sự cố NDK của Android

Nếu ứng dụng Android của bạn chứa thư viện gốc , bạn có thể bật dấu vết ngăn xếp đầy đủ và báo cáo sự cố chi tiết cho mã gốc của mình từ Firebase Crashlytics bằng một số cập nhật nhỏ cho cấu hình bản dựng ứng dụng của bạn.

Hướng dẫn này mô tả cách định cấu hình báo cáo sự cố với SDK Firebase Crashlytics cho NDK.

Nếu bạn đang tìm cách bắt đầu với Crashlytics trong các dự án Unity của mình, hãy xem hướng dẫn Bắt đầu Unity .

Trước khi bắt đầu

  1. Nếu bạn chưa có, hãy thêm Firebase vào dự án Android của bạn. Nếu chưa có ứng dụng Android, bạn có thể tải xuống ứng dụng mẫu .

  2. Khuyến nghị : Để tự động nhận nhật ký đường dẫn nhằm hiểu hành động của người dùng dẫn đến sự cố, sự kiện không gây tử vong hoặc ANR, bạn cần bật Google Analytics trong dự án Firebase của mình.

    • Nếu dự án Firebase hiện tại của bạn chưa bật Google Analytics, bạn có thể bật Google Analytics từ tab Tích hợp của > Cài đặt dự án trong bảng điều khiển Firebase.

    • Nếu bạn đang tạo dự án Firebase mới, hãy bật Google Analytics trong quy trình tạo dự án.

Bước 1 : Thêm SDK Crashlytics cho NDK vào ứng dụng của bạn

Trong tệp Gradle mô-đun (cấp ứng dụng) của bạn (thường là <project>/<app-module>/build.gradle.kts hoặc <project>/<app-module>/build.gradle ), hãy thêm phần phụ thuộc cho Crashlytics NDK thư viện dành cho Android. Chúng tôi khuyên bạn nên sử dụng BoM Android của Firebase để kiểm soát việc tạo phiên bản thư viện.

Để có trải nghiệm tối ưu với Crashlytics, chúng tôi khuyên bạn nên bật Google Analytics trong dự án Firebase và thêm SDK Firebase cho Google Analytics vào ứng dụng của mình.

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:32.8.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")
}

Bằng cách sử dụng Firebase Android BoM , ứng dụng của bạn sẽ luôn sử dụng các phiên bản tương thích của thư viện Firebase Android.

(Thay thế) Thêm phụ thuộc thư viện Firebase mà không cần sử dụng BoM

Nếu chọn không sử dụng BoM Firebase, bạn phải chỉ định từng phiên bản thư viện Firebase trong dòng phụ thuộc của nó.

Lưu ý rằng nếu bạn sử dụng nhiều thư viện Firebase trong ứng dụng của mình, chúng tôi thực sự khuyên bạn nên sử dụng BoM để quản lý các phiên bản thư viện nhằm đảm bảo rằng tất cả các phiên bản đều tương thích.

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.3")
    implementation("com.google.firebase:firebase-analytics:21.6.1")
}
Bạn đang tìm mô-đun thư viện dành riêng cho Kotlin? Bắt đầu từ tháng 10 năm 2023 (Firebase BoM 32.5.0) , cả nhà phát triển Kotlin và Java đều có thể phụ thuộc vào mô-đun thư viện chính (để biết chi tiết, hãy xem Câu hỏi thường gặp về sáng kiến ​​này ).

Bước 2 : Thêm plugin Crashlytics Gradle vào ứng dụng của bạn

  1. Trong tệp Gradle cấp cơ sở (cấp dự án) ( <project>/build.gradle.kts hoặc <project>/build.gradle ), hãy thêm plugin Crashlytics Gradle vào khối 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.1" 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.1' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '2.9.9' apply false
    }
    
  2. Trong tệp Gradle mô-đun (cấp ứng dụng) của bạn (thường là <project>/<app-module>/build.gradle.kts hoặc <project>/<app-module>/build.gradle ), hãy thêm plugin 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'
    }

Bước 3 : Thêm tiện ích mở rộng Crashlytics vào bản dựng của bạn

Trong tệp Gradle mô -đun (cấp ứng dụng) của bạn (thường là <project>/<app-module>/build.gradle.kts hoặc <project>/<app-module>/build.gradle ), hãy định cấu hình tiện ích mở rộng 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
          }
      }
  }
}

Bước 4 : Thiết lập tự động tải lên các ký hiệu gốc

Để tạo ra các dấu vết ngăn xếp có thể đọc được từ các sự cố NDK, Crashlytics cần biết về các ký hiệu trong tệp nhị phân gốc của bạn. Plugin Crashlytics Gradle bao gồm tác vụ uploadCrashlyticsSymbolFile BUILD_VARIANT để tự động hóa quy trình này.

  1. Để bạn có thể truy cập tác vụ tải biểu tượng tự động lên, hãy đảm bảo rằng nativeSymbolUploadEnabled được đặt thành true trong tệp Gradle mô-đun (cấp ứng dụng) của bạn.

  2. Để tên phương thức xuất hiện trong dấu vết ngăn xếp, bạn phải gọi tác vụ uploadCrashlyticsSymbolFile BUILD_VARIANT một cách rõ ràng sau mỗi bản dựng thư viện NDK của mình. Ví dụ:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. Cả SDK Crashlytics cho NDK và plugin Crashlytics Gradle đều phụ thuộc vào sự hiện diện của ID bản dựng GNU trong các đối tượng được chia sẻ gốc.

    Bạn có thể xác minh sự hiện diện của ID này bằng cách chạy readelf -n trên mỗi nhị phân. Nếu không có ID bản dựng, hãy thêm -Wl,--build-id vào cờ của hệ thống xây dựng của bạn để khắc phục sự cố.

Bước 5 : Buộc chạy thử nghiệm để hoàn tất quá trình thiết lập

Để hoàn tất việc thiết lập Crashlytics và xem dữ liệu ban đầu trong bảng điều khiển Crashlytics của bảng điều khiển Firebase, bạn cần thực hiện thử nghiệm sự cố.

  1. Thêm mã vào ứng dụng của bạn mà bạn có thể sử dụng để buộc thử nghiệm gặp sự cố.

    Bạn có thể sử dụng mã sau đây trong MainActivity của ứng dụng để thêm một nút vào ứng dụng mà khi nhấn vào sẽ gây ra sự cố. Nút được gắn nhãn "Kiểm tra sự cố".

    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));
    
  2. Xây dựng và chạy ứng dụng của bạn.

  3. Buộc thử nghiệm sự cố để gửi báo cáo sự cố đầu tiên cho ứng dụng của bạn:

    1. Mở ứng dụng của bạn từ thiết bị thử nghiệm hoặc trình mô phỏng.

    2. Trong ứng dụng của bạn, hãy nhấn nút "Kiểm tra sự cố" mà bạn đã thêm bằng mã ở trên.

    3. Sau khi ứng dụng của bạn gặp sự cố, hãy khởi động lại ứng dụng để ứng dụng của bạn có thể gửi báo cáo sự cố tới Firebase.

  4. Đi tới trang tổng quan Crashlytics của bảng điều khiển Firebase để xem sự cố thử nghiệm của bạn.

    Nếu bạn đã làm mới bảng điều khiển và vẫn không thấy lỗi kiểm tra sau 5 phút, hãy bật tính năng ghi nhật ký gỡ lỗi để xem ứng dụng của bạn có gửi báo cáo lỗi hay không.


Và thế là xong! Crashlytics hiện đang theo dõi ứng dụng của bạn để phát hiện sự cố và bạn có thể xem cũng như điều tra các báo cáo và thống kê sự cố trong bảng điều khiển Crashlytics.

Bước tiếp theo

  • (Được khuyến nghị) Nhận trợ giúp gỡ lỗi sự cố do lỗi bộ nhớ gốc bằng cách thu thập báo cáo GWP-ASan . Những lỗi liên quan đến bộ nhớ này có thể liên quan đến hỏng bộ nhớ trong ứng dụng của bạn, đây là nguyên nhân hàng đầu gây ra lỗ hổng bảo mật ứng dụng. Để tận dụng tính năng gỡ lỗi này, hãy đảm bảo ứng dụng của bạn đã bật rõ ràng GWP-ASan và sử dụng SDK Crashlytics mới nhất cho NDK (v18.3.6+ hoặc Firebase BoM v31.3.0+).

  • Tùy chỉnh thiết lập báo cáo sự cố của bạn bằng cách thêm báo cáo chọn tham gia, nhật ký, khóa và theo dõi các lỗi không nghiêm trọng.

  • Tích hợp với Google Play để bạn có thể lọc báo cáo sự cố của ứng dụng Android theo bản nhạc Google Play trực tiếp trong trang tổng quan Crashlytics. Điều này cho phép bạn tập trung tốt hơn vào bảng điều khiển của mình trên các bản dựng cụ thể.

Xử lý sự cố

Nếu bạn thấy các dấu vết ngăn xếp khác nhau trong bảng điều khiển Firebase và trong logcat, hãy tham khảo Hướng dẫn khắc phục sự cố .



Các tùy chọn thay thế để tải lên biểu tượng

Quy trình làm việc chính trên trang này ở trên có thể áp dụng cho các bản dựng Gradle tiêu chuẩn. Tuy nhiên, một số ứng dụng sử dụng cấu hình hoặc công cụ khác (ví dụ: quy trình xây dựng không phải Gradle). Trong những trường hợp này, các tùy chọn sau có thể hữu ích để tải biểu tượng lên thành công.

Tùy chọn : Tải lên các ký hiệu cho mô-đun thư viện và các phụ thuộc bên ngoài

Tùy chọn này có thể hữu ích trong các trường hợp sau:

  • Nếu bạn sử dụng quy trình xây dựng NDK tùy chỉnh trong Gradle
  • Nếu thư viện gốc của bạn được xây dựng trong mô-đun thư viện/tính năng hoặc do bên thứ ba cung cấp
  • Nếu tác vụ tải biểu tượng tự động lên không thành công hoặc bạn thấy các sự cố không có biểu tượng trong trang tổng quan

Tùy chọn : Tải lên các biểu tượng cho các bản dựng không phải Gradle hoặc các thư viện gốc chưa được giải mã không thể truy cập được

Tùy chọn này có thể hữu ích trong các trường hợp sau:

  • Nếu bạn sử dụng quy trình xây dựng không phải Gradle

  • Nếu các thư viện gốc chưa được gỡ bỏ của bạn được cung cấp cho bạn theo cách nào đó mà bạn không thể truy cập được trong quá trình xây dựng Gradle