From d5a31e5366a73c452d727714adb6741e8ebbceb7 Mon Sep 17 00:00:00 2001 From: cheney Date: Sat, 8 Aug 2026 08:28:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AD=BE=E5=90=8D=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/ci/android-signing.sh | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/scripts/ci/android-signing.sh b/scripts/ci/android-signing.sh index 0313ffb..dd31437 100644 --- a/scripts/ci/android-signing.sh +++ b/scripts/ci/android-signing.sh @@ -56,8 +56,18 @@ import sys, re path = sys.argv[1] src = open(path, encoding='utf-8').read() +# Gradle Kotlin DSL 默认 import java.util.* (Properties 短名可用), 但没有 java.io.* +# 因此顶部需补 import java.io.FileInputStream, 注入块内全部用短名 +if 'import java.io.FileInputStream' not in src: + # 在第一个 import 之后插入; 若无 import 则插到文件顶部 + imp = re.search(r'^import .*$', src, flags=re.M) + new_import = 'import java.io.FileInputStream\n' + if imp: + src = src[:imp.end()] + '\n' + new_import + src[imp.end():] + else: + src = new_import + src + # 定位 android { 块内的 buildTypes { (注意 Kotlin 嵌套花括号) -# 简化: 找 "android {" 之后的第一个 "buildTypes {" 缩进位置 m = re.search(r'(\n[ \t]*)(buildTypes\s*\{)', src) if not m: print('[signing] 未找到 buildTypes 块, 中止', file=sys.stderr) @@ -70,14 +80,14 @@ signing_block = ( f'{inner_indent}signingConfigs {{\n' f'{inner_indent} create("release") {{\n' f'{inner_indent} val keystorePropertiesFile = rootProject.file("keystore.properties")\n' - f'{inner_indent} val keystoreProperties = java.util.Properties()\n' + f'{inner_indent} val keystoreProperties = Properties()\n' f'{inner_indent} if (keystorePropertiesFile.exists()) {{\n' - f'{inner_indent} keystoreProperties.load(java.io.FileInputStream(keystorePropertiesFile))\n' + f'{inner_indent} keystoreProperties.load(FileInputStream(keystorePropertiesFile))\n' f'{inner_indent} }}\n' - f'{inner_indent} keyAlias = keystoreProperties["keyAlias"] as String\n' - f'{inner_indent} keyPassword = keystoreProperties["password"] as String\n' - f'{inner_indent} storeFile = file(keystoreProperties["storeFile"] as String)\n' - f'{inner_indent} storePassword = keystoreProperties["password"] as String\n' + f'{inner_indent} keyAlias = keystoreProperties["keyAlias"] as? String ?: ""\n' + f'{inner_indent} keyPassword = keystoreProperties["password"] as? String ?: ""\n' + f'{inner_indent} storeFile = file(keystoreProperties["storeFile"] as? String ?: "")\n' + f'{inner_indent} storePassword = keystoreProperties["password"] as? String ?: ""\n' f'{inner_indent} }}\n' f'{inner_indent}}}\n' ) @@ -86,7 +96,6 @@ signing_block = ( src = src.replace(m.group(0), signing_block + m.group(0), 1) # 让 buildTypes 里的 release 使用该 signingConfig -# 找到 "getByName(\"release\") {" 或 "release {" 并注入 signingConfig rel = re.search(r'(\n[ \t]*)(getByName\("release"\)\s*\{)', src) if not rel: rel = re.search(r'(\n[ \t]*)(release\s*\{)', src) @@ -96,7 +105,7 @@ if rel: src = src.replace(rel.group(0), rel.group(0) + inject, 1) open(path, 'w', encoding='utf-8').write(src) -print('[signing] build.gradle.kts 已注入 signingConfigs + release signingConfig') +print('[signing] build.gradle.kts 已注入 import + signingConfigs + release signingConfig') PYEOF fi