从.dll创建.jar

时间:2015-01-26 17:19:27

标签: android dll jar android-ndk java-native-interface

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

我有3个不同的部分:

  • 第一个.dll,它是一个API,用C ++开发,用Visual Studio 2013开发。
  • 第二个.dll,用于在我的API和Java代码之间建立链接(使用JNI,因此这是我的本机库),也是使用Visual Studio 2013开发的。
  • 我的Java代码加载我的本机库并从API实现本机函数。我使用eclipse IDE来处理那些东西,因为我读到的地方是创建.jar的最简单方法。

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

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

所以这是我的问题,如何在.jar中创建一种我可以在Android上使用的“静态库”?

我希望我足够清楚,不要犹豫,向我提出更多细节。

谢谢你的帮助!

修改
我试过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上?

2 个答案:

答案 0 :(得分:1)

.dll文件通常是特定于Windows的。如果您想要在Android上加载本机代码,则必须考虑使用Native Development Kit。使用NDK的细节有点超出了这里可以解释的内容,但Android开发者网站提供了一个不错的起点http://developer.android.com/tools/sdk/ndk/index.html

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

答案 1 :(得分:0)

  1. 使用ndk-build
  2. 编辑您的图书馆
  3. 创建Android库模块
  4. 创建Java类和JNI包装器
  5. 禁用ndk-build的gradle并在jni文件夹中创建Android.mkApplication.mk
  6. 导入.so库并预先在Android.mk
  7. 上构建它
  8. 手动调用ndk-build并完成