android ndk java.lang.UnsatisfiedLinkError

时间:2013-06-15 12:43:13

标签: android-ndk

我正在尝试运行Android应用程序。它应该包含can-android通信。 我的项目名为CANAndroid。路径是com.example.canandroid。 那对于我目前正在使用这个java文件: 包com.example.canandroid;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
public native void jinit(int type, int port, int irq);
public native void jreceive();


EditText et;
Button b1;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.v("BLA","Hier wird die App gestartet");
    et = (EditText) findViewById(R.id.et1);

    b1 =(Button) findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {


            jreceive();
                            //or jinit(0,0,0);

        }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

static{
    System.loadLibrary("receive_test");


}

}

我的receivetest.c文件如下所示:

JNIEXPORT void JNICALL Java_com_example_CANAndroid_MainActivity_jinit(JNIEnv *env,jint  nType, jint dwPort, jint wIrq){
 //do sth
}



JNIEXPORT void JNICALL Java_com_example_CANAndroid_MainActivity_jreceive(){
//do sth
}

我的receivetest.h看起来像这样:     #include

#ifndef _Included_com_example_CANAndroid_MainActivity
#define _Included_com_example_CANAndroid_MainActivity
#ifdef __cplusplus
extern "C"{
#endif

JNIEXPORT void JNICALL Java_com_example_CANAndroid_MainActivity_jinit
(JNIEnv *,jint, jint, jint);

JNIEXPORT void JNICALL Java_com_example_CANAndroid_MainActivity_jreceive();



 #ifdef __cplusplus
 }
 #endif
 #endif

我正在使用ndk-toolchain进行编译。所以我的android.mk看起来像这个

LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE :=receive_test
LOCAL_SRC_FILE := receivetest.c

include $(BUILD_SHARED_LIBRARY)

该应用程序启动,但只要按下按钮,我就会收到以下错误消息:

01-01 00:18:09.800: E/AndroidRuntime(852): FATAL EXCEPTION: main
01-01 00:18:09.800: E/AndroidRuntime(852): java.lang.UnsatisfiedLinkError: jinit
01-01 00:18:09.800: E/AndroidRuntime(852):  at com.example.canandroid.MainActivity.jinit(Native Method)
01-01 00:18:09.800: E/AndroidRuntime(852):  at com.example.canandroid.MainActivity$1.onClick(MainActivity.java:37)
01-01 00:18:09.800: E/AndroidRuntime(852):  at android.view.View.performClick(View.java:3511)
01-01 00:18:09.800: E/AndroidRuntime(852):  at android.view.View$PerformClick.run(View.java:14105)
01-01 00:18:09.800: E/AndroidRuntime(852):  at android.os.Handler.handleCallback(Handler.java:605)
01-01 00:18:09.800: E/AndroidRuntime(852):  at android.os.Handler.dispatchMessage(Handler.java:92)
01-01 00:18:09.800: E/AndroidRuntime(852):  at android.os.Looper.loop(Looper.java:137)
01-01 00:18:09.800: E/AndroidRuntime(852):  at android.app.ActivityThread.main(ActivityThread.java:4424)
01-01 00:18:09.800: E/AndroidRuntime(852):  at java.lang.reflect.Method.invokeNative(Native Method)
01-01 00:18:09.800: E/AndroidRuntime(852):  at java.lang.reflect.Method.invoke(Method.java:511)
01-01 00:18:09.800: E/AndroidRuntime(852):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-01 00:18:09.800: E/AndroidRuntime(852):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-01 00:18:09.800: E/AndroidRuntime(852):  at dalvik.system.NativeStart.main(Native Method)

我在stackoverflow上搜索了几个威胁。所有这些都包含本机方法的拼写错误。我在我的程序中找不到任何这些,所以也许有人可以看到我的错误。

1 个答案:

答案 0 :(得分:0)

尝试调用无法找到实现的本机时,将引发此错误。
你应该检查“receive_test”是否属于你的班级路径&设置正确。
在Android libs目录中复制“receive_test”可能会解决您的问题。