解决Android引用多个库的jni架构平台支持冲突的问题

今天在自己写Demo时, 引用了两个库: Realm 和高德地图.

接着时开开心心地码代码,顺利地编译apk.然后一运行挂了!!!
异常如下:java.lang.UnsatisfiedLinkError

查看了代码,找到了异常原因:

高德地图只有一个 armeabi 的so文件,而 Realm 带有全平台的so文件.运行时由于手机是 armeabi-v8a ,所以一运行就挂了!

怎么解决呢?本来想下载Realm的源码重新编译aar然后去除其他平台的so文件,但又在群里问了一下,找到了简单的方法.

解决办法

在module的build.gradle文件添加如下设置:

buildTypes {
    release {
        ndk {
            abiFilters = ["armeabi"]
        }
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    debug {
        ndk {
            abiFilters = ["armeabi"]
        }
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

在ndk设置里面添加过滤,只添加需要的架构,然后重新编译.问题解决了.

这个知识点虽小,但是替换了我之前粗暴的解决办法: 直接删除aar文件的so文件!

Last modification:May 29th, 2017 at 01:53 pm
If you think my article is useful to you, please feel free to appreciate

2 comments

  1. 胡宇林

    你好,楼主! 我按照上面的方式后,运行不起来。
    realm 是 2.1.1

    1. DevWiki
      @胡宇林

      具体是什么错误呢?

Leave a Comment