2016-10-19 2 views
5

Я пытаюсь добавить поддержку Crashlytics в свой Android-проект, который использует NDK и gradle CMake. Это означает, что мне нужны символы для моих общих проектов. Так что, если я хочу, чтобы создать символы для сборки релиза я позвоню gradlew crashlyticsUploadSymbolsReleaseCrashlytics Создание символа NDK из командной строки

Официальный документ в https://docs.fabric.io/android/crashlytics/ndk.html говорит, что Процесс генерации символов и загрузка предполагает стандартную структуру проекта: SRC/главная/объект для отладки бинарных файлов, и src/main/libs для исполняемых файлов выпуска, созданных ndk-build.

В Gradle файле это означает, что новый блок, который, как следующее:

crashlytics { 
    enableNdk true 
    androidNdkOut 'src/main/obj' 
    androidNdkLibsOut 'src/main/libs' 
} 

Поскольку я использую Gradle CMake интеграции строить свои собственные LIBS, пути по умолчанию, конечно, не работают. Мои родные библиотеки в режиме выпуска встроены в каталог build/intermediates/cmake/release/obj, а в режиме отладки они идут в каталог build/intermediates/cmake/debug/obj.

Из проб и ошибок я понял, что, если я хочу, чтобы моя версия релиза работала, мне придется поместить путь к исходным библиотекам режима выпуска в обе строки, как показано ниже.

crashlytics { 
    enableNdk true 
    androidNdkOut 'build/intermediates/cmake/release/obj' 
    androidNdkLibsOut 'build/intermediates/cmake/release/obj' 
} 

Я просто действительно не понимают разницу между androidNdkOut и androidNdkLibsOut переменных, так как, по крайней мере в моем случае они указывают на тот же каталог. К счастью, это не проблема для меня, потому что мне просто нужны Crashlytics для работы с моими версиями.

Так что мои вопросы:

1) Что на самом деле разница между androidNdkOut и androidNdkLibsOut? Почему я не могу поместить путь к моим двоичным файлам отладки в один путь и путь к выпуску двоичных файлов для другого? Конкретный пример был бы приятным в дополнение к объяснению.

2) Как мне изменить свой файл градации, если в какой-то момент я хочу включить символы для моих библиотек отладки? Это означает, что команда gradlew crashlyticsUploadSymbolsRelease, а также gradlew crashlyticsUploadSymbolsDebug будет работать?

Об этом обсуждении в сообщениях Crashlytics NDK symbols and Gradle tasks и Crashlytics NDK multi androidNdkOut path support, но они действительно не отвечают на эти два вопроса.

+0

Вы получили номера строк? Где вы нашли нераспределенный бинарный файл? Те пути, которые вы предоставили, контактируют только с лишенными .so, нет? – urSus

ответ

3

Я работаю над командой Fabric, которая поддерживает нашу поддержку Crashlytics NDK.

Чтобы дать некоторый контекст - наш инструмент для загрузки символов основан на процессе ndk-build, который производит 2 набора двоичных файлов: ваши производственные двоичные файлы, которые лишены данных символа, и двоичные файлы отладки, которые не содержат данных символов для целей отладки.

The свойство Gradle карта переменных в ndk-build процессе, а именно:

  • androidNdkOut является каталогом, под которым необработанные, отлаживать двоичные файлы помещаются (эквивалентен $NDK_OUT переменным в ndk-build) называется obj по умолчанию.
  • androidNdkLibsOut - это каталог, в котором размещены разделенные, выпущенные двоичные файлы (эквивалентные переменной $NDK_LIBS_OUT в ndk-build) по умолчанию - libs.

Ожидаемое содержание этих путей являются архитектура конкретных каталогов для библиотек, так, например:

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

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

Все, что вам нужно сделать для нашей загрузки символов для работы для создания этих то же множество двоичных файлов из CMake, а затем установите androidNdkOut и androidNdkLibsOut в соответствующие каталоги верхнего уровня, где эти библиотеки можно найти.

EDIT/UPDATE 7 июля 2017

Мы только что выпустили версию 1.23.0 ткани плагин для Gradle, который поддерживает автоматически разрешающего соответствующие пути родной библиотеки, когда вы используете плагин Android Gradle 2.2.0+ с DSL externalNativeBuild, поэтому вам больше не нужно устанавливать androidNdkOut и androidNdkLibsOut, если вы используете последний плагин Android Gradle. Подробнее читайте здесь: https://docs.fabric.io/android/crashlytics/ndk.html#specifying-the-path-to-debug-and-release-binaries

Смежные вопросы