Java.lang.UnsatisfiedLinkError: собственный метод не найден: ошибка в jni ()

Я пытаюсь сделать добавление двух 2D-массивов с использованием jni с активностью android. В классе основной активности android я создаю объект класса sample.java. И передайте поле экземпляра класса образца в собственный код для добавления. Sample.java следующим образом

package com.cdacb.mars.ntvoperation; public class Sample { public int[][] array1; public int[][] array2; public int[][] array3; } 

Определение для собственного кода:

 JNIEXPORT void JNICALL Java_com_cdacb_mars_ntvoperation_Operation_int2dAddition (JNIEnv *env,jobject this,jobject object ){ jclass class = (*env)->GetObjectClass(env,object); if(class==Null){ printf("Error in finding class"); return 0; } jfieldID fid1= (*env)->GetFieldID(env , class ,"array1","[[I"); if(fid1==Null){ printf("Error in finding mat1 field "); return 0; } jfieldID fid2= (*env)->GetFieldID(env , class ,"array2","[[I"); if(fid2==Null){ printf("Error in finding mat2 field "); return 0; } jfieldID fid3= (*env)->GetFieldID(env , class ,"array3","[[I"); if(fid3==Null){ printf("Error in finding mat3 field "); return 0; } jobjectArray arr1= (jobjectArray)(*env)->GetObjectField(env,this,fid1); jobjectArray arr2= (jobjectArray)(*env)->GetObjectField(env,this,fid2); jobjectArray class= (*env)->NewObjectArray(env,length,Class,NULL); for(jint i=0; i<16; i++){ class[i]=arr1[i]+arr2[i]; } (*env)->SetObjectField(env, this, fid3, class); } 

Файл android.mk

  LOCAL_PATH := $(call my_dir) include $(CLEAR_VARS) LOCAL_MODULE := Ntvoperation LOCAL_SRC_FILE := operation.c include $(BUILD_SHARED_LIBRARY) 

Но когда я запускаю модуль thie = s, он генерирует ошибку в logcat как:

 11-06 14:46:35.875: D/dalvikvm(936): Trying to load lib /data/data/com.cdacb.mars.ntvoperation/lib/libNtvoperation.so 0x411e7090 11-06 14:46:35.905: W/dalvikvm(936): No implementation found for native Lcom/cdacb/mars/ntvoperation/Operation;.int2dAddition:(Lcom/cdacb/mars/ntvoperation/Sample;)V 11-06 14:46:35.924: E/AndroidRuntime(936): java.lang.UnsatisfiedLinkError: Native method not found: com.cdacb.mars.ntvoperation.Operation.int2dAddition:(Lcom/cdacb/mars/ntvoperation/Sample;)V 11-06 14:46:35.924: E/AndroidRuntime(936): at com.cdacb.mars.ntvoperation.Operation.int2dAddition(Native Method) 11-06 14:46:35.924: E/AndroidRuntime(936): at com.cdacb.mars.ntvoperation.Operation.onCreate(Operation.java:36) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.Activity.performCreate(Activity.java:5008) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread.access$600(ActivityThread.java:130) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.os.Handler.dispatchMessage(Handler.java:99) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.os.Looper.loop(Looper.java:137) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread.main(ActivityThread.java:4745) 11-06 14:46:35.924: E/AndroidRuntime(936): at java.lang.reflect.Method.invokeNative(Native Method) 11-06 14:46:35.924: E/AndroidRuntime(936): at java.lang.reflect.Method.invoke(Method.java:511) 11-06 14:46:35.924: E/AndroidRuntime(936): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 11-06 14:46:35.924: E/AndroidRuntime(936): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 11-06 14:46:35.924: E/AndroidRuntime(936): at dalvik.system.NativeStart.main(Native Method) , 11-06 14:46:35.875: D/dalvikvm(936): Trying to load lib /data/data/com.cdacb.mars.ntvoperation/lib/libNtvoperation.so 0x411e7090 11-06 14:46:35.905: W/dalvikvm(936): No implementation found for native Lcom/cdacb/mars/ntvoperation/Operation;.int2dAddition:(Lcom/cdacb/mars/ntvoperation/Sample;)V 11-06 14:46:35.924: E/AndroidRuntime(936): java.lang.UnsatisfiedLinkError: Native method not found: com.cdacb.mars.ntvoperation.Operation.int2dAddition:(Lcom/cdacb/mars/ntvoperation/Sample;)V 11-06 14:46:35.924: E/AndroidRuntime(936): at com.cdacb.mars.ntvoperation.Operation.int2dAddition(Native Method) 11-06 14:46:35.924: E/AndroidRuntime(936): at com.cdacb.mars.ntvoperation.Operation.onCreate(Operation.java:36) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.Activity.performCreate(Activity.java:5008) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread.access$600(ActivityThread.java:130) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.os.Handler.dispatchMessage(Handler.java:99) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.os.Looper.loop(Looper.java:137) 11-06 14:46:35.924: E/AndroidRuntime(936): at android.app.ActivityThread.main(ActivityThread.java:4745) 11-06 14:46:35.924: E/AndroidRuntime(936): at java.lang.reflect.Method.invokeNative(Native Method) 11-06 14:46:35.924: E/AndroidRuntime(936): at java.lang.reflect.Method.invoke(Method.java:511) 11-06 14:46:35.924: E/AndroidRuntime(936): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 11-06 14:46:35.924: E/AndroidRuntime(936): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 11-06 14:46:35.924: E/AndroidRuntime(936): at dalvik.system.NativeStart.main(Native Method) 

Пожалуйста, помогите мне решить эту проблему.

Мой основной класс java

  package com.cdacb.mars.ntvoperation; import android.R.string; import android.os.Bundle; import android.app.Activity; import android.widget.TextView; public class Operation extends Activity { private native void int2dAddition(Sample object); String display=" "; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); TextView screen = new TextView(this); Sample tc=new Sample(); tc.array1=new int[4][4]; tc.array2=new int[4][4]; tc.array3=new int[4][4]; for(int col=0;col<4;col++){ for(int row=0;row<4;row++){ tc.array1[col][row]=2; tc.array2[col][row]=4; tc.array3[col][row]=0; } } int2dAddition(tc); for(int col=0;col<4;col++){ for(int row=0;row<4;row++){ display= display + tc.array3[col][row] +","; } } screen.setText(display); setContentView(screen); } static{ System.loadLibrary("Ntvoperation"); } } 

Эта проблема может быть связана с украшением имени функции C ++; Если вы окружаете ваши C ++-функции с помощью extern «C» {…}, тогда вы должны быть в состоянии избежать этой проблемы, и JNI должен найти ваши собственные методы. У меня была такая же проблема, пока я не прочитал этот поток, описывающий подобную проблему, но там, где было проверено, что собственные функции ANSI C работают, но C ++ запустил собственный метод, который не нашел ошибку. Надеюсь, что это поможет, и реквизит @yellowstonely, кто предоставил это предложение по связанной теме