Have android validator suggest ANDROID_SDK_ROOT instead of deprecated ANDROID_HOME (#49846)
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index a23fc9a..bb4a429 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -3,15 +3,17 @@
// found in the LICENSE file.
import 'package:meta/meta.dart';
+import 'package:platform/platform.dart';
import '../base/common.dart';
import '../base/context.dart';
import '../base/file_system.dart';
+import '../base/os.dart';
import '../base/process.dart';
import '../base/version.dart';
import '../convert.dart';
import '../globals.dart' as globals;
-import 'android_studio.dart' as android_studio;
+import 'android_studio.dart';
AndroidSdk get androidSdk => context.get<AndroidSdk>();
@@ -549,20 +551,25 @@
}
/// First try Java bundled with Android Studio, then sniff JAVA_HOME, then fallback to PATH.
- static String findJavaBinary() {
- if (android_studio.javaPath != null) {
- return globals.fs.path.join(android_studio.javaPath, 'bin', 'java');
+ static String findJavaBinary({
+ @required AndroidStudio androidStudio,
+ @required FileSystem fileSystem,
+ @required OperatingSystemUtils operatingSystemUtils,
+ @required Platform platform,
+ }) {
+ if (androidStudio?.javaPath != null) {
+ return fileSystem.path.join(androidStudio.javaPath, 'bin', 'java');
}
- final String javaHomeEnv = globals.platform.environment[_javaHomeEnvironmentVariable];
+ final String javaHomeEnv = platform.environment[_javaHomeEnvironmentVariable];
if (javaHomeEnv != null) {
// Trust JAVA_HOME.
- return globals.fs.path.join(javaHomeEnv, 'bin', 'java');
+ return fileSystem.path.join(javaHomeEnv, 'bin', 'java');
}
// MacOS specific logic to avoid popping up a dialog window.
// See: http://stackoverflow.com/questions/14292698/how-do-i-check-if-the-java-jdk-is-installed-on-mac.
- if (globals.platform.isMacOS) {
+ if (platform.isMacOS) {
try {
final String javaHomeOutput = processUtils.runSync(
<String>['/usr/libexec/java_home'],
@@ -573,14 +580,14 @@
final List<String> javaHomeOutputSplit = javaHomeOutput.split('\n');
if ((javaHomeOutputSplit != null) && (javaHomeOutputSplit.isNotEmpty)) {
final String javaHome = javaHomeOutputSplit[0].trim();
- return globals.fs.path.join(javaHome, 'bin', 'java');
+ return fileSystem.path.join(javaHome, 'bin', 'java');
}
}
} catch (_) { /* ignore */ }
}
// Fallback to PATH based lookup.
- return globals.os.which(_javaExecutable)?.path;
+ return operatingSystemUtils.which(_javaExecutable)?.path;
}
Map<String, String> _sdkManagerEnv;
@@ -590,7 +597,12 @@
if (_sdkManagerEnv == null) {
// If we can locate Java, then add it to the path used to run the Android SDK manager.
_sdkManagerEnv = <String, String>{};
- final String javaBinary = findJavaBinary();
+ final String javaBinary = findJavaBinary(
+ androidStudio: globals.androidStudio,
+ fileSystem: globals.fs,
+ operatingSystemUtils: globals.os,
+ platform: globals.platform,
+ );
if (javaBinary != null) {
_sdkManagerEnv['PATH'] = globals.fs.path.dirname(javaBinary) +
globals.os.pathVarSeparator +