Crashlytics NDK符号从命令行建立

问题描述 投票:5回答:2

我正在尝试将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'
}

因为我使用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'
}

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

所以我的问题是:

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

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

在线程Crashlytics NDK symbols and Gradle tasksCrashlytics NDK multi androidNdkOut path support中对此进行了讨论,但他们实际上并没有回答这两个问题。

android-ndk cmake android-gradle crashlytics-android
2个回答
4
投票

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

为了给出一些上下文 - 我们的符号上传工具基于ndk-build进程,该进程生成两组二进制文件:生产二进制文件,它们被剥离符号数据,以及调试二进制文件,它们具有完整的符号数据以用于调试目的。

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生成这些相同的二进制集,然后将androidNdkOutandroidNdkLibsOut设置到可以找到这些库的相应顶级目录。

编辑/更新2017年7月7日

我们刚刚发布了用于Gradle的Fabric插件版本1.23.0,它支持在您使用带有externalNativeBuild DSL的Android Gradle插件2.2.0+时自动解析相应的本机库路径,因此您不再需要设置androidNdkOutandroidNdkLibsOut如果你使用的是最新的Android Gradle插件。在这里查看更多信息:https://docs.fabric.io/android/crashlytics/ndk.html#specifying-the-path-to-debug-and-release-binaries


0
投票

如果mWillis提到的自动检测不起作用,请检查隐藏的日志文件:

~/.crashlytics/com.crashlytics.tools/crashlytics.log

无论出于何种原因谷歌都没有指出你的意思,而且似乎也没有从fabric.io文档中找到它。

© www.soinside.com 2019 - 2024. All rights reserved.