我正在尝试从我的 Flutter 项目构建一个发布 apk,正如您在
.gradle
文件中看到的,密钥正在由 System.getenv(name)
访问,这是我负责的 build.gradle
文件部分:
release {
keyAlias 'e-commerce-alias'
keyPassword System.getenv("KEYPASSWORD")
storePassword System.getenv("STOREPASSWORD")
storeFile file("e-commerce.keystore")
}
这是我的
.bashrc
文件:
export KEYPASSWORD="****"
export STOREPASSWORD="****"
export KEY_STORE_PATH="/home/omer358/Documents/keystore_files/e-commerce-releasa.keystore"
当我尝试使用上述配置构建发布 APK 时,我收到错误指示
SigningConfig "release" is missing required property "storePassword".
,奇怪的是提到的属性确实存在!当我尝试对属性进行硬编码时,出乎意料的是,一切都工作正常! APK 已成功构建并安装!这是我在本地和我的存储库中添加环境变量的方法:
.bashrc
文件中添加了上面显示的变量。source ~/.bashrc
# Set environment variables
- name: Set environment variables
run: |
echo "export KEYPASSWORD=${{ secrets.E_COMMERCE_KEY_PASSWORD }}" >> $GITHUB_ENV
echo "export STOREPASSWORD=${{ secrets.E_COMMERCE_STORE_PASSWORD }}" >> $GITHUB_ENV
再次,当我对
keyPassword
和 storePassword
进行硬编码时,在这两种环境中一切都工作正常!
echo $STOREPASSWORD
时,它确实打印了值,所以,问题不在于我的环境变量!
您无法使用这种方式运行版本。使用 flutter_dotenv 或 System.getenv 等方法分离敏感信息(例如密钥密码和存储密码)是一个很好的做法... 创建此方法是为了帮助我们管理文件。
首先,如果您使用flutter_dotenv,System.getenv或任何方式来分离密钥密码,存储密码或任何秘密文件,它很好,当我们使用flavor来管理文件或防止上传时,我们经常使用它将机密文件保存到 VCS 中(我们也可以使用 .gitignore)。但是,当您运行 flutter build apk 时,编译器将创建 apk 文件并且您可以安装它,因为您尚未配置要发布的项目,即使您可以创建 appbundle。但如果您已将项目配置为发布,例如创建上传密钥库并配置 gradle 中的签名等。 在这种情况下,您将能够创建 .apk 文件,但无法创建版本,因为签名过程需要密钥密码和密钥库,并且您必须使用 documentation 中推荐的方式,而不是 System.getenv因为正如我之前提到的管理文件的方式。