Project Overview
KamanaStore is a Flutter-based eCommerce mobile application built on top of an Active eCommerce CMS backend. The application integrates multiple third-party services including Firebase, Google Maps, PhonePe Payments, Facebook Authentication, and various Flutter plugins.
The objective was straightforward: generate a production-ready signed APK and Android App Bundle (AAB) for Play Store deployment.
However, the project could not even complete a successful release build due to a chain of Gradle, Kotlin, Java, signing, and configuration issues that surfaced one after another during the build process.
The Challenge
The application failed repeatedly during release compilation.
Instead of a single build error, the project contained multiple independent issues including:
-
JVM target mismatches between Java and Kotlin
-
Android Gradle Plugin configuration conflicts
-
Build lifecycle execution problems
-
Missing production signing configuration
-
Invalid file encoding in Dart source files
-
Flutter SDK lock and build process conflicts
Each fix exposed another underlying issue, requiring a structured debugging approach rather than isolated trial-and-error changes.
Investigation Process
The most complex issue involved JVM target compatibility.
Initially, Java and Kotlin compilation targets were configured differently, causing Android Gradle Plugin validation failures.
A root-level fix appeared reasonable at first but introduced additional Gradle lifecycle conflicts. Further attempts using deferred evaluation mechanisms also failed because project evaluation was already being forced earlier in the build process.
Rather than continuing to override Android build behavior globally, the final solution was to simplify the configuration and allow the application module to manage its own compilation settings.
Additional investigation revealed:
-
Placeholder signing credentials were still being used
-
Production keystore files were missing
-
Some Dart files contained hidden Windows BOM characters that prevented compilation on Linux environments
-
Flutter startup locks were blocking build execution
Each issue was isolated, validated, and resolved independently.
Solution Implemented
The release pipeline was stabilized through a series of targeted fixes:
Build Configuration
-
Standardized Java and Kotlin compilation targets
-
Removed conflicting root-level Gradle overrides
-
Simplified Android build configuration ownership
-
Added compatibility handling for third-party plugin validation
Android Signing
-
Generated a production keystore
-
Configured secure signing credentials
-
Updated Android release signing configuration
-
Verified release artifact integrity
Source Code Cleanup
-
Removed invalid BOM characters from Dart source files
-
Standardized source file encoding
-
Eliminated platform-specific compilation inconsistencies
Build Environment Stabilization
-
Cleared Flutter SDK lock conflicts
-
Removed blocked build processes
-
Re-established a clean release build workflow
Outcome
The application was successfully prepared for Android distribution.
Final Deliverables
-
Signed Release APK
-
Android App Bundle (AAB)
-
Production Keystore Configuration
-
Play Store Ready Build Pipeline
Results
-
APK generated successfully
-
AAB generated successfully
-
Production signing verified
-
Release workflow stabilized
-
Play Store submission readiness achieved
Technical Lessons
This project highlighted several important Android and Flutter build system principles:
-
Android Gradle Plugin lifecycle behavior matters more than most developers expect
-
Root-level build overrides can introduce unexpected side effects
-
Hidden file encoding issues can completely block compilation
-
Signing configuration should be established early in the release process
-
Build system debugging often requires understanding toolchain interactions rather than focusing on individual errors
Technologies Used
-
Flutter
-
Dart
-
Android Gradle Plugin
-
Gradle
-
Kotlin
-
Java 17
-
Firebase
-
Google Maps
-
PhonePe Payment Gateway
-
Ubuntu Linux
Conclusion
This project was less about writing application features and more about solving a complex release engineering challenge.
By systematically debugging the Flutter and Android build pipeline, the application was successfully transformed from a non-buildable state into a fully signed, Play Store-ready release package.
The result was a stable deployment workflow that can now be reused for future application releases with significantly reduced risk and maintenance overhead.