今天在自己写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文件!