Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 未找到本机的实现_Android_Native_Android Ndk - Fatal编程技术网

Android 未找到本机的实现

Android 未找到本机的实现,android,native,android-ndk,Android,Native,Android Ndk,我用android ndk编译了我的c源代码,然后我把.so文件放在我的android项目的libs文件夹中,但是当我调用本机函数时,我出现了一个“找不到本机的实现”错误。 如果我尝试从adb shell调用这个函数,一切都正常,所以我不明白为什么会出现这个错误。 请帮忙, AndreaJNI涉及到一个确切的命名方案,这个方案并不十分明显。也许您的函数实现不符合它 例如,如果您希望能够从JAVA代码中调用名为startServer的本机函数,假设您的包名为com.example.somethin

我用android ndk编译了我的c源代码,然后我把.so文件放在我的android项目的libs文件夹中,但是当我调用本机函数时,我出现了一个“找不到本机的实现”错误。 如果我尝试从adb shell调用这个函数,一切都正常,所以我不明白为什么会出现这个错误。 请帮忙,
Andrea

JNI涉及到一个确切的命名方案,这个方案并不十分明显。也许您的函数实现不符合它

例如,如果您希望能够从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”);}。