Android NDK C++ JNI(没有找到原生的实现......)

标签 android android-ndk

我正在尝试将 NDK 与 C++ 一起使用,但似乎无法使方法命名约定正确。我的原生方法如下:

extern "C" {
JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni
(JNIEnv* env, jclass c)
{
   //
}
}

还有一个包含在 extern "C"{} 中的标题。

一切都编译得很好,创建了一个 .so 文件并复制到我的项目下的 libs 文件夹,但是当我在 Eclipse 中调试和运行时,我不断收到一条日志猫消息,即“没有找到 native 的实现......”。由于所有 NDK 示例都在 C 中,我是否缺少一些东西?

谢谢。

最佳答案

有几件事会导致“未找到实现”。一个是函数原型(prototype)名称错误,另一个是根本无法加载 .so。您确定在使用方法之前调用了 System.loadLibrary() 吗?

如果您没有定义 JNI_OnLoad 函数,您可能需要创建一个并让它输出一条日志消息,以验证该库是否已成功拉入。

您已经避开了最常见的问题——忘记使用 extern "C"——所以要么是上述问题,要么是一些轻微的拼写错误。 Java 声明是什么样的?

关于Android NDK C++ JNI(没有找到原生的实现......),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2197889/

相关文章:

android - 移动应用程序的图像大小最佳实践

安卓 gradle 同步 : Could not get resource firebase-measurement-connector-impl-17. 0.4-javadoc.jar

Android Systemproperties.set 不起作用

android - 是否可以使用 google cardboard API 来创建原生 Android 应用程序?

android - 添加android :extractNativeLibs in AndroidManifest. xml后安装应用程序出错

android - NDK 问题

Android:如何更新build.gradle?

android - 获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度

android - 如何从android应用程序调试共享库[单独的项目]

android - 如何使用 Android NDK 进行命令行调试