Просмотр исходного кода

release 构建改用发布密钥签名

原来 release 走的是模板默认的调试签名(CN=Android Debug)。现在读
android/key.properties 建一个 release signingConfig,签名者是
CN=nonvioce(和 mathtool2 同一把密钥,有效期到 2053)。

key.properties 与 android/app/key.jks 都已被 android/.gitignore 忽略,
不进仓库。没有 key.properties 的机器上会自动退回调试签名,保证仍能构建。

Co-Authored-By: Claude Code <noreply@anthropic.com>
nonvioce 4 недель назад
Родитель
Сommit
18023ba737
1 измененных файлов с 29 добавлено и 2 удалено
  1. 29 2
      android/app/build.gradle.kts

+ 29 - 2
android/app/build.gradle.kts

@@ -1,9 +1,20 @@
+import java.io.FileInputStream
+import java.util.Properties
+
 plugins {
     id("com.android.application")
     // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
     id("dev.flutter.flutter-gradle-plugin")
 }
 
+// 发布签名凭据放在 android/key.properties(和 mathtool2 同一套)。
+// 该文件和 key.jks 都已被 android/.gitignore 忽略,不会进仓库。
+val keystorePropertiesFile = rootProject.file("key.properties")
+val keystoreProperties = Properties()
+if (keystorePropertiesFile.exists()) {
+    keystoreProperties.load(FileInputStream(keystorePropertiesFile))
+}
+
 android {
     namespace = "com.nonvioce.cal"
     compileSdk = flutter.compileSdkVersion
@@ -26,10 +37,26 @@ android {
         multiDexEnabled = true
     }
 
+    signingConfigs {
+        // 只有拿到凭据才建这个配置;否则下面的 release 退回调试签名,
+        // 保证"没带 key.properties 的机器"上依然能构建。
+        if (keystorePropertiesFile.exists()) {
+            create("release") {
+                keyAlias = keystoreProperties.getProperty("keyAlias")
+                keyPassword = keystoreProperties.getProperty("keyPassword")
+                storeFile = file(keystoreProperties.getProperty("storeFile"))
+                storePassword = keystoreProperties.getProperty("storePassword")
+            }
+        }
+    }
+
     buildTypes {
         release {
-            // TODO: Add your own signing config for the release build.
-            signingConfig = signingConfigs.getByName("debug")
+            signingConfig = if (keystorePropertiesFile.exists()) {
+                signingConfigs.getByName("release")
+            } else {
+                signingConfigs.getByName("debug")
+            }
 
             // 【真机实测的结论】不要对 Symja 开 R8 混淆。
             // Symja 及其依赖大量用「类名字符串」做反射创建,R8 看不到引用关系就会改名,