From 98e43bc6aea71151a5904648cfaf59c750f0410f Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Mon, 6 Apr 2020 13:41:14 -0700 Subject: [PATCH] [flutter_tools] ensure the tool can find SDK manager on windows (#54133) --- .../lib/src/android/android_sdk.dart | 6 +++++- .../android/android_sdk_test.dart | 21 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart index ab35712dca5..e749763a93e 100644 --- a/packages/flutter_tools/lib/src/android/android_sdk.dart +++ b/packages/flutter_tools/lib/src/android/android_sdk.dart @@ -380,7 +380,11 @@ class AndroidSdk { /// was marked as obsolete in 3.6. String get sdkManagerPath { final File cmdlineTool = globals.fs.file( - globals.fs.path.join(directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager') + globals.fs.path.join(directory, 'cmdline-tools', 'latest', 'bin', + globals.platform.isWindows + ? 'sdkmanager.bat' + : 'sdkmanager' + ), ); if (cmdlineTool.existsSync()) { return cmdlineTool.path; diff --git a/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart b/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart index 72b4a9cfe7d..d3c4aab811a 100644 --- a/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart @@ -8,6 +8,7 @@ import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/io.dart' show ProcessResult; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:mockito/mockito.dart'; +import 'package:platform/platform.dart'; import 'package:process/process.dart'; import '../../src/common.dart'; @@ -59,7 +60,7 @@ void main() { ProcessManager: () => FakeProcessManager.any(), }); - testUsingContext('returns sdkmanager path under cmdline tools', () { + testUsingContext('returns sdkmanager path under cmdline tools on Linux/macOS', () { sdkDir = MockAndroidSdk.createSdkDirectory(); globals.config.setValue('android-sdk', sdkDir.path); @@ -72,6 +73,24 @@ void main() { }, overrides: { FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), + Platform: () => FakePlatform(operatingSystem: 'linux'), + }); + + testUsingContext('returns sdkmanager.bat path under cmdline tools for windows', () { + sdkDir = MockAndroidSdk.createSdkDirectory(); + globals.config.setValue('android-sdk', sdkDir.path); + + final AndroidSdk sdk = AndroidSdk.locateAndroidSdk(); + globals.fs.file( + globals.fs.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager.bat') + ).createSync(recursive: true); + + expect(sdk.sdkManagerPath, + globals.fs.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager.bat')); + }, overrides: { + FileSystem: () => fs, + ProcessManager: () => FakeProcessManager.any(), + Platform: () => FakePlatform(operatingSystem: 'windows'), }); testUsingContext('returns sdkmanager path under tools if cmdline doesnt exist', () {