gpt4 book ai didi

android - 如何使用 Gradle NDK build 为主机编译?

转载 作者:行者123 更新时间:2023-11-29 02:41:17 24 4
gpt4 key购买 nike

我的场景很简单。我有一个本地库,我使用带有 CMake 的 externalNativeBuild 系统进行编译。这很适合构建我的应用程序,但我想在机器本地(即非模拟器)单元测试期间加载相同的库。

如果我现有的 Gradle NDK 设置包括以下内容,是否有办法重用它来为主机操作系统(例如 macOS)编译库?

defaultConfig {
ndk {
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}

externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static'
}
}
}

externalNativeBuild {
cmake {
path 'CMakeLists.txt'
}
}

最佳答案

我也对这个主题做了一些研究,没有大量的手动工作是不可能的。这是我想出的:

遗憾的是,除了 Gradle 的 Aadroid 插件通过调用 CMake 或 ndk-build 专门为 Android 项目提供的支持外,Gradle 中没有开箱即用的支持。

最简单的方法似乎是使用另一个工具链调用 CMake 来构建主机二进制文件。您可以通过使用主机工具链直接调用 Cmake 或向 Gradle 添加一些自定义任务来为您执行此操作。

C 中的单元测试

如果您只想对 C 代码进行单元测试,您可以让 CMake 编译一个使用常用库的可执行文件并对其进行测试。

Java 中的单元测试

如果您想在通过 JNI 调用 C 代码的 Java 代码级别进行测试,您还必须将 CMake 输出的库移动到正确的位置,以便 JVM 在您尝试加载 native 时找到它图书馆。

为人类解决这个问题

IMO 所有这一切都比它应该的要难得多。其他替代方案,这将使它变得更加困难,正在尝试

  1. 编译/解释您的 C 代码,使其在 JVM 上运行或
  2. 通过运行 android 二进制文件的 JNI 调用 CPU 模拟器

如果有人尝试实现第二条建议,这对 Android 生态系统来说将非常有趣。

关于android - 如何使用 Gradle NDK build 为主机编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43867014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com