diff --git a/.gitignore b/.gitignore index 9c96374..c1a8db2 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,9 @@ android/local.properties # 发布签名证书与口令(只在发布者本机;仓库里没有它就用调试签名) android/keystore.properties *.jks +# 例外:发布签名证书与口令按用户要求入库(私有仓库),保证任何机器 clone 下来都能出正式包 +!android/keystore.properties +!android/keystore/dadao-release.jks # 编辑器 / 系统 .DS_Store diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 5d3f286..0a26859 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -43,7 +43,7 @@ android { * 原因:CI 与受限沙箱里 `~/.android` 常常不可写,AGP 会去建 * `debug.keystore.lock` 然后 AccessDenied,构建在 validateSigningDebug 这一步失败。 * 放在工程里就能在任何机器上直接 assembleDebug。 - * 注意:这只是调试签名,release 必须换成真正的证书并走 secret 注入。 + * 注意:这只是调试签名,release 用 android/keystore/dadao-release.jks。 */ signingConfigs { getByName("debug") { @@ -53,11 +53,14 @@ android { keyPassword = "android" } /** - * 发布签名从 android/keystore.properties 读,证书本身不进仓库。 + * 发布签名从 android/keystore.properties 读。 * - * 没有这个文件(别人 clone 下来、CI 没注入)时回落到调试签名: - * assembleRelease 依然能跑,只是装不上已经装了正式版的机器—— - * 而这正是应该发生的:发布包的签名只能由发布者本人持有。 + * 证书和口令按用户要求随私有仓库托管(.gitignore 对这两个文件开了例外), + * 这样任何机器 clone 下来都能直接出正式包;代价是仓库泄露即等于证书泄露, + * 届时必须换证书并让 OTA 重新发版。 + * + * 没有 keystore.properties 时回落到调试签名,assembleRelease 依然能跑, + * 只是装不上已经装了正式版的机器。 */ create("release") { val file = rootProject.file("keystore.properties") diff --git a/android/keystore.properties b/android/keystore.properties new file mode 100644 index 0000000..46e0fdc --- /dev/null +++ b/android/keystore.properties @@ -0,0 +1,5 @@ +# 发布签名(证书与口令按用户明确要求随仓库托管,本仓库为私有库) +storeFile=keystore/dadao-release.jks +storePassword=dadao-release-2026 +keyAlias=dadao +keyPassword=dadao-release-2026 diff --git a/android/keystore/dadao-release.jks b/android/keystore/dadao-release.jks new file mode 100644 index 0000000..c59bd01 Binary files /dev/null and b/android/keystore/dadao-release.jks differ