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

Nếu ứng dụng Android của bạn có chứa các thư viện nguồ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 bạn từ căn cứ hỏa lực Crashlytics với một vài cập nhật nhỏ cho xây dựng cấu hình của ứng dụng.

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 kiếm cách bắt đầu với Crashlytics trong các dự án Unity của bạn, hãy kiểm tra Unity hướng dẫn bắt đầu .

Trước khi bắt đầu

  1. Nếu bạn chưa sẵn sàng, thêm căn cứ hỏa lực cho dự án Android của bạn. Nếu bạn không có một ứng dụng Android, bạn có thể tải về một ứng dụng mẫu .

  2. Khuyến cáo: Để có được các tính năng như sử dụng sụp đổ miễn phí, các bản ghi mẩu bánh mì, và cảnh báo tốc độ, bạn cần phải kích hoạt Google Analytics trong dự án căn cứ hỏa lực của bạn.

    • Nếu dự án căn cứ hỏa lực hiện tại của bạn không bật Google Analytics, bạn có thể kích hoạt Google Analytics từ tab Tích hợp của bạn > Cài đặt dự án trong căn cứ hỏa lực console.

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

Bước 1: Bật Crashlytics trong căn cứ hỏa lực console

  1. Đi đến bảng điều khiển Crashlytics trong căn cứ hỏa lực console.

  2. Hãy chắc chắn rằng ứng dụng của bạn được chọn từ menu thả xuống bên cạnh Crashlytics ở phía trên cùng của trang.

  3. Bấm Enable Crashlytics.

Bước 2: Thêm các căn cứ hỏa lực Crashlytics SDK cho NDK để ứng dụng của bạn

Sử dụng các căn cứ hỏa lực Android HĐQT , kê khai phụ thuộc cho các thư viện Crashlytics NDK Android trong module của bạn (ứng dụng cấp) tập tin Gradle (thường là app/build.gradle ).

Đối với một kinh nghiệm tối ưu với Crashlytics, chúng tôi khuyên phép Google Analytics trong dự án căn cứ hỏa lực của bạn và thêm SDK căn cứ hỏa lực cho Google Analytics để ứng dụng của bạn.

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:29.0.3')

    // Declare 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 việc sử dụng căn cứ hỏa lực Android HĐQT , ứng dụng của bạn sẽ luôn luôn sử dụng các phiên bản tương thích của các thư viện căn cứ hỏa lực Android.

(Alternative) Khai báo căn cứ hỏa lực phụ thuộc thư viện mà không sử dụng HĐQT

Nếu bạn chọn không sử dụng Firebase BoM, 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 căn cứ hỏa lực trong ứng dụng của bạn, chúng tôi khuyên bạn nên sử dụng HĐQT để quản lý các phiên bản thư viện, đảm bảo rằng tất cả các phiên bản tương thích.

dependencies {
    // Declare 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.2.6'
    implementation 'com.google.firebase:firebase-analytics:20.0.2'
}

Kotlin + KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:29.0.3')

    // Declare 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-ktx'
}

Bằng việc sử dụng căn cứ hỏa lực Android HĐQT , ứng dụng của bạn sẽ luôn luôn sử dụng các phiên bản tương thích của các thư viện căn cứ hỏa lực Android.

(Alternative) Khai báo căn cứ hỏa lực phụ thuộc thư viện mà không sử dụng HĐQT

Nếu bạn chọn không sử dụng Firebase BoM, 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 căn cứ hỏa lực trong ứng dụng của bạn, chúng tôi khuyên bạn nên sử dụng HĐQT để quản lý các phiên bản thư viện, đảm bảo rằng tất cả các phiên bản tương thích.

dependencies {
    // Declare 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.2.6'
    implementation 'com.google.firebase:firebase-analytics-ktx:20.0.2'
}

