Crashlytics Android NDK:丢失崩溃报告中的所有符号

use*_*354 7 android android-ndk crashlytics crashlytics-android

我们的本地Crashlytics崩溃报告最近遗漏了所有符号信息.我曾希望最新的Crashlytics NDK可以解决这个问题,但事实并非如此.

我看到有一个类似的查询,但在这种情况下,我没有使用Firebase,只是Crashlytics,并且已经成功地做了很长一段时间.

我们的build.gradle(使用CMake和Gradle 3.0.0或3.1.0 Android插件 - 无论哪种方式相同)包含:

buildscript {
    ...
    dependencies {
        ...
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
...
dependencies {
    ...
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true
    }
    implementation 'com.crashlytics.sdk.android:crashlytics-ndk:2.0.2'
}
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的,并使用所有最新的Fabric组件,除非我遗漏了一些东西.

然后我补充说:

crashlytics {
    enableNdk true
    manifestPath 'AndroidManifest.xml'
}

tasks.whenTaskAdded { task ->
    if (task.name.startsWith('assemble')) {
        task.finalizedBy "crashlyticsUploadSymbols" + task.name.substring('assemble'.length())
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我工作时不需要的.(并且,不,只是添加崩解剂块是不够的.)

这给了我实际在这个项目中构建的.cpp文件的符号.它仍然没有我链接的.a文件的符号,甚至对于libc ++ _ shared.so也没有!

Jer*_*ome 0

对于Java

\n\n

https://docs.fabric.io/android/crashlytics/dex-and-proguard.html

\n\n

配置 ProGuard 和 DexGuard

\n\n

我们\xe2\x80\x99 使您可以在应用程序中轻松设置 ProGuard 或 DexGuard 并接收反混淆的崩溃报告。首先,Fabric 在内部使用注释,因此将以下行添加到您的配置文件中:

\n\n
-keepattributes *Annotation*\n
Run Code Online (Sandbox Code Playgroud)\n\n

接下来,为了提供最有意义的崩溃报告,请将以下行添加到您的配置文件中:

\n\n
-keepattributes SourceFile,LineNumberTable\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果没有此规则,Crashlytics 仍将运行,但您的崩溃报告将不包含正确的文件名或行号。

\n\n

对于C++

\n\n

https://docs.fabric.io/android/crashlytics/ndk.html

\n\n

指定调试和发布二进制文件的路径

\n\n

为了正确地符号化和处理本机崩溃,我们需要来自本机二进制文件的符号。通常,Android\xe2\x80\x99s 本机二进制构建过程会生成两组二进制文件:一组带有调试符号,一组将打包到最终 APK 中。Fabric 插件使用两组二进制文件在您的计算机上生成符号文件。符号生成和上传过程假设您的项目将有两个目录 - 一个用于调试二进制文件(下面称为 obj),另一个用于发布二进制文件(下面称为 libs) - 按特定于体系结构的文件夹进行细分。

\n\n

当使用 Gradle 版本 2.2.0+ 的 Android 插件和 externalNativeBuild DSL 构建项目时,Fabric 插件能够自动检测每个本机构建变体所需的目录,以便生成适当的符号文件。

\n\n
obj/  \n    \xe2\x80\x94 armeabi  \n        + lib1.so  \n        + lib2.so  \n    \xe2\x80\x94 x86  \n        + lib1.so  \n        + lib2.so  \n\nlibs/  \n    \xe2\x80\x94 armeabi  \n        + lib1.so  \n        + lib2.so  \n    \xe2\x80\x94 x86  \n        + lib1.so  \n        + lib2.so  \n
Run Code Online (Sandbox Code Playgroud)\n\n

调试和发布二进制文件的路径可以通过 androidNdkOut(默认:src/main/obj)和 androidNdkLibsOut(默认:src/main/libs)属性手动控制。Ant 用户可以在fabric.properties 文件中修改这些内容。Gradle 用户可以通过 build.gradle 中的 crashlytics {} 块来控制这些。

\n\n

蚂蚁:ant crashlytics-upload-symbols

\n\n

摇篮:./gradlew crashlyticsUploadSymbols{Variant}

\n\n

例如:./gradlew crashlyticsUploadSymbolsRelease

\n\n

您还应该阅读“上传外部依赖项的符号”,它适用于您的代码。

\n