Flutter应用发布Google Play遇预启动错误:libflutter.so缺失
问题描述
发布Flutter应用到Google Play商店时,启动报错:
java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.domain.package_name/fr.domain.package_nam.MainActivity}: java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.UnsatisfiedLinkError: dlopen failed: library "libflutter.so" not found
已尝试在build.gradle中添加如下packagingOptions配置,但问题未解决:
packagingOptions { pickFirst 'lib/x86_64/libapp.so' pickFirst 'lib/x86_64/libflutter.so' pickFirst 'lib/armeabi-v7a/libapp.so' pickFirst 'lib/armeabi-v7a/libflutter.so' pickFirst 'lib/arm64-v8a/libapp.so' pickFirst 'lib/arm64-v8a/libflutter.so' }
可行解决方案
检查Google Play应用签名配置
若使用Google Play App Signing,需确认签名过程未丢失so文件。在Google Play控制台「发布管理」→「应用签名」中查看配置,确保未过滤相关ABI架构的文件。明确指定支持的ABI架构
在android/app/build.gradle的defaultConfig中添加ABI过滤,避免架构遗漏或冗余:defaultConfig { // 其他原有配置 ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64' } }调整App Bundle拆分规则
Google Play默认会按设备架构拆分APK,可能导致so文件缺失。修改build.gradle的bundle配置,确保拆分后包含所需架构的so文件:android { // 其他原有配置 bundle { abi { enableSplit = true include 'armeabi-v7a', 'arm64-v8a', 'x86_64' } language { enableSplit = false } density { enableSplit = false } } }清理缓存后重新构建
执行以下命令清理项目缓存,再重新生成发布包:flutter clean flutter build appbundle --release检查第三方插件的ABI兼容性
确认项目中使用的原生插件是否支持你指定的ABI架构,避免因插件缺失对应so文件导致打包异常。
内容的提问来源于stack exchange,提问作者Christophe

