feat(android): T-AND-001 工程骨架(AGP 8.7.3 + Gradle 8.9 + Compose)
This commit is contained in:
Executable
+86
@@ -0,0 +1,86 @@
|
||||
#!/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 会自动使用它们签名。"
|
||||
Reference in New Issue
Block a user