Android 未找到本机的实现
我用android ndk编译了我的c源代码,然后我把.so文件放在我的android项目的libs文件夹中,但是当我调用本机函数时,我出现了一个“找不到本机的实现”错误。 如果我尝试从adb shell调用这个函数,一切都正常,所以我不明白为什么会出现这个错误。 请帮忙,Android 未找到本机的实现,android,native,android-ndk,Android,Native,Android Ndk,我用android ndk编译了我的c源代码,然后我把.so文件放在我的android项目的libs文件夹中,但是当我调用本机函数时,我出现了一个“找不到本机的实现”错误。 如果我尝试从adb shell调用这个函数,一切都正常,所以我不明白为什么会出现这个错误。 请帮忙, AndreaJNI涉及到一个确切的命名方案,这个方案并不十分明显。也许您的函数实现不符合它 例如,如果您希望能够从JAVA代码中调用名为startServer的本机函数,假设您的包名为com.example.somethin
AndreaJNI涉及到一个确切的命名方案,这个方案并不十分明显。也许您的函数实现不符合它 例如,如果您希望能够从JAVA代码中调用名为startServer的本机函数,假设您的包名为com.example.something,并且您的类名为MyClass,那么您的JAVA类中应该有一个成员函数,如下所示:
private native void startServer();
然后您的JNI实现应该如下所示:
JNIEXPORT void Java_com_example_something_MyClass_startServer(JNIEnv *env, jobject obj) {
// Do something here...
}
否则,会出现链接错误。另一个原因是,如果在进行JNI函数调用时未调用库,则会出现此错误:
static {
System.loadLibrary("myJNIFILE");
}
应该在对JNI函数的实际引用之前的某个地方调用 我的包是:包upmt.os;函数:公共静态本机字符串upmtconf(String[]param);在模块类中。在c代码中,实现是JNIEXPORT jstring JNICALL Java_upmt_os_Module_upmtconf(JNIEnv*env,jobject obj,jobjectArray param)发布用于调用函数的logcat输出-它具有链接器正在查找的确切名称。如果你有打字错误,这是一个很好的方法,我解决了。这只是带有define的makefile中的一个错误。无论如何,谢谢。你不也需要把
JNICALL
放在void之后吗?你完全正确!我有一个可以正常工作的应用程序,但我添加了额外的初始屏幕(视图),应用程序崩溃(我有一个JNI警告,抱怨找不到“本机”方法)。最后,我在负责启动应用程序的活动中移动了调用:static{System.loadLibrary(“mylibrary”);}。