我有一个包含 2 个模块的 Android Studio (2.3) 项目,使用 CMake 作为 native 代码。
Project
--> Module1 (app): java + native JNI-wrapper, linking to libnative.so
--> Module2 (libnative): native c++ code, producing libnative.so
将 libnative.so
(由 Module2 构建)链接到 Module1 中的 JNI 包装器的首选方法是什么?我目前使用...
Module1-CMakeLists.txt:
add_library( native SHARED IMPORTED )
set_target_properties( jniwrapper PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../libnative/build/intermediates/cmake/${BUILD_TYPE}/obj/${ANDROID_ABI}/libnative.so )
...其中 BUILD_TYPE
在 Module1 的 build.gradle
中设置,具体取决于构建类型。
如果我在构建完整项目之前在 AS 中使用“Make Module 'Module2'”,这会起作用。然而,从 gradle 的构建文件夹层次结构中获取库似乎相当不优雅。
另一种方法似乎是指示模块 2 的 CMakeLists.txt
将文件安装到模块 1 的 lib 目录中并从那里导入。但是 CMake 似乎忽略了 install
命令。
(我知道我可以将模块放在一棵树下。)
谢谢!
最佳答案
替代方案如下:(Module2 CMakeLists.txt
)
set_target_properties(${SHARED_LIBRARY_NAME}
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "<your-prefered-directory>/jniLibs/${ANDROID_ABI}")
关于android - 从 Android Studio/CMake 中的子模块导入自己的本地共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42796844/