出现的现象是,arm所属平台文件夹下有2个so,而arm-v7所属平台文件夹下有1个,就出现这个错误了。
因为,根据jni的规则,平台文件夹下的so文件,必须是一一对应的,不能少,简单粗暴的办法是,删除掉不需要平台的so、或者补全其他平台的so文件。
但是如何在编译时就解决这个问题?答案是修改gradle的build文件。
同时一个程序中有别人的.so和自己的jni都要设置成统一的平台,自己的可以按照下面方式实现,别人的将多余的平台的.so全部删除。
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选项中设置abiFilters,即可过滤平台,但是需要注意的是,这个平台所属的so文件必须完整,不然仍旧会报错。