Android JNI:关于导入Realm后报错找不到其它类库的so

今天遇到一个坑,项目里之前有jni库的支持,原本运行正常,在导入Realm后运行时提示找不到so库 报错信息如下:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com..-1/base.apk"],nativeLibraryDirectories=[/data/app/com..-1/lib/arm64, /data/app/com..-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn't find "****.so"

1.分析问题:

查看日志可得知,应用在运行时去加载本地动态链接库时发现找不到,而这个路径很明显是arm64和arm64-v8a,指明我的手机是arm64位的,并且我的项目中包含这个arm64的动态链接库文件夹,当需要加载本地库时系统会找到这个文件夹里,但是发现并没有,于是报错。

2.跟踪问题:

观察我原来的项目中其他的动态链接库,发现只有armeabi、armeabi-v7a和x86,确实没有arm64,但是也并没有arm64的动态链接库文件夹,查看build文件:

Android JNI:关于导入Realm后报错找不到其它类库的so_第1张图片
在对应module的build-intermediates-transforms文件夹下.png

发现原来是realm有这个版本的so库,问题就是realm的多版本so库所导致的。

3.解决办法

如果手动把realm重新编译 去除这个so库是可以的,但是太过复杂,依靠我们强大的gradle进行打包配置即可。
在对应的build.gradle的android{}中添加如下代码即可完美解决:

packagingOptions { exclude "lib/arm64-v8a/librealm-jni.so"}

你可能感兴趣的:(Android JNI:关于导入Realm后报错找不到其它类库的so)