Crashlytics NDK для зависимости от внешнего подпроекта

Я пытаюсь внедрить Crashlytics для своего проекта, в котором используется NDK/JNI. Однако часть JNI находится в проекте, загруженном извне, например, в settings.gradle:

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

Я читал, что Crashlytics какое-то время должен автоматически находить символы без необходимости указывать androidNdkOut и androidNdkLibsOut. Это не сработало для моего сценария, когда я позвонил ./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 показывает что-то вроде этого в логарифме:

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

Что мне нужно сделать, чтобы моя конфигурация правильно регистрировала исключения NDK в консоли Crashlytics?


person Michał Klimczak    schedule 14.01.2018    source источник


Ответы (1)


Конфигурация, которую вы указали в build.gradle, неверна.

androidNdkOut должен указывать на объектные файлы, например '../../core/build/intermediates/cmake/release/obj'

androidNdkLibsOut должен указывать на настоящие библиотеки. в вашем случае скорее всего '../../core/build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib'

person silentnuke    schedule 17.01.2018
comment
Я нашел аналогичный путь в своем проекте, и он действительно содержит библиотеки. Изменил его в конфигурации, запустил crashlyticsUploadSymbols..., открыл консоль, но журналы сбоев по-прежнему сообщают мне только имя библиотеки и отсутствующие в каждой строке трассировки стека. Может это работает только для новых вылетов? - person Michał Klimczak; 17.01.2018
comment
Попытался сломать слой JNI с помощью простого нулевого указателя, но он не появился в консоли crashlytics. - person Michał Klimczak; 17.01.2018