SigningConfig“release”缺少必需的属性“storePassword”,尽管它存在

问题描述 投票:0回答:1

我正在尝试从我的 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 已成功构建并安装!
这种行为发生在我的本地和我的 CI“GITHUB ACTIONS”上,

这是我在本地和我的存储库中添加环境变量的方法:

本地:

  • 我在 Linux 环境中的
    .bashrc
    文件中添加了上面显示的变量。
  • 我跑步
    source ~/.bashrc

Github:

  • 我将我的属性添加为我的存储库中的秘密。
  • 在我的 build.yaml 文件中,我采取了一个步骤来访问秘密并将它们添加到`GITHUB_ENV
 # 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
时,它确实打印了值,所以,问题不在于我的环境变量!

android flutter apk keystore
1个回答
0
投票

底线是:

您无法使用这种方式运行版本。使用 flutter_dotenvSystem.getenv 等方法分离敏感信息(例如密钥密码和存储密码)是一个很好的做法... 创建此方法是为了帮助我们管理文件。

更多说明:

首先,如果您使用flutter_dotenvSystem.getenv或任何方式来分离密钥密码,存储密码或任何秘密文件,它很好,当我们使用flavor来管理文件或防止上传时,我们经常使用它将机密文件保存到 VCS 中(我们也可以使用 .gitignore)。但是,当您运行 flutter build apk 时,编译器将创建 apk 文件并且您可以安装它,因为您尚未配置要发布的项目,即使您可以创建 appbundle。但如果您已将项目配置为发布,例如创建上传密钥库并配置 gradle 中的签名等。 在这种情况下,您将能够创建 .apk 文件,但无法创建版本,因为签名过程需要密钥密码和密钥库,并且您必须使用 documentation 中推荐的方式,而不是 System.getenv因为正如我之前提到的管理文件的方式。

© www.soinside.com 2019 - 2024. All rights reserved.