Java 未找到本机的实现

Java 未找到本机的实现,java,android,c,eclipse,java-native-interface,Java,Android,C,Eclipse,Java Native Interface,我已经用“ndk build”编译了我的项目,并生成了.so文件。运行应用程序时,会出现错误“找不到本机的实现” 当我在调试模式下运行它时,它在调用本机函数的地方中断,eclipes显示此屏幕- 我已经检查了这个-和其他一些,我所有的jni函数名都是同步的。。但我不确定我会错在哪里。请帮忙 更新添加一些代码snipt MainActivity.java package com.example.myproject2; import java.io.InputStream; import and

我已经用“ndk build”编译了我的项目,并生成了.so文件。运行应用程序时,会出现错误“找不到本机的实现”

当我在调试模式下运行它时,它在调用本机函数的地方中断,eclipes显示此屏幕-

我已经检查了这个-和其他一些,我所有的jni函数名都是同步的。。但我不确定我会错在哪里。请帮忙

更新添加一些代码snipt

MainActivity.java

package com.example.myproject2;


import java.io.InputStream;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

   import java.io.BufferedInputStream;
   import java.io.File;
   import java.io.FileInputStream;
   import java.io.FileNotFoundException;
   import java.io.FilenameFilter;
   import java.io.IOException;
   import java.nio.ByteBuffer;
   import java.nio.ByteOrder;
   import java.util.ArrayList;
   import java.util.HashMap;





public class MainActivity2 extends Activity {



static int bytesize=0;

//public class fRead{






     public native int getMyData(short[] shorts,int size);

     static {
            System.loadLibrary("mylib");
            }

    ..
..
}
mytest.c代码

#include "com_example_myproject2_MainActivity.h"


JNIEXPORT jint JAVA_com_example_myproject2_MainActivity2_getMyData(jshortArray shorts,jint byteArrsize){



int a=0;
int i=0;
int avg=0;


return avg;

}

更改
getMyData

jint JAVA_com_example_myproject1_MainActivity_getMyData(jshortArray shorts,jint byteArrsize){

MainActivity.java

package com.example.myproject1;
/* All imports */ 

public class MainActivity extends Activity {

    static {
        System.loadLibrary("mylib");
    }

    /* Native Function Declaration */
    public static native int getMyData(short[] shorts, int size);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getMyData(array, size);    /* Native Function call */
    }
}
main.c

#include <stdio.h>
#include <android/log.h>
#include <jni.h>

#define TAG "HelloJNI"

JNIEXPORT jint JNICALL Java_com_example_myproject1_MainActivity_getMyData(JNIEnv *env, jobject obj, jshortArray array, jint size)
{
    __android_log_print(ANDROID_LOG_DEBUG, TAG, "JNI Function Called : getMyData");
    return size;
}
注意:

需要注意的是,不要在包名、活动名或JNI函数名中使用下划线(

我已经发现我的代码出了什么问题。这个问题与其他链接中的答案不同,因此我将其发布在这里。。这样才能帮助别人

问题出在我的母语功能上

而不是将函数作为-

JNIEXPORT jint JAVA_com_example_myproject2_MainActivity2_getMyData(jshortArray shorts,jint{
...
...
}
我应该称之为-

JNIEXPORT jint JAVA_com_example_myproject2_MainActivity2_getMyData(JNIEnv* pEnv, jobject 
pThis,jshortArray shorts ,jint byteArrsize){
...
...
}

即使我没有使用JNIEnv*pEnvjobject pThis我也必须在本机端函数中编写它们。

如果你能发布一些代码,那就太好了。这是一个简单的jni程序。。我的第一个jni程序..是否有任何理由说明屏幕截图中提到com.myproject2.MainActivity2,而在mytest.c中你提到com.myproject1.MainActivity(即
JAVA\u com\u example\u myproject1\u MainActivity\u getMyData()
vs.expected
JAVA\u com\u example\u myproject2\u MainActivity2\u getMyData())
?没什么……截图是第二次测试的……使用相同的代码..谢谢,我将根据更新,我已经将getMyData的定义更改为JNIEXPORT,所以这不是问题。您是否也将
JNIEnv*env,jobject obj,
作为前两个参数传递给
getMyData()
,也不要忘记添加
JNICALL
JNIEXPORT jint JAVA_com_example_myproject2_MainActivity2_getMyData(jshortArray shorts,jint{
...
...
}
JNIEXPORT jint JAVA_com_example_myproject2_MainActivity2_getMyData(JNIEnv* pEnv, jobject 
pThis,jshortArray shorts ,jint byteArrsize){
...
...
}