feat(android): T-AND-001 工程骨架(AGP 8.7.3 + Gradle 8.9 + Compose)

This commit is contained in:
2026-09-14 20:40:16 +08:00
parent 568664a9aa
commit 2f6212d5bf
21 changed files with 1091 additions and 0 deletions
+86
View File
@@ -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 会自动使用它们签名。"