Flutter打包Android apk时出现签名错误,如何解决?

シ瑞雪 阅读 330

我在用Flutter打包Android正式版apk时,按照官方文档生成了keystore文件,但执行flutter build appbundle时一直报签名错误:


* What went wrong:
Execution failed for task ':app:signReleaseBundle'.
> java.io.IOException: keystore.jks (No such file or directory)

我已经确认在android/app/目录下确实存在keystore.jks文件,并且在key.properties里配置了正确的密码,还通过keytool -list -keystore keystore.jks验证过文件没问题。之前用同样的配置打包过其他项目没问题,这次换了新电脑后就一直报这个错,搞不懂哪里出问题了?

我来解答 赞 28 收藏
二维码
手机扫码查看
2 条解答
上官雨妍
这个问题通常发生在 Flutter 构建 release 包的时候,签名配置没有正确识别或找不到 keystore 文件。你已经确认文件存在、密码正确、keystore 也有效,那我们来一步步排查和解决这个问题。

---

### 第一步:检查 keystore 文件路径是否正确

你提到 keystore 文件放在 android/app/ 目录下。但 **Android 构建脚本默认的当前路径是 android 目录**,所以你配置的路径可能是相对路径,导致找不到文件。

key.properties 中你可能是这样写的:

storeFile=keystore.jks


但你应该改成:

storeFile=app/keystore.jks


因为 key.properties 是在 android 目录下被读取的,所以路径要从 android/ 开始。

---

### 第二步:确保 key.properties 被正确加载

打开 android/app/build.gradle 文件,在 android 块上方添加以下代码(如果不存在的话):

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))


然后在 android.signingConfigs.release 配置中确认使用的是 keystoreProperties 中的值,例如:

signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}


这里需要注意:storeFile 必须用 file() 包装,否则会当成字符串而不是文件路径。

---

### 第三步:检查 keystore 文件是否被 Git 忽略或未正确复制到新电脑

你说这是换了新电脑之后出的问题,有可能是你把 keystore 文件复制过来的时候,**文件名写错了** 或者 **文件本身损坏了**。

你可以运行下面命令来验证:

ls -la android/app/keystore.jks


确保文件确实存在,并且可读。如果文件不存在或权限不足,就重新复制。

---

### 第四步:清理 Flutter 构建缓存(可选)

有时候旧的构建缓存也可能导致问题。你可以运行:

flutter clean
cd android
./gradlew clean
cd ..


然后再重新构建:

flutter build appbundle


---

### 第五步:手动指定 keystore 文件的绝对路径(临时验证)

为了确认是不是路径问题,你可以直接在 build.gradle 中写死绝对路径,比如:

storeFile file("/Users/yourname/yourproject/android/app/keystore.jks")


如果这一步能成功打包,说明之前的问题确实是路径配置不对。

---

### 总结一下可能出问题的地方:

| 问题点 | 原因 | 解决方法 |
|--------|------|-----------|
| 找不到 keystore | 路径配置错误 | 改成 app/keystore.jks |
| keystore 读取失败 | 没有正确加载 key.properties | 确保加载并使用了 file() |
| keystore 文件损坏 | 复制过程中出错 | 检查文件是否存在、是否可读 |
| 构建缓存干扰 | 缓存中残留旧配置 | 执行 flutter cleangradlew clean |

---

如果你按照上面的步骤一步步检查,应该就能解决这个问题了。我之前也遇到过类似情况,换了台电脑、换了项目目录,路径一错就报这个错,挺常见的。

如果还有问题,可以把 key.propertiesbuild.gradle 的配置贴出来,我可以帮你再看看。
点赞 4
2026-02-05 02:03
公孙佳鑫
这个问题我之前也遇到过,基本可以确认是路径或环境配置的问题。虽然你在android/app/目录下放了keystore.jks文件,但新电脑的环境可能跟之前不一样,导致读取不到。

按照规范来检查一下这几个点:

1. 确保key.properties文件中storeFile的路径是绝对路径,而不是相对路径。比如写成/Users/yourname/projects/yourproject/android/app/keystore.jks这样。

2. 如果不想改绝对路径,那就检查一下构建脚本的工作目录是否正确。有时候切换电脑后,工作目录可能会变,导致相对路径失效。

3. 再确认一下build.gradle文件里有没有正确引用key.properties文件。这部分官方文档写得挺清楚的,照着来就行。

最后,如果还是不行,建议直接删掉原来的keystore.jks重新生成一个,顺便清理一下构建缓存:
flutter clean
然后再试试。折腾签名这事真是够累人的,但按文档一步步来一般都能搞定。
点赞 10
2026-01-30 07:06