我的情景非常简单。我有一个本机库,我使用CMake使用externalNativeBuild
系统进行编译。这适用于构建我的应用程序,但我想在机器本地(即非仿真器)单元测试期间加载相同的库。
如果我有一个包含以下内容的现有Gradle NDK设置,有没有办法重用它来编译主机操作系统的库(例如macOS)?
defaultConfig {
ndk {
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}
externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static'
}
}
}
externalNativeBuild {
cmake {
path 'CMakeLists.txt'
}
}
答案 0 :(得分:1)
我也对这个主题进行了一些研究,如果没有大量的手工工作,这是不可能的。这就是我想出的:
遗憾的是Gradle没有开箱即用的支持,除了Gradle的Aadroid插件通过调用CMake或ndk-build为Android项目提供的内容。
最简单的方法似乎是使用另一个工具链来调用CMake来构建宿主二进制文件。您可以通过使用主机工具链直接调用Cmake或向Gradle添加一些自定义任务来为您执行此操作。
C中的单元测试
如果您只想对C代码进行单元测试,可以让CMake编译一个可执行文件,使用您常用的库并对其进行测试。
Java中的单元测试
如果你想在通过JNI调用C代码的Java代码级别上进行测试,你还必须将CMake输出的库移动到正确的位置,以便JVM在你尝试加载本机时找到它库。
为人类解决这个问题
IMO所有这一切都比它应该更难。 其他替代方案,这将使其更难以尝试
对于Android生态系统来说,如果有人专注于实施第二个建议,那将非常有趣。
答案 1 :(得分:-1)
你没有。 NDK仅针对Android。