java.lang.UnsatisfiedLinkError:找不到so等等的排查经过
问题发生:
本来数据库用的room,发现greendao作者写了个objectbox,就导入项目玩玩,结果发生了上述问题。
排查:
- 首先检查安装文件里有没有这个so文件,
adb shell
进入设备,在data/data/包名/lib
下果然有一些其他的so,但是没有报错的那个so。好的,问题发现。 - 既然没有安装,那么打包有没有出问题呢?找到apk文件,打开,在lib中有arm、armv7、armv8等。报错的so在arm里有,在armv7、armv8里都没有。OK,问题定位了。
设备是armv7的,之前用的数据库框架room是google对sqlite的一些封装,没有引入so,打包后只有arm,兼容几乎所有android设备,故没有报错。引入objectbox后,作者认为arm已过时没有支持,而且也不是我手动引入的,是在
build.gradle
里通过插件引入的,也没有感知到这个问题。所以打包后有arm、armv7、armv8等,而设备是v7的,在安装的时候就只将armv7安装了进去,导致了报错。
解决:
在module的build.gradle下
对ndk支持限定只支持armv7
1 | defaultConfig { |
再将报错第三方库的jnilib里的arm文件夹更名为armeabi-v7a即可。(他没提供v7,只能这么解决了)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 七夜的小屋!