【发布时间】:2015-05-02 03:27:19
【问题描述】:
我做了两个测试项目,都是使用 JNI 的 android 应用程序。
对于第一个我没有使用 Android 工具/添加原生支持。本机方法使用 JNI 的 C 语法定义在 .c 文件中,并且工作正常,成功找到并调用方法。
在第二个项目中,我确实添加了本机支持,并使用 JNI 的 C++ 语法将本机代码编写在 .cpp 文件中。这种情况下不行,调用的时候找不到native方法。
我已经检查了方法的名称 1000 次,它的拼写完美。工程编译正常,.so库也加载成功,但是找不到方法。
这是我的 Cpp 文件:
#include <jni.h>
JNIEXPORT void JNICALL Java_xxxpackagenamexxx_xxxclassnamexxx_NativeShowMsgBox( JNIEnv * env, jobject jobj, jstring oStr )
{
// some stuff
}
这可能是什么原因造成的?为什么在使用 C++ 时它不能在使用 C 时工作?我在这里能错过什么? 谢谢。
【问题讨论】:
-
我想我找到了问题所在。我不得不在 .cpp 文件中将该函数转发声明为 extern C。
-
使用
javah生成需要的头文件。那么,签名就不会有问题了。
标签: java android c++ android-ndk java-native-interface