I am having issues in my Flutter project, and any help would be appreciated.
I have been building this app for some time, and during the ending stages, I am seeing this error in android/build.gradle.kts file:
The supplied phased action failed with an exception.
Could not create task ':vibration:compileDebugJavaWithJavac'.
Failed to calculate the value of task ':vibration:compileDebugJavaWithJavac' property 'javaCompiler'.
Toolchain installation '/usr/lib/jvm/java-21-openjdk-amd64' does not provide the required capabilities: [JAVA_COMPILER]
First of all, I don't know what this error means. I just know that Gradle needs javaCompiler
from JDK 17, which is apparently not available in JDK 21.
Now the main issue is that Gradle is not picking JDK 17, which I have installed on my system. Just to make sure, I have these outputs in the terminal to check the current JDK version:
$ echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk-amd64
$ java -version
openjdk version "17.0.15" 2025-04-15
OpenJDK Runtime Environment (build 17.0.15+6-Ubuntu-0ubuntu124.04)
OpenJDK 64-Bit Server VM (build 17.0.15+6-Ubuntu-0ubuntu124.04, mixed mode, sharing)
I previously had JDK 21 installed but shifted to JDK 17 without deleting JDK 21.
The app builds perfectly fine, and runs smoothly. But according to ChatGPT, I have to resolve this issue before releasing to Google Play Store as it might cause build issue for future releases.
This is my android/build.gradle,kts
file:
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.google.gms:google-services:4.4.2") // or latest stable
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get()
rootProject.layout.buildDirectory.value(newBuildDir)
subprojects {
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
project.layout.buildDirectory.value(newSubprojectBuildDir)
}
subprojects {
project.evaluationDependsOn(":app")
}
tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
And my android/app/build.gradle.kts
looks like this:
import java.util.Properties
plugins {
id("com.android.application")
id("com.google.gms.google-services")
id("kotlin-android")
id("dev.flutter.flutter-gradle-plugin")
}
val keystoreProperties = Properties().apply {
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystorePropertiesFile.inputStream().use { load(it) }
} else {
throw GradleException("Missing key.properties file in android/ directory")
}
}
android {
namespace = "com.example.progresspal"
compileSdk = flutter.compileSdkVersion
ndkVersion = "27.0.12077973"
signingConfigs {
create("release") {
storeFile = file(keystoreProperties["storeFile"] as String)
storePassword = keystoreProperties["storePassword"] as String
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
}
}
defaultConfig {
applicationId = "com.example.progresspal"
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
buildTypes {
getByName("release") {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
}
flutter {
source = "../.."
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
}import java.util.Properties
plugins {
id("com.android.application")
id("com.google.gms.google-services")
id("kotlin-android")
id("dev.flutter.flutter-gradle-plugin")
}
val keystoreProperties = Properties().apply {
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystorePropertiesFile.inputStream().use { load(it) }
} else {
throw GradleException("Missing key.properties file in android/ directory")
}
}
android {
namespace = "com.example.progresspal"
compileSdk = flutter.compileSdkVersion
ndkVersion = "27.0.12077973"
signingConfigs {
create("release") {
storeFile = file(keystoreProperties["storeFile"] as String)
storePassword = keystoreProperties["storePassword"] as String
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
}
}
defaultConfig {
applicationId = "com.example.progresspal"
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
buildTypes {
getByName("release") {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
}
flutter {
source = "../.."
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
}
I tried asking ChatGPT for a solution, changed a bunch of stuff, installed JDK 17 and set it as default. But Gradle is not picking up JDK 17 due to some reason.
Please verify your Flutter configuration by running flutter config --list
in the terminal. This will display the current settings and SDK configuration.
Additionally, run flutter doctor -v
to check which SDK is currently being used. I encountered the same issue, and this step helped me identify the problem.