{"record":{"id":"d24efe169e6a1ae3","repo":"quasarframework/quasar","slug":"gradle-build-failed","errorCode":null,"errorMessage":"Gradle build failed!","messagePattern":"Gradle build failed!","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app-vite/lib/modes/capacitor/capacitor-builder.js","lineNumber":141,"sourceCode":"    const buildPath = this.ctx.appPaths.resolve.capacitor(\n      'android/app/build/outputs'\n    )\n\n    // Remove old build output\n    fse.removeSync(buildPath)\n\n    log('Building Android app...')\n\n    await spawnSync(\n      `./gradlew${process.platform === 'win32' ? '.bat' : ''}`,\n      [\n        `assemble${this.quasarConf.metaConf.debugging ? 'Debug' : 'Release'}`,\n        ...this.argv._\n      ],\n      { cwd: this.ctx.appPaths.resolve.capacitor('android') },\n      () => {\n        warn()\n        warn('Gradle build failed!')\n        warn(\n          'As an alternative, you can use the \"--ide\" param and build from the IDE.'\n        )\n        warn()\n      }\n    )\n\n    fse.copySync(buildPath, this.#packagedDir)\n  }\n}\n","sourceCodeStart":123,"sourceCodeEnd":152,"githubUrl":"https://github.com/quasarframework/quasar/blob/4841521b5f635a971eb9e2710e5542efd194691b/app-vite/lib/modes/capacitor/capacitor-builder.js#L123-L152","documentation":"During a Capacitor Android build, #buildAndroid shells out to the Gradle wrapper (gradlew assembleDebug/assembleRelease, plus any extra argv) inside <app>/android. The callback fires when Gradle exits non-zero; Quasar warns 'Gradle build failed!' and suggests building from the IDE with --ide.","triggerScenarios":"Running `quasar build -m capacitor -T android` (or dev) and the spawned `./gradlew assembleDebug|Release` process returns an error exit code; the warning callback of runGradle is invoked.","commonSituations":"Missing/incorrect ANDROID SDK or JAVA_HOME (JDK 17 required for recent AGP); compile errors in custom Java/Kotlin plugin code; corrupted Gradle cache or lock files; insufficient memory; mismatched AGP/Gradle versions after upgrading Capacitor; signing config errors in release builds.","solutions":["Re-run with the full Gradle output visible (or run `./gradlew assembleDebug` in <app>/android directly) to see the real root-cause error above the warning.","Verify JAVA_HOME points to a compatible JDK (17 for recent Android Gradle Plugin) and Android SDK platforms/build-tools are installed.","Clean Gradle state: `cd src-capacitor/android && ./gradlew clean` and delete build/.gradle caches if corrupted.","If you only need to open/edit natively, use `quasar dev -m capacitor -T android --ide` or build from Android Studio as the warning suggests.","Ensure Capacitor android platform is synced (`npx cap sync android`) and AGP/Gradle versions match the installed Capacitor version."],"exampleFix":"// before (shell)\nexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk\nquasar build -m capacitor -T android\n// after\nexport JAVA_HOME=/usr/lib/jvm/java-17-openjdk\ncd src-capacitor/android && ./gradlew clean\nquasar build -m capacitor -T android","handlingStrategy":"try-catch","validationCode":"// pre-flight checks before `quasar build -m capacitor -T android`\nconst { execSync } = require('child_process')\nconsole.log('JAVA_HOME =', process.env.JAVA_HOME || '(unset)')\nexecSync('java -version', { stdio: 'inherit' })            // must be JDK 17+ for recent AGP\nexecSync('sdkmanager --list | head', { stdio: 'inherit' }) // Android SDK reachable\nexecSync('cd src-capacitor/android && ./gradlew --version', { stdio: 'inherit' })","typeGuard":null,"tryCatchPattern":"// wrap the CLI invocation\ntry {\n  execSync('npx quasar build -m capacitor -T android', { stdio: 'inherit' })\n} catch (err) {\n  console.error('Gradle build failed; inspect the gradlew output above, then retry with:\\n  cd src-capacitor/android && ./gradlew clean\\n  cd ../.. && quasar build -m capacitor -T android --ide')\n  process.exit(err.status || 1)\n}","preventionTips":["Pin JAVA_HOME to JDK 17 for current Android Gradle Plugin versions.","Run `npx cap sync android` after capacitor config or plugin changes.","Keep AGP/Gradle wrapper versions aligned with the Capacitor version in use.","Run `./gradlew clean` when builds fail after partial/interrupted runs.","Read the gradlew stderr above the warning — Quasar only reports the failure, not the cause."],"tags":["capacitor","android","gradle","build"],"backgroundTag":"gradle-build-failed","analyzedSha":"4841521b5f635a971eb9e2710e5542efd194691b","analyzedAt":"2026-08-30T01:13:14.944Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}