You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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位设备性能,不推荐长期使用:

  1. 在AndroidManifest.xml的<application>标签中添加:
android:extractNativeLibs="true"
  1. 在Module级别的build.gradle中配置:
android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a'
        }
    }
}

方法3:升级Flutter版本

部分旧版Flutter的AAB打包逻辑存在兼容性问题,升级到3.10+稳定版可能自动修复这类系统加载路径的兼容问题。


内容的提问来源于stack exchange,提问作者Jai Techie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:57:09