From a86131471c41d1ecb09ec14023eb930e1ab356c2 Mon Sep 17 00:00:00 2001 From: hailin Date: Tue, 9 Dec 2025 00:59:20 -0800 Subject: [PATCH] feat(mobile-app): auto-increment version code on each build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add version.properties file to track build number locally - Auto-increment versionCode on every debug/release build - Version name format: major.minor.patch.buildNumber (e.g., 1.0.0.123) - Add version.properties to .gitignore (each developer has own build number) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- frontend/mobile-app/.gitignore | 3 ++ .../mobile-app/android/app/build.gradle.kts | 33 +++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/frontend/mobile-app/.gitignore b/frontend/mobile-app/.gitignore index d825190d..ad562a7c 100644 --- a/frontend/mobile-app/.gitignore +++ b/frontend/mobile-app/.gitignore @@ -44,6 +44,9 @@ app.*.map.json /android/app/profile /android/app/release +# Auto-generated version file (each developer has their own build number) +/android/app/version.properties + # Release signing keys (IMPORTANT: never commit these!) /publish/ *.keystore diff --git a/frontend/mobile-app/android/app/build.gradle.kts b/frontend/mobile-app/android/app/build.gradle.kts index 46b7436c..751e7239 100644 --- a/frontend/mobile-app/android/app/build.gradle.kts +++ b/frontend/mobile-app/android/app/build.gradle.kts @@ -1,5 +1,6 @@ import java.util.Properties import java.io.FileInputStream +import java.io.FileOutputStream plugins { id("com.android.application") @@ -15,6 +16,33 @@ if (keyPropertiesFile.exists()) { keyProperties.load(FileInputStream(keyPropertiesFile)) } +// ============================================ +// Auto-increment version code on each build +// ============================================ +val versionPropertiesFile = rootProject.file("app/version.properties") +val versionProperties = Properties() + +fun getAutoVersionCode(): Int { + if (versionPropertiesFile.exists()) { + versionProperties.load(FileInputStream(versionPropertiesFile)) + } + val currentCode = versionProperties.getProperty("VERSION_CODE", "0").toInt() + val newCode = currentCode + 1 + versionProperties.setProperty("VERSION_CODE", newCode.toString()) + versionProperties.store(FileOutputStream(versionPropertiesFile), "Auto-generated version code - DO NOT EDIT MANUALLY") + return newCode +} + +// Get auto-incremented version code +val autoVersionCode = getAutoVersionCode() + +// Version name format: major.minor.patch (from pubspec.yaml) + build number +// Example: 1.0.0.123 +fun getAutoVersionName(): String { + val flutterVersionName = flutter.versionName ?: "1.0.0" + return "$flutterVersionName.$autoVersionCode" +} + android { namespace = "com.rwadurian.rwa_android_app" compileSdk = flutter.compileSdkVersion @@ -36,8 +64,9 @@ android { // For more information, see: https://flutter.dev/to/review-gradle-config. minSdk = flutter.minSdkVersion targetSdk = flutter.targetSdkVersion - versionCode = flutter.versionCode - versionName = flutter.versionName + // Auto-incremented version code and name + versionCode = autoVersionCode + versionName = getAutoVersionName() } signingConfigs {