我正在使用serial-port-api为android开发应用程序。我已经安装了NDK,下载了库并将其包含在内。像SerialPortFinder.getAllDevicesPath()这样的函数非常有效。但位于api文件 SerialPort.java 中的这部分代码标记为红色:
// JNI
private native static FileDescriptor open(String path, int baudrate, int flags);
public native void close();
public native int getmodemlines();
问题叫做
无法解析相应的JNI函数Java_android_1serialport_1api_SerialPort_open 报告Java中的本机方法声明,其中没有在项目中找到相应的JNI函数。
所有这三个功能。
当我运行项目时,我收到一个错误:
尝试在空对象引用上调用虚方法'java.io.FileDescriptor android_serialport_api.SerialPort.getFd()'
因为前一个问题。
我已经做了什么
添加libserial_port.so,如下面
阅读Stackoverflow上有关此问题的所有主题,但仍无法回答。
我的build.gradle是
android {
compileSdkVersion 25
buildToolsVersion '25.0.1'
defaultConfig {
applicationId "sme.sirius.oelmann.siriussme"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.06"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
ndkBuild {
path 'src/jni/Android.mk'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.android.support:design:25.1.1'
compile 'com.android.support:support-v4:25.1.1'
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta5'
testCompile 'junit:junit:4.12'
}
Gradle版本2.3.0
如果有人能帮助我,我会非常高兴。
答案 0 :(得分:0)
我找到了解决方案。
由于Android Studio没有看到SerialPort.c文件,我只是将代码复制并粘贴到native-lib.cpp,并将SerialPort.h添加到同一文件夹(src / main / cpp)中。 / p>
在SerialPort.java中我改变了库调用:
public class DoctorsModel
{
[Key]
public int d_id { get; set; }
public string d_name { get; set; }
public string contact { get; set; }
public string cnic { get; set; }
public string email { get; set; }
public string gender { get; set; }
//Forigen Key
public ICollection<DocExperiencesModel> experiences { get; set; }
public ICollection<DocSpecialization> specializations { get; set; }
public ICollection<QualificationsModel> qualifications { get; set; }
public ICollection<DoctorProfileModel> profiles { get; set; }
}
在build.gradle中,我已恢复默认设置:
static {
System.loadLibrary("native-lib");
}
现在它有效!