Google Play Console发布Flutter应用报错 缺失libflutter.so无法启动Activity
问题根因
崩溃核心报错为java.lang.UnsatisfiedLinkError: couldn't find "libflutter.so",触发场景为x86架构环境。
本地无法复现的原因非常明确:日常测试基本使用arm/arm64架构的实体安卓设备,debug模式下Flutter默认会打包当前连接设备对应架构的native库,不会触发x86架构的so加载逻辑。而Google Play预发布检测使用的是内置x86架构的官方测试爬虫(日志中可见androidx.test.tools.crawler进程),当上传的App Bundle生成了x86架构的分包split_config.x86.apk,但包内没有对应架构的libflutter.so文件时,启动就会直接崩溃。
这个问题是Flutter打包App Bundle时的常见配置问题,和是否修改原生配置没有直接关系,属于默认构建配置和Google Play测试环境的适配冲突。
可行解决方案
根据使用的Flutter版本选对应方案操作即可:
- 若使用Flutter 3.10以下版本(仍支持32位x86架构)
打开项目路径下的android/app/build.gradle文件,在android > defaultConfig代码块中新增ndk架构过滤配置,明确指定需要打包的所有ABI架构:android { defaultConfig { // 其他已有配置保持不变 ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64', 'x86' } } } - 若使用Flutter 3.10及以上版本(官方已移除32位x86架构release构建支持)
不需要强行打包x86架构的so,直接在同个build.gradle文件中新增bundle配置,告诉Google Play不要生成32位x86的分包,避免爬虫加载空的x86分包触发崩溃:android { // 其他已有配置保持不变 bundle { abi { enableSplit true exclude 'x86' } } } - 修复后本地验证
注意:修改配置后必须先执行flutter clean清除历史构建缓存,否则旧的构建产物会导致新配置不生效。
清理缓存后重新打release包,在Android Studio中创建一个x86架构的Android 9(API 28,和报错日志中的系统版本一致)模拟器,安装release包确认可以正常启动无崩溃,再重新上传构建包到Google Play Console即可,预发布检测不会再触发该崩溃。
内容的提问来源于stack exchange,提问作者Luka
相关产品推荐
相关产品推荐

