android - 从 Android Studio/CMake 中的子模块导入自己的本地共享库

标签 android android-studio android-ndk cmake

我有一个包含 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/

相关文章:

java - ListView 中的新 Activity

android - WiFi 功耗测量

android - 项目中的 build.gradle 与应用程序中的 build.gradle

android - 如何正确停止 Android openSLES 录音机?

Android java.lang.exceptioninitializererror System.loadLibrary

android - 在 Android 平板电脑的 map 上绘制叠加层时正确处理主线程连接上的网络

android - Material Component FloatingActionButton 中的 shapeAppearance 导致崩溃

android-studio - 在 Flutter(Android Studio) 中使用预制数据库

android - Android 中所有包都无法下载错误

android - 如何在 Android Studio 中禁用对项目的 C/C++ 支持?