我使用NDK将this library编译成.so。我可以使用System.LoadLibary()成功加载它,但是当我尝试库的示例代码时,它会抛出UnsatisfiedLinkError。我检查了库的源代码,它确实具有我使用的相同参数(JNIEnv和jobject除外)的函数以及相同的返回值。此外,图书馆的创建者肯定会分享工作示例代码。那么我做错了什么?我从页面复制了确切的代码,并相应地更改了变量名称。
答案 0 :(得分:0)
你是如何建造这个的?我发现每次运行ndk-build
之后我都必须在Eclipse中执行Project-> Clean ...让Eclipse获取.so文件并将其复制到apk。
答案 1 :(得分:0)
没有更多细节,很难说。看过该网站上的图书馆后,您可能会以不同的方式命名您的课程。您需要调用Java类Giffle
,它必须位于包org.jiggawatt.giffle
中。这不是你偶然偶然发现的命名惯例; - )
package org.jiggawatt.giffle;
public class Giffle {
static {
System.loadLibrary("gifflen");
}
public native int Init(String gifName, int w, int h,
int numColors, int quality,
int frameDelay);
public native void Close();
public native int AddFrame(int[] inArray);
}
要使用它,您可以在Giffle
类中进行调用,或者更简洁的方法是使用实例:
Giffle giffle = new Giffle();
giffle.Init(...);
giffle.AddFrame(...);
giffle.Close();
Java部分不在zip中似乎有点奇怪,特别是因为类名被硬编码到C符号中。也许编写它的人在Java部分有一大堆额外的代码,他不希望任何人看到。
据我所知,C和C ++代码已经完成。您根本不需要修改它。本机方法的实现位于gifflen.cpp中,其名称类似于Java_org_jiggawatt_giffle_Giffle_Init
。它们具有JNI调用约定的正确本机端参数。
答案 2 :(得分:0)