Ensure we have the Java binary on PATH when invoking avdmanager (#18908)
See https://github.com/flutter/flutter/issues/13379#issuecomment-400984667.
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 2dcc5bf..d547cef 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -466,6 +466,8 @@
}
Map<String, String> _sdkManagerEnv;
+ /// Returns an environment with the Java folder added to PATH for use in calling
+ /// Java-based Android SDK commands such as sdkmanager and avdmanager.
Map<String, String> get sdkManagerEnv {
if (_sdkManagerEnv == null) {
// If we can locate Java, then add it to the path used to run the Android SDK manager.
diff --git a/packages/flutter_tools/lib/src/emulator.dart b/packages/flutter_tools/lib/src/emulator.dart
index 5fa6b2a..472572c3 100644
--- a/packages/flutter_tools/lib/src/emulator.dart
+++ b/packages/flutter_tools/lib/src/emulator.dart
@@ -114,7 +114,8 @@
'-k', sdkId,
'-d', device
];
- final ProcessResult runResult = processManager.runSync(args);
+ final ProcessResult runResult = processManager.runSync(args,
+ environment: androidSdk?.sdkManagerEnv);
return new CreateEmulatorResult(
name,
success: runResult.exitCode == 0,
@@ -134,7 +135,8 @@
'device',
'-c'
];
- final ProcessResult runResult = processManager.runSync(args);
+ final ProcessResult runResult = processManager.runSync(args,
+ environment: androidSdk?.sdkManagerEnv);
if (runResult.exitCode != 0)
return null;
@@ -159,7 +161,8 @@
'avd',
'-n', 'temp',
];
- final ProcessResult runResult = processManager.runSync(args);
+ final ProcessResult runResult = processManager.runSync(args,
+ environment: androidSdk?.sdkManagerEnv);
// Get the list of IDs that match our criteria
final List<String> availableIDs = runResult.stderr