diff --git a/packages/flutter_tools/lib/src/android/java.dart b/packages/flutter_tools/lib/src/android/java.dart index 0713bb6e6c4..8830ef69dda 100644 --- a/packages/flutter_tools/lib/src/android/java.dart +++ b/packages/flutter_tools/lib/src/android/java.dart @@ -135,6 +135,10 @@ class Java { /// Returns the version of java in the format \d(.\d)+(.\d)+ /// Returns null if version could not be determined. late final Version? version = (() { + if (!canRun()) { + return null; + } + final RunResult result = _processUtils.runSync( [binaryPath, '--version'], environment: environment, @@ -142,6 +146,7 @@ class Java { if (result.exitCode != 0) { _logger.printTrace('java --version failed: exitCode: ${result.exitCode}' ' stdout: ${result.stdout} stderr: ${result.stderr}'); + return null; } final String rawVersionOutput = result.stdout; final List versionLines = rawVersionOutput.split('\n'); diff --git a/packages/flutter_tools/test/general.shard/android/java_test.dart b/packages/flutter_tools/test/general.shard/android/java_test.dart index ca0804aed61..66d8dd9fc10 100644 --- a/packages/flutter_tools/test/general.shard/android/java_test.dart +++ b/packages/flutter_tools/test/general.shard/android/java_test.dart @@ -183,7 +183,7 @@ OpenJDK 64-Bit Server VM Zulu19.32+15-CA (build 19.0.2+7, mixed mode, sharing) }); }); - group('getVersionString', () { + group('version', () { late Java java; setUp(() { @@ -208,6 +208,23 @@ OpenJDK 64-Bit Server VM Zulu19.32+15-CA (build 19.0.2+7, mixed mode, sharing) ); } + testWithoutContext('is null when java binary cannot be run', () async { + addJavaVersionCommand(''); + processManager.excludedExecutables.add('java'); + + expect(java.version, null); + }); + + testWithoutContext('is null when java --version returns a non-zero exit code', () async { + processManager.addCommand( + FakeCommand( + command: [java.binaryPath, '--version'], + exitCode: 1, + ), + ); + expect(java.version, null); + }); + testWithoutContext('parses jdk 8', () { addJavaVersionCommand(''' java version "1.8.0_202"