我正在尝试将Android SerialPort API集成到我的项目中,但这样做时遇到了一些问题。
Eclipse 没有解析所有 JNI 和本机相关的方法和字段。这是Android SerialPort API的 SerialPort.c 文件的开头:
#include <termios.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <jni.h> #include "SerialPort.h" #include "android/log.h" static const char *TAG="serial_port"; #define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, TAG, fmt, ##args) #define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt, ##args) #define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args)
第一个define-statement有效,但在其他两个中,eclipse是marking
ANDROID_LOG_DEBUG
和ANDROID_LOG_ERROR
withSymbol XXX could not be resolved
,以及JNIEnv *env
串口方法内部的方法的每次调用。但是 JNIEXPORT 或 JNICALL 语句没有错误。
当我试图解决这个问题时,出现了一个问题。我下载了库的所有文件并将它们复制到网站上给出的目录中。但似乎 JNI 部分出了点问题,我无法调用
open()
以获取我的串行设备。11-19 14:18:22.232: D/dalvikvm(17898): Trying to load lib /data/data/master.androidsirfparser/lib/libserial_port.so 0x416a8570 11-19 14:18:22.232: D/dalvikvm(17898): Added shared lib /data/data/master.androidsirfparser/lib/libserial_port.so 0x416a8570 11-19 14:18:22.232: D/dalvikvm(17898): No JNI_OnLoad found in /data/data/master.androidsirfparser/lib/libserial_port.so 0x416a8570, skipping init 11-19 14:18:22.232: W/dalvikvm(17898): No implementation found for native Lmaster/serial/SerialPort;.open (Ljava/lang/String;II)Ljava/io/FileDescriptor; 11-19 14:18:22.240: W/dalvikvm(17898): threadid=11: thread exiting with uncaught exception (group=0x40a471f8) 11-19 14:18:22.240: E/AndroidRuntime(17898): FATAL EXCEPTION: Thread-651 11-19 14:18:22.240: E/AndroidRuntime(17898): java.lang.UnsatisfiedLinkError: open 11-19 14:18:22.240: E/AndroidRuntime(17898): at master.serial.SerialPort.open(Native Method) 11-19 14:18:22.240: E/AndroidRuntime(17898): at master.serial.SerialPort.<init>(SerialPort.java:61) 11-19 14:18:22.240: E/AndroidRuntime(17898): at master.androidsirfparser.ReadThread.init(ReadThread.java:38) 11-19 14:18:22.240: E/AndroidRuntime(17898): at master.androidsirfparser.ReadThread.run(ReadThread.java:48)
我总是收到“找不到实现”的消息。
为了解决问题二,我必须先解决问题一,因为 Eclipse 不允许我在不解决代码中的编译错误的情况下启动我的项目。