创建签名密钥库和配置CICD签名

1. 创建签名密钥

在终端执行以下命令生成密钥库文件:

bash 复制代码
keytool -genkey -v -keystore 文件名.jks -keyalg RSA -keysize 2048 -validity 10000 -alias 密钥别名

参数说明:

  • -keystore: 密钥库文件存储路径(建议放在项目根目录之外)
  • -alias: 后面写密钥别名
  • 按提示设置密码并填写证书信息
  • RSA是加密算法

创建后可验证

bash 复制代码
keytool -list -v -keystore 文件名.jks -alias 密钥别名

2. 项目配置

步骤1:创建密钥属性文件

android/ 目录下创建 key.properties 文件:

ini 复制代码
storePassword=你的密钥库密码
keyPassword=你的密钥密码
keyAlias=upload
storeFile=/path/to/upload-keystore.jks  # 使用绝对路径或相对路径
步骤2:配置build.gradle

修改 android/app/build.gradle 文件:

scss 复制代码
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')

if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    // ... 其他配置
    
    signingConfigs {
        release {
            if (keystorePropertiesFile.exists()) {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
                storePassword keystoreProperties['storePassword']
            }
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            // ... 其他配置
        }
        
        // 为开发者提供调试配置
        debug {
            signingConfig signingConfigs.debug
        }
    }
}
步骤3:git 忽略

.gitignore 文件中添加:

bash 复制代码
# 安卓签名密钥
android/key.properties
*.jks
*.keystore

3. 配置 GitHub Secrets

我来详细说明如何将 .jks 文件转换为 GitHub Actions 可用的 KEYSTORE_FILE 格式。

步骤1:将 .jks 转为 Base64 字符串

Linux/macOS:

bash 复制代码
base64 -i 文件名.jks | pbcopy  # 直接复制到剪贴板
# 或输出到文件
base64 -i 文件名.jks > keystore_base64.txt

Windows (PowerShell):

css 复制代码
[Convert]::ToBase64String([IO.File]::ReadAllBytes("文件名.jks")) | Set-Clipboard

验证编码结果(可选):

bash 复制代码
# 检查文件大小是否匹配
cat keystore_base64.txt | base64 -d | wc -c
ls -la 文件名.jks
# 两个数字应该一致
步骤2:配置 GitHub Secrets

进入你的 GitHub 仓库 → Settings → Secrets and variables → Actions → New repository secret

Secret 名称
KEYSTORE_FILE 上面生成的 Base64 字符串
KEYSTORE_PASSWORD 你的密钥库密码
KEY_ALIAS 密钥别名
KEY_PASSWORD 你的密钥密码

* 一般来说 KEY_PASSWORDKEYSTORE_PASSWORD 就是同一个密码

4. GitHub Actions 工作流配置

创建 .github/workflows/android-release.yml

yaml 复制代码
name: Android Release Build

on:
  push:
    branches: [main, release/*]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
      # 1. 检出代码
      - uses: actions/checkout@v4
      
      # 2. 设置 JDK
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
      
      # 3. 解码还原 keystore 文件(关键步骤!)
      - name: Decode Keystore
        run: |
          mkdir -p ~/.android
          echo "${{ secrets.KEYSTORE_FILE }}" | base64 -d > ~/.android/release.jks
          ls -la ~/.android/release.jks  # 验证文件存在
      
      # 4. 构建签名 APK
      - name: Build Signed APK
        env:
          KEYSTORE_PATH: ~/.android/release.jks
          KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
          KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
          KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
        run: |
          ./gradlew assembleRelease \
            -Pandroid.injected.signing.store.file=$KEYSTORE_PATH \
            -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD \
            -Pandroid.injected.signing.key.alias=$KEY_ALIAS \
            -Pandroid.injected.signing.key.password=$KEY_PASSWORD
      
      # 5. 上传构建产物
      - name: Upload APK
        uses: actions/upload-artifact@v4
        with:
          name: release-apk
          path: app/build/outputs/apk/release/*.apk

5. 安全注意事项

风险 防护措施
Base64 字符串泄露 务必存入 GitHub Secrets,绝不硬编码
日志泄露 使用 ::add-mask:: 或避免打印密钥
密钥文件残留 使用 GitHub Actions 临时环境,每次销毁
权限过大 Secrets 仅对必要分支/环境开放
相关推荐
AI成长日志4 小时前
【GitHub开源项目】推理优化技术栈全览:从PyTorch到专用引擎
pytorch·开源·github
中科三方4 小时前
完整指南:域名解析暂停是什么意思,如何恢复正常解析?
github
Freak嵌入式4 小时前
小作坊 GitHub 协作闭环:fork-sync-dev-pr-merge 实战指南
python·github·远程工作·代码规范·micropython·协作
宝桥南山5 小时前
GitHub Copilot - 尝试使用一下GitHub Copilot SDK
microsoft·ai·微软·github·aigc·copilot
爱分享的阿Q5 小时前
GitHub趋势-AI工具链生态
人工智能·github
程序员柒叔5 小时前
OpenClaw 一周动态-2026-W15
github·aigc·openclaw·clawbot·motlbot
CoderJia程序员甲5 小时前
GitHub 热榜项目 - 日榜(2026-04-08)
人工智能·ai·大模型·github·ai教程
无限进步_5 小时前
【C++】反转字符串的进阶技巧:每隔k个字符反转k个
java·开发语言·c++·git·算法·github·visual studio
MicrosoftReactor5 小时前
技术速递|GitHub 初学者指南:GitHub 安全入门
安全·github
qq_3810137414 小时前
IntelliJ IDEA中GitHub Copilot完整使用教程:从安装到实战技巧
其他·github·intellij-idea·copilot