【问题标题】:How can I bundle a .so file in a jar?如何将 .so 文件捆绑在 jar 中?
【发布时间】:2016-10-17 19:23:36
【问题描述】:

我目前正在开发一个使用自己编写的本机代码的 java 库(绑定)。此原生代码编译为.so 文件,适用于多种架构(arm-v7、i686、x86-64 等)。

我知道在 android 中您必须创建一个名为 jniLibs 的文件夹,其中包含每个架构的子文件夹,其中包含正确的 .so 文件。然后使用Android.mk 文件和System.loadLibrary 我可以将这些文件包含到我的代码中。

但是,我不知道如何将这些 .so 文件包含在普通的 java 项目/库中。我在网上看到System.loadLibrary 仅适用于查看普通文件(不一定是项目文件)。

【问题讨论】:

  • 所以你的单个 jar 是为了在 Android 和常规桌面/服务器 Java 环境中“交叉部署”?这……听起来雄心勃勃。
  • 这与 Java 的“编译一次,到处运行”的理念有些矛盾。无论如何,这与 C 无关。共享库绝不是 C 特定的。
  • 这是我的目标,是的@unwind
  • @AndiGeeky 这篇文章是针对 android 的,我已经为它工作了。我的问题更多地针对 java 本身。

标签: java android jar java-native-interface


【解决方案1】:

您不能在 android .jar 文件中拥有除代码之外的任何内容,但是,您可以在 .aar 文件中拥有资源。

Android Archive Library (aar) vs standard jar

您会发现您的库的.aar 是您的库的可再发行/可重用编译版本。

【讨论】:

  • 感谢您的这篇文章,它确实帮助我理解了.jar.aar 之间的区别。但是,是否有一种解决方法可以解决我如何以用户友好的方式使用.jar 交付我的本机代码?
  • 您必须使用 aar 文件。没有比这更用户友好的了。它们替换了 jar 文件,因此它仍然是一个要分发的文件。
【解决方案2】:

你可以像SWT 那样做——从你的.jar 文件中提取库文件到用户的主目录(这样你就可以确定你可以在其中写入)通过java代码手动。 可以查看org.eclipse.swt.internal.Library的源码,方法extract()

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 2018-04-06
    • 2014-07-25
    • 2016-02-23
    • 2015-12-04
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多