gpt4 book ai didi

android - Crashlytics 安卓 NDK : missing all symbols in crash reports

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:36 25 4
gpt4 key购买 nike

我们的本地 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'
}

这似乎是正确的,并且使用所有最新的 Fabric 组件,除非我遗漏了什么。

然后我补充说:

crashlytics {
enableNdk true
manifestPath 'AndroidManifest.xml'
}

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

前段时间当它工作时我不需要这些。 (而且,不,仅仅添加 crashlytics block 是不够的。)

这为我在该项目中实际构建的 .cpp 文件提供了符号。它仍然没有我链接的 .a 文件的符号,甚至没有 libc++_shared.so 的符号!

最佳答案

Java

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

配置 ProGuard 和 DexGuard

我们已经简化了在您的应用中设置 ProGuard 或 DexGuard 并接收去混淆的崩溃报告的过程。首先,Fabric 内部使用注解,所以在你的配置文件中添加下面一行:

-keepattributes *Annotation*

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

-keepattributes SourceFile,LineNumberTable

Crashlytics 在没有此规则的情况下仍然可以运行,但您的崩溃报告将不会包含正确的文件名或行号。

对于 C++

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

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

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

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

obj/  
— armeabi
+ lib1.so
+ lib2.so
— x86
+ lib1.so
+ lib2.so

libs/
— armeabi
+ lib1.so
+ lib2.so
— x86
+ lib1.so
+ lib2.so

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

Ant :ant crashlytics-upload-symbols

Gradle :./gradlew crashlyticsUploadSymbols{Variant}

例如:./gradlew crashlyticsUploadSymbolsRelease

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

关于android - Crashlytics 安卓 NDK : missing all symbols in crash reports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49511783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com