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

Flutter Github Action构建APK失败:找不到签名密钥库文件

解决Flutter Github Action构建APK/AAB时的签名文件找不到问题

问题出在这几个地方

  1. 密钥文件名对不上:报错提示寻找keystore2.jks,但你的GitHub Action中生成的密钥库文件是key.jks,名称不匹配导致找不到文件。
  2. 文件路径配置错误:你把密钥文件生成在android/目录下,但项目签名配置默认会从android/app/目录查找文件,或者key.properties里的路径写得有问题,导致解析出重复项目名的异常路径。
  3. 多余的Flutter Clean操作:构建AAB之后执行flutter clean完全没必要,反而可能打乱后续构建的依赖状态。
  4. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:19:55