1. 第三方native library无法加载
由于我们的 flutter
应用中要集成第三方的 sdk
来实现一些特殊功能,该 sdk
中集成了一些 native library
,而且只有 32位
的。目前在 flutter
的 android
工程中添加了这些 library
, 如下图所示:
随后在 android
工程的 build.gradle
文件中手动指定 jniLibs
目录的路径,如下图所示:
现在正常在 flutter 工程中执行 debug 启动工程,如下图所示:
点击界面按钮,调用第三方 native library
后立马出现报错,随后 App
闪退。报错内容如下:
通过日志可以看出来,我们前面添加的 native library
没有被加载。
当时首先怀疑的是打包时是否将 native library
有打包到 apk
中,所以采用 android studio
的 analyze apk
命令分析,发现确实是已经打包到 apk
文件中了。如下图所示:
仔细回顾上面的日志,不难发现,没有被加载的原因是因为它寻找 library
的路径不对,根本没有包含我们需要的 armeabi-v7a
这个目录。如下图所示,加载的路径基本上都是 arm64
相关的目录,很显然是因为我的真机是 arm64
架构的,所以可能导致这个问题。
关于这个问题,在文章 https://medium.com/codechai/flutter-app-couldnt-find-libflutter-so-c95ad81cbccd 中有详细的说明。大体情况如下:
当apk安装时,首先会标记当前应用是32位的还是64位的,这决定了后面在哪个目录寻找本地库。
- 首先在
lib/arm64-v8a
目录中寻找是否有native libraray
,如果有就标记为64位
。(在上面的情况中,