从 .dll 创建 .jar
Create a .jar from a .dll
我目前正在尝试从 .dll 创建 .jar,以便在 Android 应用程序中使用它。我对这项技术很陌生,所以我会尽量说清楚。
我有 3 个不同的部分:
- 第一个 .dll,它是一个 API,使用 C++ 并使用 Visual studio 2013 开发。
- 在我的 API 和 Java 代码之间创建 link 的第二个 .dll(使用 JNI,所以这是我的本地库),也是用 [=49= 开发的] 2013.
- 还有我的 Java 代码,它加载我的本机库并实现 API 的本机功能。我使用 eclipse IDE 来处理这些东西,因为我在某处读到这是创建 .jar 的最简单方法。
这部分效果很好。我创建了一个主测试,并从 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 应用程序项目使用。
- 用
ndk-build
编译你的库
- 创建一个 Android 库模块
- 创建 Java class 和 JNI 包装器
- 为
ndk-build
禁用 gradle 并在 jni 文件夹中创建 Android.mk
和 Application.mk
- 导入
.so
库并在 Android.mk
上预构建它
- 手动调用
ndk-build
并完成
我目前正在尝试从 .dll 创建 .jar,以便在 Android 应用程序中使用它。我对这项技术很陌生,所以我会尽量说清楚。
我有 3 个不同的部分:
- 第一个 .dll,它是一个 API,使用 C++ 并使用 Visual studio 2013 开发。
- 在我的 API 和 Java 代码之间创建 link 的第二个 .dll(使用 JNI,所以这是我的本地库),也是用 [=49= 开发的] 2013.
- 还有我的 Java 代码,它加载我的本机库并实现 API 的本机功能。我使用 eclipse IDE 来处理这些东西,因为我在某处读到这是创建 .jar 的最简单方法。
这部分效果很好。我创建了一个主测试,并从 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 应用程序项目使用。
- 用
ndk-build
编译你的库
- 创建一个 Android 库模块
- 创建 Java class 和 JNI 包装器
- 为
ndk-build
禁用 gradle 并在 jni 文件夹中创建Android.mk
和Application.mk
- 导入
.so
库并在Android.mk
上预构建它
- 手动调用
ndk-build
并完成