我开始了 android 应用程序开发并遵循了本教程:
http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/ 但该应用程序不起作用。我调试它并且日志猫显示此消息:JNI_Onload not found..我该如何解决这个问题?
谢谢
我开始了 android 应用程序开发并遵循了本教程:
http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/ 但该应用程序不起作用。我调试它并且日志猫显示此消息:JNI_Onload not found..我该如何解决这个问题?
谢谢
JNI_OnLoad 函数的主要目的是注册您的所有本机方法。
这是推荐的,但不是唯一的方法。因此提供 JNI_OnLoad 函数是可选的。因为它用于注册所有本地方法,所以它可以在方法实际使用之前发现 java 本地方法声明与其对应的 C/C++ 方法之间的签名不匹配。
您可以改为从静态类初始化程序加载本机库,如下所示:
static {
System.loadLibrary("mylib");
}
这样,您就不必提供 JNI_OnLoad 函数,并且会自动发现“mylib”中的所有本机方法。唯一的缺点是,在您实际调用它之前,您不会知道您的某些本机方法签名是否错误。在这种情况下,您会收到“unsatisfiedlinkerror”,告诉您没有找到您尝试调用的本机方法的实现。
如果您选择此选项(选项 2 - 自动发现),调试级消息将只是一个警告,告诉您您“忘记”提供 JNI_OnLoad 函数,因此您可以忽略它。
有关更多信息,请查看 JNI 提示:http:
//developer.android.com/guide/practices/jni.html
JNI_OnLoad 是一个调试级别的消息,它只是让您知道未找到该函数。
它存在是因为人们偶尔会编写 JNI_OnLoad 而没有'extern "C"' 声明,然后不确定为什么事情不起作用。
您面临的问题可能与消息无关。查看附近的 logcat 输出以获取线索。dlopen() 失败和 Java 异常可能是相关的。
您应该将其中的一些内容粘贴到问题中,并可能更详细地描述失败(“不起作用”有点含糊)。