Build Errors
Hot Reload Compilation Errors
"kotlinc not found"
JetStart cannot find the Kotlin compiler to run the hot reload pipeline.
Fix:
# Set KOTLIN_HOME
export KOTLIN_HOME=/usr/local/kotlinc # macOS/Linux
set KOTLIN_HOME=C:\kotlinc # Windows
# Or install Kotlin system-wide
brew install kotlin # macOS
sdk install kotlin # sdkman
If you are using Android Studio, the bundled Kotlin is at:
<Android Studio>/plugins/Kotlin/kotlinc
Set KOTLIN_HOME to that path and restart your terminal.
"d8 not found" / DEX generation failed
d8 lives inside Android build-tools. JetStart searches $ANDROID_HOME/build-tools/<latest>.
Fix:
# Install build-tools via sdkmanager
sdkmanager "build-tools;34.0.0"
# Verify ANDROID_HOME is set
echo $ANDROID_HOME # macOS/Linux
echo %ANDROID_HOME% # Windows
"Cannot build classpath" / Unresolved reference during hot reload
The Compose and AndroidX JARs that kotlinc needs are not in the Gradle module cache yet.
Fix: Run a full Gradle build at least once to populate ~/.gradle/caches:
./gradlew assembleDebug
After that, jetstart dev will find all JARs automatically.
Hot reload compiles but classes don't update on device
Possible causes:
- WebSocket disconnected ΓÇö check the
jetstart devconsole for disconnect messages. Rescan the QR code and reconnect. - Wrong
ANDROID_HOMEΓÇö thed8used to generate the DEX is incompatible with the device's Android version. Ensurebuild-tools;34.0.0is installed. - Custom ClassLoader conflict ΓÇö if the app has its own ClassLoader setup it may interfere. Check the app logs with
jetstart logs --source client.
Full Gradle Build Errors
"Gradle not found"
Error: Gradle wrapper not found
Fix: Run from the project root directory (where settings.gradle lives). If the wrapper is missing:
gradle wrapper --gradle-version 8.5
chmod +x gradlew # macOS/Linux
Java version mismatch
error: source release 17 requires target release 17
or
Unsupported class file major version 61
Fix: Ensure JDK 17 is installed and JAVA_HOME points to it:
java -version # Should show 17.x
echo $JAVA_HOME # Should be the JDK 17 path
Install JDK 17 if needed:
# macOS
brew install --cask temurin@17
# Linux (Debian/Ubuntu)
sudo apt install openjdk-17-jdk
# Windows ΓÇö download Eclipse Temurin 17 from https://adoptium.net/
"SDK location not found"
SDK location not found. Define a valid SDK location with an ANDROID_HOME environment variable or by setting the sdk.dir path in your project's local properties file.
Fix: Either set ANDROID_HOME or create local.properties in the project root:
sdk.dir=C\:\\Android
JetStart creates local.properties automatically if it detects the SDK but the file is missing. Run jetstart install-audit to confirm SDK detection.
"Failed to install the following Android SDK packages"
Gradle needs SDK components that are not installed.
Fix: Accept licenses and install the missing components:
sdkmanager --licenses
sdkmanager "platforms;android-34" "build-tools;34.0.0"
Out of memory during build
java.lang.OutOfMemoryError: Java heap space
Fix: Increase Gradle JVM heap in gradle.properties:
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m
Kotlin compilation error in source code
e: MainActivity.kt: (42, 5): Unresolved reference: SomeClass
This is a code error in your Kotlin source. Fix the Kotlin error and save again. JetStart will automatically retry the hot reload or Gradle build.
Duplicate class error
Duplicate class kotlin.collections.jdk8... found in modules kotlin-stdlib and kotlin-stdlib-jdk8
Fix: Force Kotlin stdlib version in build.gradle:
configurations.all {
resolutionStrategy {
force "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
}
R8/ProGuard crash (release build works, app crashes)
Debug APK works but release APK crashes at runtime.
Fix: Add ProGuard keep rules for the crashing class:
-keep class com.example.app.CrashingClass { *; }
-keepclassmembers class com.example.app.** { *; }
Check the R8 mapping file for class name changes:
app/build/outputs/mapping/release/mapping.txt
APK Signing Errors
"keystore.properties missing or incomplete"
Error: keystore.properties missing or incomplete
Fix: Create keystore.properties in the project root:
storeFile=path/to/release.jks
storePassword=your-store-password
keyAlias=your-key-alias
keyPassword=your-key-password
Generate a keystore if you don't have one:
keytool -genkey -v -keystore release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
Alternatively, use --self-sign for testing (not for Play Store):
jetstart build --release --self-sign
"App not installed" after installing release APK
The APK is unsigned or self-signed and Android is blocking installation.
Fix: For Play Store distribution use a proper keystore with --sign. For device testing use --self-sign which auto-generates a valid test certificate.
Diagnosing Build Issues
Stream build logs in real time
# In a second terminal while jetstart dev is running
jetstart logs --source build --level debug --follow
Run Gradle directly for verbose output
./gradlew assembleDebug --info
./gradlew assembleDebug --stacktrace # Full stack trace on error
Clean and rebuild
jetstart clean
./gradlew clean
jetstart build
Check environment
jetstart install-audit
This checks Node.js, npm, Java, Gradle, Android SDK, and environment variables in one command.