#!/bin/bash # ============================================================ # OpenDance Studio —— 生成发布签名密钥库 # # 生成的 keystore 与 keystore.properties **不会入库**(见 .gitignore), # 请自行妥善备份;丢失后无法对已发布 APK 做覆盖安装升级。 # # 用法: # bash build/gen-keystore.sh # 交互式,使用默认文件名 # CN=yourname bash build/gen-keystore.sh # 指定证书 CN # KEYSTORE_PASSWORD=xxx KEY_PASSWORD=yyy bash build/gen-keystore.sh # ============================================================ set -euo pipefail PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)" cd "$PROJECT_DIR" KEYSTORE_DIR="$PROJECT_DIR/keystore" KEYSTORE_FILE="$KEYSTORE_DIR/opendance-release.jks" PROPS_FILE="$PROJECT_DIR/keystore.properties" ALIAS="${KEY_ALIAS:-opendance}" STORE_PASS="${KEYSTORE_PASSWORD:-}" KEY_PASS="${KEY_PASSWORD:-}" CN="${CN:-OpenDance Studio}" DNAME="${DNAME:-CN=$CN, OU=OpenDance, O=OpenDance Studio, L=Unknown, ST=Unknown, C=CN}" VALIDITY_DAYS="${VALIDITY_DAYS:-10000}" if ! command -v keytool >/dev/null 2>&1; then echo "错误:未找到 keytool。请安装 JDK(17+)并确保 keytool 在 PATH 中。" >&2 exit 1 fi if [ -f "$KEYSTORE_FILE" ]; then echo "密钥库已存在:$KEYSTORE_FILE" echo "如需重新生成,请先删除该文件(注意:会导致已发布 APK 无法升级安装)。" exit 0 fi if [ -z "$STORE_PASS" ]; then read -r -s -p "请输入密钥库口令(至少 6 位):" STORE_PASS; echo read -r -s -p "请再次输入: " STORE_PASS_CONFIRM; echo [ "$STORE_PASS" = "$STORE_PASS_CONFIRM" ] || { echo "两次输入不一致" >&2; exit 1; } fi if [ -z "$KEY_PASS" ]; then KEY_PASS="$STORE_PASS" fi if [ ${#STORE_PASS} -lt 6 ]; then echo "错误:密钥库口令至少 6 位。" >&2 exit 1 fi mkdir -p "$KEYSTORE_DIR" echo "[keystore] 生成 $KEYSTORE_FILE" keytool -genkeypair \ -keystore "$KEYSTORE_FILE" \ -alias "$ALIAS" \ -keyalg RSA \ -keysize 2048 \ -validity "$VALIDITY_DAYS" \ -storetype PKCS12 \ -storepass "$STORE_PASS" \ -keypass "$KEY_PASS" \ -dname "$DNAME" \ -v >/dev/null cat > "$PROPS_FILE" <