GitHub Action构建Flutter Android包上传Firebase App Distribution后无法覆盖安装,需先卸载旧版本
我之前也碰到过类似的问题,大概率是签名不一致导致的,你可以从这几个方向排查:
检查GitHub Action构建时的签名配置:本地构建release包时,你应该是用了自己的签名密钥(比如
local.properties里配置的keystore信息),但GitHub Action环境里可能没有正确配置签名,导致构建出来的包用的是默认的debug签名或者另一个不同的签名。Android系统要求覆盖安装的包必须和已安装包的签名完全一致,否则就会提示需要卸载旧版。你可以把keystore文件、密钥密码、密钥别名等作为Secrets存储在GitHub仓库,然后在构建步骤中配置签名:比如修改
flutter build apk命令,添加签名相关参数,或者通过Gradle的signingConfigs配置读取这些Secrets。示例构建命令可以调整为:flutter build apk --release --build-name 1.0.${{ env.NEW_BUILD_VERSION }} --build-number ${{ env.NEW_BUILD_VERSION }} --dart-define=FLUTTER_BUILD_MODE=release同时确保你的
android/app/build.gradle里的签名配置能正确读取GitHub Secrets中的信息。验证两个包的签名一致性:用
apksigner工具分别检查本地构建的包和GitHub Action构建的包的签名证书指纹。执行命令:apksigner verify --print-certs app-release.apk如果两个包的证书指纹不一样,那就是签名问题,这是最常见的诱因。
确认versionCode是否正确递增:Android系统是通过
versionCode来判断版本新旧的(build-name只是给用户展示的版本名)。你需要确保每次GitHub Action构建时,versionCode是比之前版本更高的数值。可以通过--build-number参数指定,比如和你的NEW_BUILD_VERSION保持同步递增。
另外,你可以手动下载GitHub Action上传到Firebase的APK,尝试直接安装到设备上,如果同样需要卸载旧版,那肯定是包本身的问题(签名或versionCode);如果手动安装可以覆盖,再去排查Firebase App Distribution的分发设置,但这种情况比较少见。
备注:内容来源于stack exchange,提问作者Berkkan

