对于 Android 应用程序,我用 C 实现了一个外部函数,我想在两个单独的类中使用它。
在第一个类(我的主 Activity UI)中,我调用了适当的 loadLibrary:
System.loadLibrary(...);
在同一个类中,我将函数定义为native:
public native int dissectPacket(byte[] header, byte[] data, int encap);
这样做之后,我可以在第一个类中毫无问题地调用 native 函数。我没有收到任何不满意的链接错误。
现在,我想在另一个类中使用这个函数。我想我不需要再次加载库。在第二个类中,在底部,我还定义了:
public native int dissectPacket(byte[] header, byte[] data, int encap);
但是,当我尝试在第二个类中使用 native 函数时,我得到:
07-22 23:13:13.083: ERROR/AndroidRuntime(6737): Caused by: java.lang.UnsatisfiedLinkError: dissectPacket
在这两个类中使用函数的正确方法是什么?如果我没有在第二个类(称为 Packet)中将函数重新定义为 native 函数,我会得到错误:
The method dissectPacket(byte[], byte[], int) is undefined for the type Packet
顺便说一句,我不想使用:class1.dissectPacket(...);我正在努力避免通过该类(class)。
最佳答案
您实际上定义了两个独立的函数。一个用于头等舱,另一个用于二等舱。他们将需要两个独立的 JNI stub 。您可能只有第一个的 stub 和实现。
JNI和Java,一般来说,都是指具体类的方法。
关于android - 不能在两个不同的类中使用外部 JNI 函数,不满足链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6798022/