我正在尝试运行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上搜索了几个威胁。所有这些都包含本机方法的拼写错误。我在我的程序中找不到任何这些,所以也许有人可以看到我的错误。
答案 0 :(得分:0)
尝试调用无法找到实现的本机时,将引发此错误。
你应该检查“receive_test”是否属于你的班级路径&设置正确。
在Android libs目录中复制“receive_test”可能会解决您的问题。