我正在寻找线索,为什么我的 Android 应用程序会在特定的 ndk 调用上偶尔抛出 UnsatisfiedlinkError 异常:
我有一个通过 ndk 加载一个本机库的 Android 应用程序。
本机库是用 C++ 编写的并使用 STL(在我的 makefile 中我设置了 APP_STL := stlport_static)。没有使用或不需要其他库。本机库为大约 20 个 Java 类提供了大约 300 个本机方法。
大多数时候一切正常。但是我的用户时不时会收到 UnsatisfiedLinkError 异常。异常总是在同一个本地函数调用的同一位置触发,但奇怪的是,它甚至不是对本地函数的第一次调用,甚至不是对特定本地函数的第一次调用。
任何线索都会受到欢迎,为什么一个特定的本机调用可能会失败。ndk容易被破坏吗?你如何调试这样的问题?
具有相同调用的简单测试程序就可以正常工作。不过这里是源代码的一些部分:
这是Java中的问题ndk函数:
public class Server {
...
static private native long longObserveError( );
...
}
这是头文件: extern "C" { ...
JNIEXPORT jlong JNICALL Java_be_gentgo_tetsuki_Server_longObserveError
(JNIEnv *, jclass);
...
}
这是实现:
IGSProtocol *server = 0; // initialized later...
JNIEXPORT jlong JNICALL Java_be_gentgo_tetsuki_Server_longObserveError
(JNIEnv *env, jclass)
{
Messenger &mess = server->ObserveError( );
return (long)(&mess);
}