From 39431353970b50f4334c3335c46c9a3b59a717d1 Mon Sep 17 00:00:00 2001 From: Sanders Date: Wed, 12 Aug 2026 00:24:04 +0300 Subject: [PATCH] Fix Gradle config crash when key.properties is absent signingConfigs.release was configured unconditionally, so even assembleDebug failed at configuration time with 'getProperty(...) must not be null' on CI (build-apk.yml restores the keystore only after the debug build). Guard the release signing config on key.properties existence: debug builds proceed unsigned, release builds still sign when the keystore is present. --- android/app/build.gradle.kts | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index f801af6..90d3e9f 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -9,9 +9,10 @@ plugins { // Release signing: android/key.properties (gitignored) points to a permanent // keystore outside the repo, so every release build has the same signature and // installs update in place without wiping app data. -val keystoreProperties = Properties().apply { - val file = rootProject.file("key.properties") - if (file.exists()) file.inputStream().use { load(it) } +val keystorePropertiesFile = rootProject.file("key.properties") +val keystoreProperties = Properties() +if (keystorePropertiesFile.exists()) { + keystorePropertiesFile.inputStream().use { keystoreProperties.load(it) } } android { @@ -36,17 +37,24 @@ android { } signingConfigs { - create("release") { - storeFile = file(keystoreProperties.getProperty("storeFile")) - storePassword = keystoreProperties.getProperty("storePassword") - keyAlias = keystoreProperties.getProperty("keyAlias") - keyPassword = keystoreProperties.getProperty("keyPassword") + if (keystorePropertiesFile.exists()) { + create("release") { + storeFile = file(keystoreProperties.getProperty("storeFile")) + storePassword = keystoreProperties.getProperty("storePassword") + keyAlias = keystoreProperties.getProperty("keyAlias") + keyPassword = keystoreProperties.getProperty("keyPassword") + } } } buildTypes { release { - signingConfig = signingConfigs.getByName("release") + // No signing config when key.properties is absent (CI debug builds, + // local dev) — APK is simply unsigned. With key.properties present, + // releases are signed with the permanent keystore. + if (keystorePropertiesFile.exists()) { + signingConfig = signingConfigs.getByName("release") + } } debug { // Install debug builds under a separate applicationId so they don't