gpt4 book ai didi

android-ndk - 从命令行构建 Crashlytics NDK 符号

转载 作者:行者123 更新时间:2023-12-04 15:08:30 32 4
gpt4 key购买 nike

我正在尝试向我的 Android 项目添加 Crashlytics 支持,该项目使用 NDK 和 gradle CMake。这意味着我的共享项目需要符号。所以如果我想为发布版本创建符号,我会调用 gradlew crashlyticsUploadSymbolsRelease
官方文档在https://docs.fabric.io/android/crashlytics/ndk.html说符号生成和上传过程采用标准项目结构:用于调试二进制文件的 src/main/obj 和用于 ndk-build 生成的发布二进制文件的 src/main/libs。

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

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

因为我使用 gradle CMake 集成来构建我的 native 库,所以默认路径当然不起作用。我在 Release模式下的 native 库内置于 build/intermediates/cmake/release/obj目录并在 Debug模式下转到 build/intermediates/cmake/debug/obj目录。

通过反复试验,我认为如果我希望我的发布版本能够工作,我必须将 Release模式 native 库的路径放入两行,如下图所示。
crashlytics {
enableNdk true
androidNdkOut 'build/intermediates/cmake/release/obj'
androidNdkLibsOut 'build/intermediates/cmake/release/obj'
}

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

所以我的问题是:

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

2)如果有一天我还想为我的调试库包含符号,我应该如何修改我的 gradle 文件?意思是命令 gradlew crashlyticsUploadSymbolsRelease以及 gradlew crashlyticsUploadSymbolsDebug会工作?

主题 Crashlytics NDK symbols and Gradle tasks 中对此进行了讨论。和 Crashlytics NDK multi androidNdkOut path support但他们真的没有回答这两个问题。

最佳答案

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

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

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 的 Android Gradle 插件 2.2.0+ 时,该插件支持自动解析适当的 native 库路径。 DSL,让您不再需要设置 androidNdkOutandroidNdkLibsOut如果您使用的是最新的 Android Gradle 插件。在此处查看更多信息: https://docs.fabric.io/android/crashlytics/ndk.html#specifying-the-path-to-debug-and-release-binaries

    关于android-ndk - 从命令行构建 Crashlytics NDK 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40134153/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com