创建签名密钥库和配置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 仅对必要分支/环境开放
相关推荐
成都极云科技2 小时前
2026年服务器托管收费标准解析 性价比对比及边缘节点选型全指南
运维·服务器·github
CoderJia程序员甲3 小时前
GitHub 热榜项目 - 日榜(2026-03-17)
人工智能·ai·大模型·github·ai教程
NGC_66113 小时前
cookie、session、token详解
github
汪海游龙3 小时前
03.18 AI 精选:Java 26 正式发布,带来新特性与平台演进
github·hacker news
x-cmd3 小时前
RTK - CLI 代理工具,减少 LLM 80% token 消耗 | X-CMD 推荐
人工智能·ai·github·agent·token·rtk·x-cmd
badhope4 小时前
Python、C、Java 终极对决!谁主沉浮?谁将消亡?
java·c语言·开发语言·javascript·人工智能·python·github
lauo4 小时前
从“安全孤岛”到“信任基石”:ibbot智体机灵如何重新定义AI智能体的安全范式
人工智能·安全·智能手机·架构·开源·github
2301_816374334 小时前
AutoBackupGuard 多服务器自动化备份与完整性校验系统
linux·运维·服务器·centos·自动化·github
无限进步_4 小时前
【C++】字符串中的字母反转算法详解
开发语言·c++·ide·git·算法·github·visual studio