版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sjdjdjdjahd/article/details/89307443
在做串口开发的时候,一般会在Application中初始化JNI的加载
{
try {
System.loadLibrary("serial_port");
} catch (UnsatisfiedLinkError ule) {
ule.printStackTrace();
}
}
之前项目一直运行在5.0系统上,没什么问题。今天把项目运行在7.0的时候,出现了UnsatisfiedLinkError
异常,导致项目也不能正常运行。
为了解决问题这边做了以下尝试
- 开始以为权限问题,就加了读写权限,并没有用
- 把targetSdkVersion调到22也没用
- 把compileSdkVersion调到19才能加载成功,显然不能这样配置
- 百度了一大把UnsatisfiedLinkError ,并没有给出原因
误打误撞找到了Google NDK的例子 https://github.com/googlesamples/android-ndk
就点进去看了下他们的配置,最后发现是没有加NDK编译的架构
ndk {
abiFilters "armeabi","x86","armeabi-v7a"
}
加上以后就可以正常加载了。
Demo完整配置:
compileSdkVersion 25
buildToolsVersion '25.0.2'
defaultConfig {
applicationId "com.machin.testzy"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
sourceSets.main {
jni.srcDirs = []
}
//不加ndk 7.0加载.so文件会报UnsatisfiedLinkError异常
ndk {
abiFilters "armeabi","x86","armeabi-v7a"
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}