java - 如何在 Android 上使用 jni.h?

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

我想从 C++ 调用包含 Android SDK 类的 Java 代码。我可以从 C++ 调用桌面控制台应用程序的纯 Java 代码。但我无法从 C++ for Android 调用包含 Android SDK 类的 Java 代码(我收到此错误:JNI_CreateJavaVM 未在此范围内声明。)。我想要一个适用于 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

最佳答案

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

您可以从此 android ndk examples repository 关注 hello-jniCallback 项目.

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

FindClass(env, someString)

在 C++ 中你应该使用:

env->FindClass(someString)

关于java - 如何在 Android 上使用 jni.h?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41660420/

相关文章:

java - Java线程中变量的作用域

java - Selenium Webdriver Java : how to get the visible text in dropdown menu from the value?

android - Google map (SupportMapFragment)不在 View 寻呼机 fragment 中显示标记

java - 什么时候应该开始使用字符串替换而不是 sprintf?

c++ - 错误 : does not name a type (c++)

java - 如何在android中动态创建按钮?

java - Intellij IDEA 无法启动

android - 如何设置imageview src?

Java错误: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

c++ - 编译器是否被迫拒绝无效的 constexpr?