Crashlytics NDK符号从命令行建立

Sca*_*cam 6 cmake android-ndk android-gradle-plugin crashlytics-android

我正在尝试将Crashlytics支持添加到我的Android项目中,该项目使用NDK和gradle CMake.这意味着我需要符号来共享我的共享项目.所以,如果我想创建发布版本的符号,我会打电话gradlew crashlyticsUploadSymbolsRelease

https://docs.fabric.io/android/crashlytics/ndk.html中的官方文档说符号生成和上传过程采用标准项目结构:src/main/obj用于调试二进制文件,src/main/libs对于由ndk-build生成的发布二进制文件.

在gradle文件中,这意味着一个新的块,如下所示:

crashlytics {
    enableNdk true
    androidNdkOut 'src/main/obj'
    androidNdkLibsOut 'src/main/libs'
}
Run Code Online (Sandbox Code Playgroud)

因为我使用gradle CMake集成来构建我的本机库,所以默认路径当然不起作用.我在发布模式下的本机库内置在一个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'
}
Run Code Online (Sandbox Code Playgroud)

我真的不明白androidNdkOutandroidNdkLibsOut变量之间的区别,因为至少在我的场景中他们指向同一个目录.幸运的是,这对我来说不是问题,因为我只需要Crashlytics来处理我的发布二进制文件.

所以我的问题是:

1)androidNdkOut和之间的真正区别是androidNdkLibsOut什么?为什么我不能在一个路径中放置调试二进制文件的路径以及将二进制文件发布到其他路径?除了解释之外,一个具体的例子会很好.

2)如果有一天我想要为我的调试库包含符号,我应该如何修改我的gradle文件?意味着命令 gradlew crashlyticsUploadSymbolsRelease以及gradlew crashlyticsUploadSymbolsDebug将起作用?

Crashlytics NDK符号和Gradle任务以及Crashlytics NDK多androidNdkOut路径支持的线程中有关于此的讨论,但他们实际上没有回答这两个问题.

mWi*_*lis 5

我在Fabric团队工作,该团队维护了我们的Crashlytics NDK支持。

为了提供一些背景信息,我们的符号上传工具基于ndk-build生成2组二进制文件的过程:您的生产二进制文件(去除了符号数据)和调试二进制文件(具有完整的符号数据用于调试目的)。

Gradle属性映射到ndk-build流程中的变量,特别是:

  • androidNdkOut是默认情况下调用的未剥离调试二进制文件所在的目录(相当于中的$NDK_OUT变量ndk-buildobj
  • 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
Run Code Online (Sandbox Code Playgroud)

要使符号上载正常工作,您需要做的就是从CMake生成这些相同的二进制集,然后将您的androidNdkOut和设置androidNdkLibsOut为可以找到这些库的相应顶级目录。

编辑/更新2017年7月7日

我们刚刚发布的面料插件摇篮当你使用Android摇篮插件2.2.0+与支持自动解决相应的本地库路径的版本1.23.0 externalNativeBuildDSL,让您不再需要设置androidNdkOutandroidNdkLibsOut如果您正在使用最新的Android Gradle插件。在此处查看更多信息:https : //docs.fabric.io/android/crashlytics/ndk.html#specifying-the-path-to-debug-and-release-binaries