From 4a99cd94a72b392a259c4e7e5171a4d0e4b150c2 Mon Sep 17 00:00:00 2001 From: wuyang <5700876+banisherwy@user.noreply.gitee.com> Date: Tue, 3 Nov 2026 16:45:50 +0800 Subject: [PATCH] Require original signing material for release builds --- README.md | 8 ++++++++ app/build.sh | 10 ++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 53db2fe..551dd66 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,14 @@ $HOME/android-toolchain/ 输出:`app/猫爪游乐场.apk`。 +发布更新时,设置 `RELEASE_BUILD=1`,并通过 `KEYSTORE` 指向原签名密钥。此模式下密钥缺失会立即报错,不会生成新密钥。密钥不提交 Git,签名密码可通过 `STOREPASS` 和 `KEYPASS` 环境变量提供。 + +构建后用 `apksigner verify --print-certs` 比对已发布 APK 与新 APK 的签名证书,证书一致后再发布。当前 v1.0.1 的签名证书 SHA-256: + +```text +40613d8504936be2db15f0d1094f3bf9f693950c726e357b7f3af04f17d53cfb +``` + 重新生成音效: ```bash diff --git a/app/build.sh b/app/build.sh index aaa4528..9d8b686 100755 --- a/app/build.sh +++ b/app/build.sh @@ -11,10 +11,16 @@ AAPT2=${AAPT2:-aapt2} KEYSTORE=${KEYSTORE:-$ROOT/keystore/catplay.jks} STOREPASS=${STOREPASS:-catplay-local} KEYPASS=${KEYPASS:-catplay-local} +export STOREPASS KEYPASS ALIAS=${ALIAS:-catplay} BUILD_DIR=${BUILD_DIR:-$ROOT/build} APK_OUT=${APK_OUT:-$ROOT/猫爪游乐场.apk} +if [[ ${RELEASE_BUILD:-0} == 1 && ! -f "$KEYSTORE" ]]; then + echo "release build requires the existing signing keystore: $KEYSTORE" >&2 + exit 1 +fi + for f in "$ANDROID_JAR" "$RESOURCE_JAR" "$D8_JAR"; do [[ -f "$f" ]] || { echo "missing toolchain file: $f" >&2; exit 1; } done @@ -24,7 +30,7 @@ if [[ ! -f "$KEYSTORE" ]]; then keytool -genkeypair -v \ -keystore "$KEYSTORE" -storetype PKCS12 \ -alias "$ALIAS" -keyalg RSA -keysize 2048 -validity 10000 \ - -storepass "$STOREPASS" -keypass "$KEYPASS" \ + -storepass:env STOREPASS -keypass:env KEYPASS \ -dname "CN=PawPlay, OU=Local, O=PawPlay, L=Local, ST=Local, C=CN" >/dev/null fi @@ -58,7 +64,7 @@ PY rm -f "$APK_OUT" apksigner sign \ --ks "$KEYSTORE" --ks-key-alias "$ALIAS" \ - --ks-pass "pass:$STOREPASS" --key-pass "pass:$KEYPASS" \ + --ks-pass env:STOREPASS --key-pass env:KEYPASS \ --out "$APK_OUT" "$BUILD_DIR/unsigned.apk" apksigner verify --verbose "$APK_OUT" | sed -n '1,12p' echo "Built: $APK_OUT"