[flutter_tools] cache adb path (#76650)
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart index 774bfeb..3ae5c84 100644 --- a/packages/flutter_tools/lib/src/android/android_sdk.dart +++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -167,7 +167,8 @@ AndroidSdkVersion get latestVersion => _latestVersion; - String get adbPath => getPlatformToolsPath(globals.platform.isWindows ? 'adb.exe' : 'adb'); + String get adbPath => _adbPath ??= getPlatformToolsPath(globals.platform.isWindows ? 'adb.exe' : 'adb'); + String _adbPath; String get emulatorPath => getEmulatorPath();
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 343ba76..62ac8bf 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
@@ -83,6 +83,27 @@ Config: () => config, }); + testUsingContext('Caches adb location after first access', () { + sdkDir = MockAndroidSdk.createSdkDirectory(); + config.setValue('android-sdk', sdkDir.path); + + final AndroidSdk sdk = AndroidSdk.locateAndroidSdk(); + final File adbFile = fileSystem.file( + fileSystem.path.join(sdk.directory.path, 'cmdline-tools', 'adb.exe') + )..createSync(recursive: true); + + expect(sdk.adbPath, fileSystem.path.join(sdk.directory.path, 'cmdline-tools', 'adb.exe')); + + adbFile.deleteSync(recursive: true); + + expect(sdk.adbPath, fileSystem.path.join(sdk.directory.path, 'cmdline-tools', 'adb.exe')); + }, overrides: <Type, Generator>{ + FileSystem: () => fileSystem, + ProcessManager: () => FakeProcessManager.any(), + Platform: () => FakePlatform(operatingSystem: 'windows'), + Config: () => config, + }); + testUsingContext('returns sdkmanager.bat path under cmdline tools for windows', () { sdkDir = MockAndroidSdk.createSdkDirectory(); config.setValue('android-sdk', sdkDir.path);