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"
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值