【问题标题】:Add directory containing a dll to gradle as path?将包含 dll 的目录添加为 gradle 作为路径?
【发布时间】:2017-11-08 17:36:42
【问题描述】:

我得到了一个 .jar,它调用 .dll 以在项目中使用。

如果我执行以下操作,我可以毫无问题地编译和运行:

  • 将包含 .dll 的文件夹添加到 Path 环境变量 (Windows 10)。
  • 将 .jar 添加为我的 gradle 项目的依赖项。

这样 API 就可以正常工作。

当我将生成的 jar 移动到另一台计算机时,尽管我将它包含在 jar 中,但它找不到 dll,因此该软件无法运行。

如何告诉生成的jar里面有它需要的dll?

我觉得他们发送给我的 .jar 只是调用了 dll 的函数,并假设您将目录添加到路径变量中。有什么方法可以使这项工作无需更改我移动 jar 的每台 PC 的路径配置?

我已经尝试过这里发布的答案(但它们不起作用):

【问题讨论】:

    标签: java gradle dll jar


    【解决方案1】:

    问题在于 jar 加载 dll 的方式。通常它只调用System.loadLibrary(<libname>),它期望本机库位于库搜索路径中。

    如果你想从其他地方加载它,你必须将 DLL 从 JAR 中提取到例如临时目录或其他地方并使用

    加载它

    System.load(<absolute path to the dll file>);

    注意:如果您无法更改 JAR 中的类,您可以在执行 JAR 代码之前加载的第二个类中调用 System.load(..)。 AFAIR 一个库只被 Java 加载一次,因此如果已经加载了同名的 dll,则在原始 JAR 中对 System.loadLibrary() 的调用将被忽略。

    【讨论】:

    • 这在构建 jar 并将其移动到另一台 PC 时工作正常,不适用于构建 android apk。但我想现在已经足够了,我会尝试为 Android 案例找到解决方法。谢谢你:)
    • 更新:我刚刚意识到我试图在一个 android 项目中加载一个 dll。当然,这永远行不通(基于 Linux 的 Android 系统中的 Windows dll 文件)。所以现在我们必须坚持使用 Windows :)
    • 嗨 Mayuso ..你有什么解决方案吗?我有 dll 文件可以在 android 项目中使用。任何想法PLZ
    • @Manikandan 除非它是基于 Dot.Net 的 Xamarin dll 文件,否则它不能在 Android 上使用。 DLL 通常是为 32/64bit x86 CPU 编译的,在 Android 设备上通常使用需要完全不同代码的 ARM cpu。
    • 感谢@Robert 的回复。我有 dot.net dll 文件。是否有可能转换为 jar 以在 android 项目中使用。或从 xamarin 项目中获取 jar 的任何想法
    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多