我正在尝试将 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'
}
我真的不明白androidNdkOut
和androidNdkLibsOut
变量之间的区别,因为至少在我的场景中它们指向同一个目录。幸运的是,这对我来说不是问题,因为我只需要 Crashlytics 来处理我的发布二进制文件。
所以我的问题是:
androidNdkOut
1)和之间的真正区别是什么androidNdkLibsOut
?为什么我不能将调试二进制文件的路径放在一个和将二进制文件发布到另一个的路径?除了解释之外,一个具体的例子会很好。
2)如果有一天我想为我的调试库包含符号,我应该如何修改我的 gradle 文件?这意味着该命令
gradlew crashlyticsUploadSymbolsRelease
以及gradlew crashlyticsUploadSymbolsDebug
将起作用吗?
在线程Crashlytics NDK symbols and Gradle tasks和Crashlytics NDK multi androidNdkOut path support中对此进行了讨论,但他们确实没有回答这两个问题。