如何在Android上使用jni.h?

时间:2017-01-15 11:08:39

标签: java android c++ android-ndk java-native-interface

我想从C ++中调用包含Android SDK类的Java代码。我可以从C ++中为desktop console application调用纯Java代码。但我无法从C ++ for Android调用包含Android SDK类的Java代码(我收到此错误:JNI_CreateJavaVM was not declared in this scope.)。我想要一个适用于Android的Java Native Interface示例。你有关于Android的JNI的例子吗?此外,我发现只有桌面的JNI示例和代码,没有Android。 我还发现了不同的jni.hlibjvm.so文件位置:

jni.h Directories: ------------------------------------

/usr/lib/jvm/java-8-oracle/include/jni.h
Android/Sdk/ndk-bundle/platforms/android-*/arch-arm/usr/include/jni.h
android-studio/jre/include/jni.h

libjvm.so Directories: --------------------------------

/home/username/android-studio/jre/jre/lib/amd64/server/libjvm.so
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so

1 个答案:

答案 0 :(得分:2)

简单来说,如果你想从C ++调用Java函数,你应该实现一个jni Callback。

您可以关注此android ndk examples repository中的hello-jniCallback项目。

大多数示例都是用C语言编写的,而不是用C ++编写的,因此您应该进行一些更改。 例如,C中的那些函数:

FindClass(env, someString)

在C ++中你应该使用:

env->FindClass(someString)