问题
最近在研究一个叫Hacki的Flutter应用,用Debug模式调试应用的时候应用可以在手机上运行没有问题,而当我打算生成Release版本的时候,就出现了报错。
运行flutter build apk
,之后会得到一个错误SigningConfig "release" is missing required property "storeFile".
. 而对于我这种没有接触过安卓编程的小白来说,完全搞不清楚为什么会出现这个问题,于是只能求助于搜索引擎。
问题所在与解决
一通搜索之后定位问题到android/build.gradle
文件中,搜索storeFile
可以找到这一个代码块:
1 | signingConfigs { |
从命名上来看可以看出来大概应该是签名的问题,而从我对于安卓打包应用的了解,打包为Release版的时候是需要进行签名的。再往下看,storeFile
使用了一个三目运算符来赋值,最后得到的结果只有两个:file(keystoreProperties['storeFile'])
和null
. 推测应该就是条件不满足导致取值为null了,问题应该就是签名的时候缺失了keystoreProperties['storeFile']
的配置。
跳转到keystoreProperties定义的地方可以看到:
1 | def keystoreProperties = new Properties() |
从这一块可以看到我们需要一个叫做key.properties
的文件,同时应该要往里写入一些东西来作为keystoreProperties
. 那么思路就有了,直接搜索Flutter android key.properties
,来到官网的Build and release an Android app. 可以看到我们需要做以下几步:
创建一个keystore文件
1
2
3
4
5
6
7# -keystore后跟着的是keystore文件的存放位置,可以自定义,只要第2步在项目里指定更改后的位置就可以了
# 运行后需要输入密钥(重要, 后面要用),姓名住址之类的信息(不重要,但是如果你要发布给别人用的话还是最好写一下)
# Linux&Mac可以使用
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
# Windows可以使用
keytool -genkey -v -keystore %userprofile%\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload给我们的项目配置一下keystore的信息(密钥,路径等)
在android/
下创建一个文件key.properties
,填入:1
2
3
4storePassword = 第一步的密钥
keyPassword = 第一步的密钥
keyAlias = upload // 不是很明白这个干啥的
storeFile = 第一步生成的文件的路径在
build.gradle
文件中配置好keystoreProperties
参考上文
到这里问题就完美解决了,不过中间还是有很多安卓相关的没搞明白,留个坑以后填。
- Post title:Flutter 签名生成Apk
- Post author:QBug
- Create time:2022-09-15 22:57:23
- Post link:https://q-bug4.github.io/2022/09/15/Flutter-签名生成Apk/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.