使用Sketch库,出现找不到.so文件

1、问题

在最新的一次需求中,需要展示Gif图,通过衡量了Glide和android-gif-drawable这个这两库的展示效率,决定使用android-gif-drawable。于是从github直接把最新的arr包下载下来,并直接加入到项目,显示效果也非常的好,但发现在某些设备上一进入应用就会直接崩掉,log如下:
StackTrace=loadLibrary:dalvik.system.PathClassLoader[DexPathList[[zip file “/data/app/com.jb.emoji.gokeyboard-1/base.apk”],
nativeLibraryDirectories=[/data/app/com.jb.emoji.gokeyboard-1/lib/arm64, /system/fake-libs64, /data/app/com.jb.emoji.gokeyboard-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn’t find “libMFtInput.so”, load:dlopen failed: library “/data/data/com.jb.emoji.gokeyboard/lib/libMFtInput.so” not foundjava.lang.UnsatisfiedLinkError:
说找不到libMFtInput.so 这个so文件,libMFtInput.so是我们原本项目中就使用到的so文件,在没添加android-gif-drawable的arr包前不存在这个问题。所以可以定位是因为添加了android-gif_drawable的arr包导致,但添加一个新的arr库怎么会影响到libMFtInput.so文件呢?

2、分析

出错信息是说在lib/arm64-v8a中找不到libMFtInput.so,如下是我们项目中存放so库的目录结构,armeabi、armeabi-v7a、x86这三个文件夹下都有libMFtInput.so这个文件,不存在出错信息中说的arm64-v8a这个文件夹
使用Sketch库,出现找不到.so文件

我们解压出现奔溃的apk,查看lib文件夹下面有哪些文件
使用Sketch库,出现找不到.so文件

我们解压加入android-gif-drawable这个库前的apk(即正常运行的apk),查看lib文件夹下面有哪些文件,文件数量和项目结构中的是一样的armeabi、armeabi-v7a、x86
使用Sketch库,出现找不到.so文件

所以可以断定在加入android-gif-drawable的arr包后,打包出来的apk中多出了一些文件夹,

我们继续解压并查看android-gif-drawable的arr包。解压出来的包中jni文件夹下包含如下。
使用Sketch库,出现找不到.so文件

解决办法:解压arr包,把jni文件夹下 armeabi、armeabi-v7a、x86这三个文件夹除外的其他文件夹删除掉,再压缩为arr,加入项目的lib中。这样打包出来的apk就能正常运行了。