Files

87 lines
2.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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" <<EOF
# 由 build/gen-keystore.sh 生成;**禁止提交到仓库**(已在 .gitignore 中)
storeFile=$KEYSTORE_FILE
storePassword=$STORE_PASS
keyAlias=$ALIAS
keyPassword=$KEY_PASS
EOF
chmod 600 "$PROPS_FILE" "$KEYSTORE_FILE"
echo ""
echo "[keystore] 完成:"
echo " 密钥库:$KEYSTORE_FILE"
echo " 配置: $PROPS_FILE"
echo " 别名: $ALIAS"
echo " 有效期:$VALIDITY_DAYS 天"
echo ""
echo "请备份这两个文件。之后 ./gradlew assembleRelease 会自动使用它们签名。"