我有一个带有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-wrapper的首选方法是什么?我目前正在使用...

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的构建文件夹层次结构中获取库似乎不太明智。

替代方法似乎是指示Module2的CMakeLists.txt将文件安装到Module1的lib目录中,然后从那里导入。但是CMake似乎忽略了install命令。

(我知道我可以将模块放到一棵树下。)

谢谢!

最佳答案

替代方法如下:(Module2 CMakeLists.txt)

set_target_properties(${SHARED_LIBRARY_NAME}
                  PROPERTIES
                  LIBRARY_OUTPUT_DIRECTORY "<your-prefered-directory>/jniLibs/${ANDROID_ABI}")

09-11 20:16