Android Studio 中的多个本机模块

2024-04-04

我有一个当前在 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...

  1. ...实际上并不链接最终的模块库,除非它是SHARED(它确实允许模块内有静态“子库”);考虑共享最终的库 - 你必须System.loadLibrary()但它特别是在 Java 中。
  2. ...不允许您将文件安装到其他位置(例如,从本机模块到 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(使用前将#替换为@)

Android Studio 中的多个本机模块 的相关文章

随机推荐

  • 将逗号分隔的记录放入字符串数组中?

    我正在尝试读取一个 BufferedReader 它读取包含用逗号分隔的记录的文件 我想将每个字符串 或记录 拆分在两个逗号之间 去掉双引号 然后将每个字符串放入字符串数组的索引中 例如 假设我的文件中有这一行 0001 00203 824
  • 是否有用于带有数据 uri 的链接下载的 Polyfill?

    我有一些代码应该由服务器生成 a href teszt a 它适用于当前的 chrome firefox opera 我希望它支持 MSIE11 AFAIKmsSaveBlob是解决方案 是否有我可以使用的现有 js polyfill 或者
  • 处理 wicket 中 AutoCompleteTextField 的 onchange 事件

    我正在使用 Java 和 Wicket 为 Web 应用程序编写一个自动完成组件 当用户选择自动完成列表的选项之一时 有没有办法处理 onchange 事件来运行一些代码 我尝试在自动完成文本字段中执行此操作 setOutputMarkup
  • Jenkins 不等待 Docker 命令完成

    我试图让 Jenkins 在 Jenkins 从机上的 docker 中运行以下命令 docker run i v pwd opt myapp w opt myapp t mydockerimage bin bash c setup dev
  • MongoDB Atlas 搜索中多个文档具有相同的搜索分数

    有没有办法提高 Atlas 搜索中精确匹配的分数 我在获取 hi 从英语到法语的正确 最佳翻译时遇到问题 经过一番调试后 我发现从聚合返回的前三 3 个文档的得分相同 均为 2 362138271331787 我期望 hi 具有更高的分数
  • 如何在网页中打印适合纸张尺寸(A3、A4、A5 等)的图像?

    我目前正在使用 IE9 和媒体查询 我不需要在其他浏览器中使用此功能 我尝试使用一组规则 例如 page size auto margin 10mm 10mm 10mm 10mm 匹配所有 A 格式 A0 A1 A2 等 的毫米的规则 包括
  • 比较 LINQ-to-SQL 中的 byte[] 和使用模拟的单元测试

    我有以下方法 User IDataContext AuthenticateUser string userName string password byte hash PasswordHasher HashPassword userName
  • Solr 精确单词搜索

    我想配置我的 Solr 搜索引擎 以便获得与我输入的搜索词完全匹配的结果 例如 taxes 应该返回带有 taxes 的文档 而不是 tax taxation 等 任何帮助或提示将不胜感激 我假设您的字段是 TextField 默认情况下
  • PHPUnit:尝试@cover或@use不存在的方法

    我正在学习如何使用 PHPUnit 4 3 5 PHP 5 5 14 进行单元测试 一切都很顺利 直到我尝试获得代码覆盖率 我收到此错误 尝试获取代码覆盖率时尝试 cover 或 use 不存在的方法 MyClass construct 我
  • 使用 ASP.NET 4.5 发布配置文件时如何参数化部署?

    ASP NET 4 5 中的新 pubxml 文件绝对是朝着正确方向迈出的一步 我也喜欢msdeploy的支持parameters xml文件 尽管它们有时没有我想要的那么强大 现在 我该如何结合msdeploy的参数和 pubxml 文件
  • ARM 的启动过程是怎样的?

    我们知道 对于X86架构 按下电源按钮后 机器开始执行0xFFFFFFF0处的代码 然后开始执行BIOS中的代码以进行硬件初始化 BIOS 执行后 它使用引导加载程序将操作系统映像加载到内存中 最后 操作系统代码开始运行 对于ARM架构 使
  • Virtualenv 和 Anaconda 问题

    所以这个问题之前已经提出过 但我还没有找到合适的解决方案 我在Mac上 当我在终端中运行 python 时 我得到 Python 2 7 6 Anaconda 1 9 2 x86 64 default Jan 10 2014 11 23 1
  • 为什么建议在源文件末尾有空行?

    一些代码风格工具推荐这样做 我记得看到一些 unix 命令行工具警告缺少空行 多出一个空行的原因是什么 如果文本文件中的最后一行数据不是以换行符或回车符 换行符组合终止 许多旧工具会出现错误行为 他们忽略该行 因为它以 Z eof 结尾
  • python 字典难题

    在控制台上我输入 gt gt gt class S str pass gt gt gt a hello gt gt gt b S hello gt gt gt d a a b b gt gt gt d hello hello gt gt g
  • 如何创建反转的png图像?

    我正在创建绘制在我的底座上的png图像 从底座我可以保存一个png图像 供您参考 Graphics g e Graphics g DrawLine pen new Point x y new Point x1 y1 base OnPaint
  • Python 有与 java.lang.Math.nextUp 等效的东西吗? [复制]

    这个问题在这里已经有答案了 我有一个Pythonfloat 我想要floats 为 1ULP http en wikipedia org wiki Unit in the last place更大和更小 在Java中 我会这样做Math n
  • 在 CSS 中指定打印的细线粗细

    如果我有一个打印 CSS 样式元素 border 1px solid black or border 0 25pt solid black 打印时线条很粗 至少 1 磅 如果我尝试更小的值 例如 0 05pt 则该线根本不会出现 我怎样才能
  • 同名的变量和常量

    我有一个C代码片段如下 const int x 5 void main int x x int y sizeof x sizeof int printf d y 代码片段将被编译并正确运行 但我不明白如何区分 x variable 和 x
  • 什么是 git-cache 以及 git-cache 中存储了什么

    事实上 我读了很多关于 git 的东西 我知道我可以通过删除缓存git rm cached 命令但我无法理解这个概念git 缓存 什么是缓存 而GIT中的缓存位置又在哪里呢 该缓存是存储在 RAM 中还是文件中 git 中使用缓存来提高性能
  • Android Studio 中的多个本机模块

    我有一个当前在 Visual Studio 中设置的 C 代码库 在 Windows 上运行 其中包含多个具有相互依赖关系的项目 我正在尝试将其转移到 Android Studio 以使其在 Android 上运行 我熟悉 Visual S