如何在另一个java项目中使用带有共享对象的jar文件

Posted

技术标签:

【中文标题】如何在另一个java项目中使用带有共享对象的jar文件【英文标题】:How to use a jar file with shared object in another java project 【发布时间】:2016-03-04 21:48:01 【问题描述】:

我有一些 C 文件,我想在我的 java-android 项目中使用它们。使用 JNI 包装器和 NDK 创建 SO。我能够从我的 java 代码中访问 C 方法。一切正常。 现在我想为这个项目创建一个 jar 文件,以便进一步提供给其他开发人员(这样 C 代码就可以对其他人隐藏)。 这是我面临一些问题的地方。当我尝试在其他项目中使用创建的 JAR 时,我在加载 SO 时开始收到“UnsatisfiedLink 错误”。 SO 在同一个项目中加载得非常好,但是当使用同一个项目创建 jar 并尝试在另一个项目中使用它时,它会导致问题。 *使用 Eclipse。

【问题讨论】:

【参考方案1】:

使用 eclipse/ant 时,您需要分别分发 .jar 和 .so 文件。其他开发人员将不得不在他们的lib/ABI 文件夹中自己重新集成 .so 文件。

您可能会发现一些使用仅包含 .so 文件的附加 jar 文件集成 .so 文件的技巧,但这并不会改变您需要单独分发它们的事实。

要将您的库及其 .so 文件作为单个文件分发,您应该构建一个 .aar 而不是 .jar。 Android Studio/gradle 可以直接使用这些,.so 文件直接集成在 aar 文件的jni/ABI 文件夹下。

【讨论】:

以上是关于如何在另一个java项目中使用带有共享对象的jar文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个对象边界框下面选择对象

如何在另一个具有更高Spring版本的Spring项目中使用具有Spring作为打包依赖项的jar?

如何在不使用 Gradle 复制 jar 的情况下将一个模块的源包含在另一个模块中?

如何从外部jar自动运行java任务?

如何在我的 Java 代码中使用带有 Weka 的 LibSVM?

idea 打包一个项目为jar包并在另一个项目中引用该jar包