Flutter Github Action构建APK失败:找不到签名密钥库文件
解决Flutter Github Action构建APK/AAB时的签名文件找不到问题
问题出在这几个地方
- 密钥文件名对不上:报错提示寻找
keystore2.jks,但你的GitHub Action中生成的密钥库文件是key.jks,名称不匹配导致找不到文件。 - 文件路径配置错误:你把密钥文件生成在
android/目录下,但项目签名配置默认会从android/app/目录查找文件,或者key.properties里的路径写得有问题,导致解析出重复项目名的异常路径。 - 多余的Flutter Clean操作:构建AAB之后执行
flutter clean完全没必要,反而可能打乱后续构建的依赖状态。 - Version Job未同步:Android构建Job没有等待Version Job完成就执行,导致版本号修改的操作根本没应用到构建代码中。
按下面步骤修改即可解决
1. 统一密钥库文件名
检查你存储在GitHub Secrets中的KEY_PROPERTIES_FILE内容,确保storeFile的值和Action中生成的文件名一致:
# 正确示例(对应Action生成的key.jks) storePassword=你的密码 keyPassword=你的密码 keyAlias=你的别名 storeFile=key.jks
如果之前配置的是storeFile=keystore2.jks,请修改为key.jks,并重新更新GitHub Secrets。
2. 把密钥文件生成到正确目录
将密钥文件直接生成到android/app/目录下,匹配签名配置的默认查找路径:
修改Action中Prepare key.jks & key.properties files步骤的工作目录:
- name: Prepare key.jks & key.properties files env: KEYSTORE_FILE_BASE64: ${{ secrets.KEYSTORE_FILE_BASE64 }} KEY_PROPERTIES_FILE: ${{ secrets.KEY_PROPERTIES_FILE }} run: | echo "Convert key base64 string to a file" echo "$KEYSTORE_FILE_BASE64" > key.jks.base64 base64 --decode key.jks.base64 > key.jks echo "Convert key.properties secret string to a file" echo "$KEY_PROPERTIES_FILE" > key.properties working-directory: 'android/app/'
3. 删除多余的Flutter Clean步骤
直接移除以下冗余步骤,构建APK时可以复用之前拉取的依赖:
- name: Flutter clean run: flutter clean - name: Flutter pub get run: flutter pub get
4. 让Android构建等待Version Job完成
修改Android Job的依赖配置,确保使用更新了版本号的代码进行构建:
android: name: Android CI/CD needs: [code-analysis-and-testing, version] # 同时依赖version job runs-on: ubuntu-latest # 其他配置保持不变
修改后的完整Android Job示例
android: name: Android CI/CD needs: [code-analysis-and-testing, version] runs-on: ubuntu-latest permissions: contents: write timeout-minutes: 30 steps: - name: Checkout repository uses: actions/checkout@v3 - name: Prepare key.jks & key.properties files env: KEYSTORE_FILE_BASE64: ${{ secrets.KEYSTORE_FILE_BASE64 }} KEY_PROPERTIES_FILE: ${{ secrets.KEY_PROPERTIES_FILE }} run: | echo "Convert key base64 string to a file" echo "$KEYSTORE_FILE_BASE64" > key.jks.base64 base64 --decode key.jks.base64 > key.jks echo "Convert key.properties secret string to a file" echo "$KEY_PROPERTIES_FILE" > key.properties working-directory: 'android/app/' - name: Set up Flutter uses: subosito/flutter-action@v2 with: channel: ${{ env.FLUTTER_CHANNEL }} flutter-version: ${{ env.FLUTTER_VERSION }} - name: Build AAB run: flutter build appbundle --release - name: Upload AAB artifact uses: actions/upload-artifact@v3 with: name: release-aab path: ${{ env.PATH_TO_AAB }} - name: Build APK artifact run: flutter build apk --release - name: Create a Release in GitHub uses: ncipollo/release-action@v1 with: artifacts: "build/app/outputs/apk/release/*.apk,${{ env.PATH_TO_AAB }}" token: ${{ secrets.GH_TOKEN_MOBILE }} tag: v1.0.${{ github.run_number }} commit: ${{ github.sha }} prerelease: true - name: Slack Notification uses: rtCamp/action-slack-notify@v2 env: SLACK_CHANNEL: -dev-mobile-app SLACK_COLOR: ${{ job.status }} SLACK_ICON: https://github.com/rtCamp.png?size=48 SLACK_MESSAGE: 'https://github.com/company-2/mobile_2/releases/download/v1.0.${{ github.run_number }}/mobile-release.apk' SLACK_TITLE: '${{ github.event.head_commit.message }}' SLACK_USERNAME: forTestingFromGitHubActions SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_KEY }}
总结
核心问题是密钥库文件名不匹配和路径配置错误,同时Job依赖关系未理顺。通过统一文件名、调整生成路径、移除冗余步骤、修正依赖关系,就能正常构建APK和AAB了。
内容的提问来源于stack exchange,提问作者Lazizbek Fayziev
相关产品推荐
相关产品推荐

