Michał Klimczak
Michał Klimczak

Reputation: 13154

Crashlytics NDK for external subproject dependency

I'm trying to implement Crashlytics for my project which uses NDK/JNI. However the JNI part is in a project loaded externally like this in settings.gradle:

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

I read that for some time Crashlytics should find the symbols automatically without the need to specify androidNdkOut and androidNdkLibsOut. It didn't work for my scenario, when I called ./gradlew crashlyticsUploadSymbols{flavor}Debug it complained about wrong androidNdkOut.

So I added those paths explicitly in the app's 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 does find them right now and the crashlyticsUploadSymbols{flavor}Debug returns success. But it doesn't work properly. Some of the errors are not reported at all in the Crashlytics console, the rest is not deobfuscated. Also Crashlytics shows something like this in the logcat:

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

What should I do for my configuration to properly log the NDK exceptions in Crashlytics console?

Upvotes: 0

Views: 612

Answers (1)

silentnuke
silentnuke

Reputation: 2622

Configuration that you specified in build.gradle is not correct.

androidNdkOut should point to object files, something like '../../core/build/intermediates/cmake/release/obj'

androidNdkLibsOut should point to actual libraries. in your case, most probably '../../core/build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib'

Upvotes: 2

Related Questions