diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart index 30bcfc0576f..7cb0404a886 100644 --- a/packages/flutter_tools/lib/src/android/android_device.dart +++ b/packages/flutter_tools/lib/src/android/android_device.dart @@ -1009,7 +1009,13 @@ class _AdbLogReader extends DeviceLogReader { void _start() { final String lastTimestamp = device.lastLogcatTimestamp; // Start the adb logcat process and filter the most recent logs since `lastTimestamp`. - final List args = ['logcat', '-v', 'time', '-T', lastTimestamp]; + final List args = [ + 'logcat', + '-v', + 'time', + '-T', + lastTimestamp ?? '', // Empty `-T` means the timestamp of the logcat command invocation. + ]; processUtils.start(device.adbCommandForDevice(args)).then((Process process) { _process = process; // We expect logcat streams to occasionally contain invalid utf-8, diff --git a/packages/flutter_tools/test/general.shard/android/android_device_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_test.dart index c8b9c66066f..d1180eafe59 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_test.dart @@ -707,6 +707,24 @@ flutter: AndroidSdk: () => mockAndroidSdk, ProcessManager: () => mockProcessManager, }); + + testUsingContext('calls adb logcat with expected flags when the device logs are empty', () async { + when(mockAndroidSdk.adbPath).thenReturn('adb'); + when(mockProcessManager.runSync(['adb', '-s', '1234', 'shell', '-x', 'logcat', '-v', 'time', '-t', '1'])) + .thenReturn(ProcessResult(0, 0, '', '')); + when(mockProcessManager.start(argThat(contains('logcat')))) + .thenAnswer((_) => Future.value(createMockProcess())); + + final AndroidDevice device = AndroidDevice('1234'); + final DeviceLogReader logReader = device.getLogReader(); + logReader.logLines.listen((_) {}); + + verify(mockProcessManager.start(const ['adb', '-s', '1234', 'logcat', '-v', 'time', '-T', ''])) + .called(1); + }, overrides: { + AndroidSdk: () => mockAndroidSdk, + ProcessManager: () => mockProcessManager, + }); }); test('Can parse adb shell dumpsys info', () {