我有一个当前在 Visual Studio 中设置的 C++ 代码库(在 Windows 上运行),其中包含多个具有相互依赖关系的项目。我正在尝试将其转移到 Android Studio,以使其在 Android 上运行。
我熟悉 Visual Studio 和 C++,但对 Android Studio 的 Gradle 和 CMake 还很陌生。
我的(可能是错误的)期望是尝试像 Visual Studio 解决方案一样对待 Android Studio 项目,像 Visual Studio 项目一样对待 Android Studio 模块。鉴于我的代码库在 Visual Studio 中使用多个项目,我尝试在 Android Studio 中创建多个模块——每个模块都有自己的build.gradle
and CMakeLists.txt
files.
问题是我无法将代码的一部分(AS 模块)与另一部分链接。我将这些不同的部分编译为STATIC
using add_library()
(我计划有一个模块来创建SHARED
库,加载到 Java 中)。
我可以通过以下方式轻松获得包含的内容include_directories("../OtherModule/src/")
。但是,我无法将其链接到。我找不到要链接到的 .so (或类似)文件(通过target_link_libraries()
或同等学历)。当我从给定模块中提取 .arr 文件时,我没有看到任何 .so 或任何内容。
我意识到我可以简单地将整个代码库放在一个模块下(使用一个build.gradle
和一个CMakeLists.txt
——或网络CMakeLists.txt
正在使用add_subdirectory()
)。我不知道这是否可以,或者是否会花费更多/更少的时间来构建。
我确信可以有多种方法来设置它,这可能只是一个偏好问题。到目前为止,我所做的所有研究都只发现严格将本机代码与 Java 代码添加到同一模块中——执行基本的 JNI 本机桥接功能。我还没有找到一篇关于多个本机模块链接在一起的文章。
我希望有更多 Android 原生开发经验的人可以帮助我。谢谢!
TL;DR:简化的场景:(不关心 JNI 本机桥)我在 Android Studio 中有两个模块,两个模块都只包含本机代码。我想让每个模块都有自己的build.gradle
and CMakeLists.txt
,创建自己的STATIC
图书馆。一个模块依赖于另一个模块,并且必须设置正确的包含目录和链接目录。怎么办?!这是否正确(或者应该只有一个具有本机代码的模块)?
我问了一个相关问题here https://stackoverflow.com/questions/42796844/import-own-native-shared-library-from-sub-module-in-android-studio-cmake。在我看来,AS...
- ...实际上并不链接最终的模块库,除非它是
SHARED
(它确实允许模块内有静态“子库”);考虑共享最终的库 - 你必须System.loadLibrary()
但它特别是在 Java 中。
- ...不允许您将文件安装到其他位置(例如,从本机模块到 Android 应用程序)。我通过获取库来解决这个问题
set_target_properties( jniwrapper PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../libnative/build/intermediates/cmake/${BUILD_TYPE}/obj/${ANDROID_ABI}/libnative.so )
和设置BUILD_TYPE
在 build.gradle 中。但并不过分优雅。
总的来说,这似乎不是 AS 中值得鼓励的用例......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)