87 lines
2.7 KiB
Bash
Executable File
87 lines
2.7 KiB
Bash
Executable File
#!/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 会自动使用它们签名。"
|