Android7.0加载.so文件报UnsatisfiedLinkError异常解决

在做串口开发的时候,一般会在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"
        }
    }

你可能感兴趣的:(android开发日常)