【问题标题】:How to configure Firebase Crashlytics to get NDK crash reports如何配置 Firebase Crashlytics 以获取 NDK 崩溃报告
【发布时间】:2021-02-17 01:28:29
【问题描述】:

我目前正在开发一个 Android 应用程序,其中一个我使用了 2 个本机库:

  • GStreamer
  • 裸露。

在某些 Android 设备上,在特定用例中,GStreamer 原生库使用以下堆栈跟踪使我的应用程序崩溃:

致命信号 11 (SIGSEV),代码 1 (SEGV_MAPPER),故障地址 0xaaaaaaaaaaaaaaa 在 tid 2458 (souphttpsrc0:sr), pid 2334 (应用程序.id)

#05 pc 00000000000e24a4 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: ceedf0f98da575de138b0c631aceca44)

#06 pc 0000000000083d98 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: ceedf0f98da575de138b0c631aceca44)

我可以在 logcat 中看到这个问题,但在我的 Firebase Crashlytics 控制台中看不到。为了了解 NDK 崩溃到我的应用程序中,我想为 NDK SDK 实现 Firebase Crashlytics。

我的应用程序包含 2 个风味维度:

  • 一个“应用”维度,用于在 2 个商店(Playstore 和一个自定义商店)上部署应用;
  • en“环境”维度(prod、staging、qa)。

如果我添加 2 个构建类型(调试和发布),这意味着我有 12 个构建变体。

对于 2 个“应用”维度,我使用了不同版本的 GStreamer 库。 GStreamer 没有直接内置到我的 Android 应用程序中,并使用构建 so 文件的专用 NDK 脚本。

baresip 是使用 cmake 内置到我的应用程序中的:

externalNativeBuild
{
  cmake
  {
    cFlags '-DHAVE_INTTYPES_H'
  }
}

这里是我的项目结构:

project/
 +- app/
      |
      +- src/
          |
          +- main/
                |
                +- ccp/
                     |
                     +- baresipenative.c
                     +- CMakeLists.txt
          +- appFlavor1/
                |
                + jniLibs/
                      |
                      +- arm64-v8a/
                                 |
                                 +- libc++_shared.so
                                 +- libgstreamer_android.so
                                 +- libgstreamernative.so
                      +- armeabi-v7a/
                                 |
                                 +- libc++_shared.so
                                 +- libgstreamer_android.so
                                 +- libgstreamernative.so
          +- appFlavor2/
                |
                + jniLibs/
                      |
                      +- arm64-v8a/
                                 |
                                 +- libc++_shared.so
                                 +- libgstreamer_android.so
                                 +- libgstreamernative.so
                      +- armeabi-v7a/
                                 |
                                 +- libc++_shared.so
                                 +- libgstreamer_android.so
                                 +- libgstreamernative.so

根据 Firebase Crashlytics NDK SDK,我需要将firebaseCrashlytics 属性配置到build.gradle 文件中。

当我仅配置 nativeSymbolUploadEnabled 时,Crashlytics 控制台中没有显示任何内容:

firebaseCrashlytics {
  nativeSymbolUploadEnabled true
}

所以我想我还需要像这样配置strippedNativeLibsDirunstrippedNativeLibsDir 属性:

firebaseCrashlytics {
  nativeSymbolUploadEnabled true
  strippedNativeLibsDir 'path/to/stripped/parent/dir'
  unstrippedNativeLibsDir 'path/to/unstripped/parent/dir'
}

如果我正确理解文档,在strippedNativeLibsDir 属性中,我应该将路径放入到baresip 构建文件的obj 目录?

unstrippedNativeLibsDir 属性中,我应该将GStreamer 的so 文件的路径放入?

提前感谢您的帮助!

【问题讨论】:

    标签: android firebase android-ndk crashlytics crashlytics-android


    【解决方案1】:

    为剥离和未剥离的库找到正确的路径本身就是一个完整的问题。根据您的问题,我不确定我们能否从您提供的项目结构中准确推断出要使用的目录!

    通常,类似于../build/intermediates/cmake 的路径用于未剥离的库,而../build/intermediates/stripped_native_libs 用于剥离的库字段。

    如果您使用 CMake 来构建您的原生库,为什么不尝试关注 this quick tutorial,这有望引导您朝着正确的方向前进;您总是可以跳过阅读有问题的 lib 目录的末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多