【问题标题】:Crashlytics NDK for external subproject dependency外部子项目依赖的 Crashlytics NDK
【发布时间】:2018-01-14 09:59:37
【问题描述】:

我正在尝试为使用 NDK/JNI 的项目实施 Crashlytics。然而,JNI 部分是在一个外部加载的项目中,就像settings.gradle

include ':app', ':core'
project (':core').projectDir = new File(rootDir, '../core')

我读到一段时间以来,Crashlytics 应该会自动找到符号,而无需指定 androidNdkOutandroidNdkLibsOut。它不适用于我的场景,当我调用 ./gradlew crashlyticsUploadSymbols{flavor}Debug 时它抱怨错误的 androidNdkOut。

所以我在应用程序的build.gradle 中明确添加了这些路径:

crashlytics {
    enableNdk true
    androidNdkOut '../../core/build/intermediates/cmake/debug/obj'
    androidNdkLibsOut '../../core/build/intermediates/cmake/release/obj'
    manifestPath 'src/main/AndroidManifest.xml'
}

Crashlytics 现在确实找到了它们,crashlyticsUploadSymbols{flavor}Debug 返回成功。但它不能正常工作。一些错误在 Crashlytics 控制台中根本没有报告,其余的没有去混淆。 Crashlytics 在 logcat 中也显示了类似的内容:

W/CrashlyticsCore: No minidump data found in directory /data/data/com.example.app/files/.Fabric/com.crashlytics.sdk.android.crashlytics-ndk/native/1513601249792

我应该如何配置才能在 Crashlytics 控制台中正确记录 NDK 异常?

【问题讨论】:

    标签: android android-ndk java-native-interface crashlytics crashlytics-android


    【解决方案1】:

    您在build.gradle 中指定的配置不正确。

    androidNdkOut 应该指向目标文件,例如'../../core/build/intermediates/cmake/release/obj'

    androidNdkLibsOut 应该指向实际的库。在你的情况下,很可能是'../../core/build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib'

    【讨论】:

    • 我在我的项目中发现了一个类似的路径,它确实包含库。在配置中更改它,运行 crashlyticsUploadSymbols...,打开控制台,但崩溃日志仍然只告诉我每个堆栈跟踪行上的库名称和“缺失”。也许它只适用于新的崩溃?
    • 尝试使用一些简单的空指针使 JNI 层崩溃,但它没有出现在 crashlytics 控制台中。
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多