Android Studio 中的多个本机模块
Multiple Native Modules in Android Studio
我有一个C++代码库,目前在Visual Studio中设置(在Windows上运行),有多个相互依赖的项目。我正在尝试将其带到Android Studio,使其在Android上运行。 我熟悉Visual Studio和C++,但对Android Studio的Gradle和CMake很陌生。
我(可能是错误的)期望是尝试像Visual Studio Solutions这样的Android Studio项目和像Visual Studio Projects这样的Android Studio Modules。鉴于我的代码库在Visual Studio中使用了多个项目,我正在尝试在Android Studio中创建多个模块 - 每个模块都有自己的build.gradle
和CMakeLists.txt
文件。
问题是我无法让一段代码(AS 模块)与另一段代码链接。我正在使用add_library()
STATIC
编译这些不同的部分(我计划有一个模块来创建SHARED
库,以加载到 Java 中)。
我可以通过include_directories("../OtherModule/src/")
轻松获得包含的工作。但是,我无法将其链接。我找不到要链接到的 .so(或类似)文件(通过target_link_libraries()
或等效文件)。当我从给定模块中提取 .arr 文件时,我没有看到任何 .so 或任何东西。
我意识到我可以简单地将整个代码库放在一个模块下(使用一个build.gradle
和一个CMakeLists.txt
- 或使用add_subdirectory()
的CMakeLists.txt
网络)。我不知道这是否很好,或者是否需要更多/更少的时间来构建。
我敢肯定,可能有多种方法可以设置它,这可能只是一个偏好问题。到目前为止,我所做的所有研究都只发现严格地将本机代码添加到与Java代码相同的模块中 - 做基本的JNI本机桥接工作。我找不到一篇关于多个本机模块链接在一起的文章。
我希望在Android上有更多原生开发经验的人可以帮助我。谢谢!
TL;DR:简化的场景:(不关心JNI本机桥)我在Android Studio中有两个模块,都只有本机代码。我想让每个模块都有自己的build.gradle
和CMakeLists.txt
,创建自己的STATIC
库。一个模块依赖于另一个模块,必须设置正确的包含和链接目录。怎么做?!这是否正确(或者应该只有一个具有本机代码的模块)?
我在这里问了一个相关的问题。在我看来,AS...
- 。除非
SHARED
,否则实际上不会链接最终的模块库(它确实允许模块中的静态"子库");考虑共享最终库 - 不过,您必须专门在 Java 中System.loadLibrary()
它。 - 。不允许您将文件安装到其他地方(例如,从本机模块安装到 Android 应用)。我通过
set_target_properties( jniwrapper PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../libnative/build/intermediates/cmake/${BUILD_TYPE}/obj/${ANDROID_ABI}/libnative.so )
获取库并在build.gradle中设置BUILD_TYPE
来解决此问题。不过不太优雅。
总体而言,这似乎不是AS中鼓励的用例...
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 如何告诉本机节点模块所需的dll存储在哪里?
- 链接节点本机模块中的提升库,对象文件需要替代库版本
- C++ 中的 NAPI 本机模块正在部分执行(包含 std::thread)
- 节点本机模块 - 链接静态库
- Nodejs本机模块 - 如何删除调试符号
- 是否可以在本机C++模块之间共享数据
- Android Studio 中的多个本机模块
- 将未签名的字符串从本机客户端模块发送到浏览器
- NodeJS C++本机模块:创建指定的线程池
- NodeJS本机C ++ npm模块内存错误,开罗图像处理
- ReactNative公开C++本机模块
- 可用于本机模块的库
- 如何将事件处理程序附加到本机 Node.js 模块中的进程出口?