【发布时间】:2017-03-01 06:09:48
【问题描述】:
我正在尝试将 Crashlytics 支持添加到我的 Android 项目中,该项目使用 NDK 和 gradle CMake。这意味着我的共享项目需要符号。因此,如果我想为发布版本创建符号,我会调用 gradlew crashlyticsUploadSymbolsRelease
https://docs.fabric.io/android/crashlytics/ndk.html 中的官方文档说 符号生成和上传过程采用标准项目结构:src/main/obj 用于调试二进制文件,src/main/libs 用于 ndk 生成的发布二进制文件-构建。
在 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 来处理我的发布二进制文件。
所以我的问题是:
1) androidNdkOut 和 androidNdkLibsOut 之间的真正区别是什么?为什么我不能将调试二进制文件的路径放在一个和将二进制文件发布到另一个的路径?除了解释之外,一个具体的例子会很好。
2) 如果有一天我还想为我的调试库包含符号,我应该如何修改我的 gradle 文件?意思是命令
gradlew crashlyticsUploadSymbolsRelease 和 gradlew crashlyticsUploadSymbolsDebug 可以吗?
在Crashlytics NDK symbols and Gradle tasks 和Crashlytics NDK multi androidNdkOut path support 的线程中对此进行了讨论,但他们确实没有回答这两个问题。
【问题讨论】:
-
行号是否正常工作?您在哪里找到未剥离的二进制文件?您提供的那些路径仅包含剥离的 .so,不是吗?
标签: android-ndk cmake android-gradle-plugin crashlytics-android