java - 在 Gradle Jitpack 项目中构建 Java JNI
问题描述
我正在努力在开源 Java 项目中使用本机 JNI 代码。
我已经能够使用用于本地构建的 gradle 模型、组件和工具链来拼凑一个工作的build.gradle,但我无法让它为多个目标构建(linux .so 和 mac .dylib - 该项目目前没有支持窗口)。似乎只有新的cpp-library gradle 插件支持 gradle 中的多个目标?该构建现在可以在我的 mac 上运行,并且库从 jar 加载(感谢之前的帖子!)但System.load
调用是依赖于目标的(dylib vs so)。
Jitpack构建失败是因为它没有 GCC 或 CLANG?我在jitpack 文档或常见问题解答中找不到有关使用本机组件构建项目的任何内容。我猜它不受支持?
这一切似乎都异常艰难。任何做得好的示例项目都会有很大的帮助!
(如果我可以让构建工作,我将更新许可证以感谢 Lucene 中首先实施 madvise 系统调用来管理页面缓存的人!)
解决方案
在联系了一些前同事后,我使用JNR-FFI更加成功。这是与本机库集成的一种更简单的方法,我强烈推荐它。使用JNR-Constants处理常量仍然有点尴尬。不幸的是,我需要的 madv_willneed、madv_sequential 等值目前尚未定义,需要添加。
总体而言,这种新方法比在 gradle 项目中与原生 jni 集成相比有了很大的改进。由于业务逻辑全部在 java 中,因此更容易测试行为,并且 travis 和 jitpack 等工具可以正常工作。
这是 uppend 上此功能的完整更改历史记录。
推荐阅读
- charts - 自定义图表填充/模式
- mysql - 总计4个别名
- javascript - 为什么我的 postgreSQL 查询不在我的终端上时说它是未定义的?
- kubernetes - 为什么无法访问我在 Minikube 中运行的 gRPC REST 服务?
- c# - 如何将 ENML 放在 Windows 剪贴板上以便粘贴到 Evernote 中
- c++ - QListWidget 移除所选项目及其设置 QT
- python - 如何在没有 TypeError 的情况下从此列表中找到范围、平均值和前三个值?
- python - Python网页抓取错误:使用拆分功能后无法调用“NoneType”对象
- python - matplotlib 3D 曲面图
- android - Firebase Firestore - 保存用户书签