Flutter应用在arm64架构下因缺失libflutter.so崩溃求助
Flutter AAB发布后arm64架构崩溃问题解决
问题根源
Android系统中arm64是arm64-v8a的非标准兼容别名,部分设备(尤其是老系统或定制ROM)的动态库加载逻辑会优先查找arm64目录,但Flutter打包AAB时只会生成官方标准的arm64-v8a目录,导致这类设备找不到libflutter.so触发崩溃。
为什么没有arm64文件夹?
Flutter严格遵循Android官方的架构命名规范,arm64-v8a是64位ARM架构的标准目录名称,官方打包流程不会生成arm64这个非标准目录。你解压AAB看到的arm64-v8a就是对应64位ARM设备的库目录,只是部分设备的系统加载逻辑有差异才会去查找arm64。
涉及哪些用户?
- 运行Android 6.0(API 23)及以下的arm64-v8a设备:这类系统的库加载逻辑对目录别名兼容性差
- 使用定制ROM的arm64-v8a设备:部分厂商修改了系统加载路径规则,优先找
arm64目录 - 少数老旧64位ARM设备:硬件支持arm64-v8a,但系统镜像未遵循标准命名规范
解决方法
方法1:自动创建arm64兼容目录(推荐)
在Module级别的build.gradle中添加配置,让打包时自动复制arm64-v8a下的库到arm64目录:
android { // ... 保留原有配置 packagingOptions { jniLibs { useLegacyPackaging = true } } // 新增任务:复制arm64-v8a的so到arm64目录 task copyArm64Libs(type: Copy) { from fileTree(dir: 'build/intermediates/merged_jni_libs/release/out/lib/arm64-v8a', include: '*.so') into file('build/intermediates/merged_jni_libs/release/out/lib/arm64') } // 让打包任务依赖这个复制操作 tasks.whenTaskAdded { task -> if (task.name.startsWith('package')) { task.dependsOn copyArm64Libs } } }
重新构建AAB并上传Play Store即可。
方法2:强制32位运行(临时方案)
如果暂时不想处理64位兼容,可限制应用仅以32位模式运行,但会浪费64位设备性能,不推荐长期使用:
- 在
AndroidManifest.xml的<application>标签中添加:
android:extractNativeLibs="true"
- 在Module级别的
build.gradle中配置:
android { defaultConfig { ndk { abiFilters 'armeabi-v7a' } } }
方法3:升级Flutter版本
部分旧版Flutter的AAB打包逻辑存在兼容性问题,升级到3.10+稳定版可能自动修复这类系统加载路径的兼容问题。
内容的提问来源于stack exchange,提问作者Jai Techie
相关产品推荐
相关产品推荐

