从 .dll 创建 .jar

Create a .jar from a .dll

我目前正在尝试从 .dll 创建 .jar,以便在 Android 应用程序中使用它。我对这项技术很陌生,所以我会尽量说清楚。

我有 3 个不同的部分:

这部分效果很好。我创建了一个主测试,并从 Java 中的 API 中获取了所有信息。但是现在,我想创建一个我可以在 Android 上使用的 .jar 文件,然后乌鸦来了...

我尝试了很多方法,从简单的 .jar 导出到 One-Jar 方法,但没有任何效果。我的 android 平台上总是出现 link 错误(功能在 .jar 上被识别,但它们的实现不是)。

所以这是我的问题,如何在我可以在 Android?

上使用的 .jar 中创建一种“静态库” 希望我说得够清楚,不要犹豫,问我更多细节。

感谢您的帮助!

编辑:
我尝试了一个 Android 库项目,我的问题总是来自我的 loadLibrary() 函数:

public class MyWrapper {
    static {
        System.loadLibrary("MyWrapper");    
    }

    public static native int getNegative(int p_number);
    public static native int getPositive(int p_number);
}

在我的库中一切正常,但是当我在 android 应用程序中使用它时,我总是得到这个错误:

01-27 11:31:29.565: E/AndroidRuntime(7089): FATAL EXCEPTION: main
01-27 11:31:29.565: E/AndroidRuntime(7089): Process: com.example.wrappertest, PID: 7089
01-27 11:31:29.565: E/AndroidRuntime(7089): java.lang.UnsatisfiedLinkError: Couldn't load MyWrapper from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.wrappertest-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.wrappertest-2, /vendor/lib, /system/lib]]]: findLibrary returned null

我的库无法创建为静态库,要在 .dll 上保留 link?

.dll 文件通常是 windows 特定的。如果您想在 Android 上加载本机代码,则必须考虑使用本机开发工具包。使用 NDK 的细节有点超出这里可以解释的范围,但是 Android 开发者网站在 http://developer.android.com/tools/sdk/ndk/index.html

提供了一个不错的起点

至于 jar 本身,您可能需要考虑构建一个 Android 图书馆项目。这本质上是一种将一些资产(包括本机库)打包成一个 jar 的方法,这些资产可以被 Android 应用程序项目使用。

  1. ndk-build
  2. 编译你的库
  3. 创建一个 Android 库模块
  4. 创建 Java class 和 JNI 包装器
  5. ndk-build 禁用 gradle 并在 jni 文件夹中创建 Android.mkApplication.mk
  6. 导入 .so 库并在 Android.mk
  7. 上预构建它
  8. 手动调用 ndk-build 并完成