Bước 3: Thêm plugin căn cứ hỏa lực Crashlytics để ứng dụng của bạn

  1. Trong dự án cấp của bạn build.gradle tập tin, thêm plugin Crashlytics Gradle như một sự phụ thuộc buildscript.

    buildscript {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    
        dependencies {
            // ...
    
            // Check that you have the Google services Gradle plugin v4.3.2 or later
            // (if not, add it).
            classpath 'com.google.gms:google-services:4.3.10'
    
            // Add the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
        }
    }
    
    allprojects {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    }
  2. Trong ứng dụng cấp của bạn build.gradle tập tin, áp dụng các plugin Crashlytics Gradle:

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin
    
    // Apply the Crashlytics Gradle plugin
    apply plugin: 'com.google.firebase.crashlytics'
    

Bước 4: Thêm firebaseCrashlytics mở rộng để xây dựng của bạn

Trong mô-đun của bạn (ứng dụng cấp) tập tin Gradle (thường là app/build.gradle ), thêm firebaseCrashlytics mở rộng.

Java

// ...

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
          }
      }
  }
}

Kotlin + KTX

// ...

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
          }
      }
  }
}

Cần thiết cho targetSdkLevel 30 trở lên: Bạn phải tắt Pointer Tagging trong ứng dụng của bạn bằng cách thêm những điều sau đây để bạn AndroidManifest.xml :

<application android:allowNativeHeapPointerTagging="false">
...
</application>

Để biết thêm thông tin, đọc hỗ trợ phát triển cho Tagged Pointers .

Bước 5: Thiết lập tải lên tự động các biểu tượng bản địa

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

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

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

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. Cả Crashlytics SDK 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 việc xây dựng ID vắng mặt, thêm -Wl,--build-id để cờ xây dựng hệ thống của bạn để khắc phục vấn đề.

Bước 6: Lực lượng một vụ tai nạn kiểm tra để kết thúc cài đặt

Để hoàn tất quá trình thiết lập Crashlytics và xem dữ liệu ban đầu trong trang tổng quan Crashlytics của bảng điều khiển Firebase, bạn cần thực hiện kiểm tra sự cố.

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

    Bạn có thể sử dụng đoạn mã sau vào ứng dụng của bạn MainActivity để thêm một nút để ứng dụng của bạn, khi ép, gây ra một vụ tai nạn. Nút có nhãn "Kiểm tra sự cố".

    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));
    

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

  3. Buộc kiểm tra sự cố để gửi báo cáo sự cố đầu tiên của ứ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 vào nút "Kiểm tra sự cố" mà bạn đã thêm bằng cách sử dụ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 đến bảng điều khiển Crashlytics của các firebase console để xem vụ tai nạn thử nghiệm của bạn.

    Nếu bạn đã làm mới giao diện điều khiển và bạn vẫn không nhìn thấy vụ tai nạn kiểm tra sau năm phút, cho phép gỡ lỗi đăng nhập để xem nếu ứng dụng của bạn đang gửi báo cáo sự cố.


Và đó là nó! Crashlytics hiện đang theo dõi ứng dụng của bạn để tìm sự cố và bạn có thể xem và điều tra các báo cáo và thống kê sự cố trong trang tổng quan Crashlytics.



Các tùy chọn thay thế để tải lên các ký hiệu

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 lên thành công các ký hiệu.

Tùy chọn: những biểu tượng Tải lên cho module thư viện và 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 được cung cấp bởi bên thứ ba
  • Nếu nhiệm vụ tự động tải lên biểu tượng nào bị lỗi hoặc bạn đang nhìn thấy tai nạn unsymbolicated trong bảng điều khiển

Tùy chọn: những biểu tượng Tải lên cho phi Gradle xây dựng hoặc không thể tiếp cận các thư viện nguồn gốc unstripped

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 một quy trình xây dựng khác với Gradle

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



Xử lý sự cố

Nếu bạn thấy dấu vết ngăn xếp khác nhau trong căn cứ hỏa lực console và trong logcat, hãy tham khảo hướng dẫn khắc phục sự cố .

Bước tiếp theo