我正在开发一个GitHub操作工作流,它构建签名的APK并部署到Playstore.对于签名的APK,我们需要key.properties个文件,其中包含

storePassword=abc-m0bile-Pa$$
keyPassword=password_of_key
keyAlias=alias_value
storeFile=./path_of_jks_file

我将StorePassword存储在GIT机密中,然后在工作流中检索该值.当在工作流中检索密码时,密码中的"$$"将自动替换到4594中.

我的意思是密码:"fn7-m0bille-pa$$"被转换为"fn7-m0bille-pa4594".

下面是检索密码并记录在key.properties文件中的代码块

# Create the key.properties file with secrets
      - name: Create key.properties
        run: |
          echo "storeFile=${{ steps.android_keystore.outputs.filePath }}" > android/key.properties
          echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties
          echo "storePassword=${{ secrets.STORE_PASSWORD }}" >> android/key.properties
          echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties

这就是我知道从机密中获取的密码不正确或被以某种方式操纵的原因

 name: Debug Keystore Information
        run: |
          echo "Keystore File: ${{ steps.android_keystore.outputs.filePath }}"
          echo "Key Alias: ${{ secrets.KEY_ALIAS }}"
          echo "storePassword=${{ secrets.STORE_PASSWORD }}"
          echo "keyPassword=${{ secrets.KEY_PASSWORD }}"
        env:
          YOUR_KEYSTORE_PASSWORD: ${{ secrets.KEY_PASSWORD }}

UPDATE

这就是我到目前为止试图解决的问题

1. Escape the Dollar Sign:个 使用双美元符号($$)转义store 密码中的美元符号.

echo "storePassword=${{ secrets.STORE_PASSWORD // '$' / '$$' }}" >> android/key.properties

结果:它没有工作,并且失败,错误是语法无效.

2. Use Single Quotes:个 用单引号将密码值引起来,这样可以防止解释特殊字符.

echo "storePassword='${{ secrets.STORE_PASSWORD }}'" >> android/key.properties

结果:失败,因为它仍在将$$转换为1716

3. Use 100 Command: 它使用sed命令将美元符号($)替换为反斜杠和美元符号($).

echo "storePassword=$(echo '${{ secrets.STORE_PASSWORD }}' | sed 's/\$/\\$/g')" >> android/key.properties

结果:它让我更接近了一点,因为输出是pa$$

4. Encode storePassword into base64: 我将密码转换为base64,然后存储在git secrets中.在工作流程中,我获取编码的密码,然后从base64解码

- name: Decode and set environment variables
  run: |
    ENCODED_STORE_PASSWORD=${{ secrets.ENCODED_STORE_PASSWORD }}
    ENCODED_KEY_PASSWORD=${{ secrets.ENCODED_KEY_PASSWORD }}
    
    DECODED_STORE_PASSWORD=$(echo "$ENCODED_STORE_PASSWORD" | base64 --decode)
    DECODED_KEY_PASSWORD=$(echo "$ENCODED_KEY_PASSWORD" | base64 --decode)
    
    echo "DECODED_STORE_PASSWORD=$DECODED_STORE_PASSWORD" >> $GITHUB_ENV
    echo "DECODED_KEY_PASSWORD=$DECODED_KEY_PASSWORD" >> $GITHUB_ENV

结果:它让我更接近了一点,因为输出是pa$$

我甚至try 编码key.properties文件,将其存储为git_secret,并在工作流中检索该秘密,解码它,然后直接提供签名apk所需的值.但也没有成功.

推荐答案

你的问题有一个简单的解决方案. 只需按如下方式更新您的git密钥store_password

Abc-m0bille-pax==同步,由长者更正==

你只需要在$$前面加一个"\",就不会有任何错误.

Flutter相关问答推荐

在Flutter中创建具有固定行的压缩水平列表

文本未设置在集装箱摆动的中心

想更新ListView上的索引点击块Flutter

有没有一种正确的方法可以通过上下滑动在两个小部件(在我的情况下是应用程序栏)之间切换?

Flutter creating Constant.dart InputDecoration section put pass in hintText

如何在表格日历标题下方添加文本?

关闭模式,但再次打开时微件条件相同

从.gitignore中排除.fvm/fvm_config.json

FittedBox叠加技术在Flutter 中的应用

如何在Flutter中将背景 colored颜色 更改为黑色?

我无法找到修复此错误的位置,指出无法使用静态访问来访问实例成员

Flutter 中的区域不匹配

如何使用Riverpod提供程序正确构建搜索栏?

如何解决需要一个标识符,但得到的是:.try 在:之前插入一个标识符.dart 错误

切换 Firebase 项目后 Flutter FirebaseAuthException 'configuration-not-found'

如何在 flutter 的alert 对话框中实现进度指示器?

Flutter Desktop,如何获取windows用户配置文件名称?

Flutter 平台通道将多数据传递给 windows 功能

如何从dart 中的当前日期时间中减go 1 天?

Flutter 在滚动期间保持某些元素固定?