From a7ae832e303e3c0581c3d411fb05b0236a171760 Mon Sep 17 00:00:00 2001 From: Cedric van Putten Date: Wed, 6 Mar 2024 15:34:16 +0100 Subject: [PATCH] fix(cli): filter ADB trace logs from the device list --- .../platforms/android/__tests__/adb-test.ts | 33 +++++++++++++++++++ .../cli/src/start/platforms/android/adb.ts | 12 ++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/packages/@expo/cli/src/start/platforms/android/__tests__/adb-test.ts b/packages/@expo/cli/src/start/platforms/android/__tests__/adb-test.ts index 87d287044e491..1c69683272a59 100644 --- a/packages/@expo/cli/src/start/platforms/android/__tests__/adb-test.ts +++ b/packages/@expo/cli/src/start/platforms/android/__tests__/adb-test.ts @@ -209,7 +209,40 @@ describe(getAttachedDevicesAsync, () => { isAuthorized: true, isBooted: true, name: 'Pixel_4_XL_API_30', + pid: 'emulator-5554', + type: 'emulator', + }, + ]); + }); + + it(`gets devices when ADB_TRACE is set`, async () => { + jest + .mocked(getServer().runAsync) + .mockResolvedValueOnce( + [ + 'List of devices attached', + 'adb D 03-06 15:25:53 63677 4018815 adb_client.cpp:393] adb_query: host:devices-l', + 'adb D 03-06 15:25:53 63677 4018815 adb_client.cpp:351] adb_connect: service: host:devices-l', + 'adb D 03-06 15:25:53 63677 4018815 adb_client.cpp:160] _adb_connect: host:devices-l', + 'adb D 03-06 15:25:53 63677 4018815 adb_client.cpp:194] _adb_connect: return fd 3', + 'adb D 03-06 15:25:53 63677 4018815 adb_client.cpp:369] adb_connect: return fd 3', + // Emulator + 'emulator-5554 offline transport_id:1', + '', + ].join('\n') + ) + .mockResolvedValueOnce( + // Return the emulator name + ['Pixel_4_XL_API_30', 'OK'].join('\n') + ); + const devices = await getAttachedDevicesAsync(); + + expect(devices).toEqual([ + { + isAuthorized: true, + isBooted: true, + name: 'Pixel_4_XL_API_30', pid: 'emulator-5554', type: 'emulator', }, diff --git a/packages/@expo/cli/src/start/platforms/android/adb.ts b/packages/@expo/cli/src/start/platforms/android/adb.ts index c71fce66cf9cb..4ca7650a2525d 100644 --- a/packages/@expo/cli/src/start/platforms/android/adb.ts +++ b/packages/@expo/cli/src/start/platforms/android/adb.ts @@ -229,7 +229,16 @@ export function adbArgs(pid: Device['pid'], ...options: string[]): string[] { export async function getAttachedDevicesAsync(): Promise { const output = await getServer().runAsync(['devices', '-l']); - const splitItems = output.trim().replace(/\n$/, '').split(os.EOL); + const splitItems = output + .trim() + .replace(/\n$/, '') + .split(os.EOL) + // Filter ADB trace logs from the output, e.g. + // adb D 03-06 15:25:53 63677 4018815 adb_client.cpp:393] adb_query: host:devices-l + // 03-04 12:29:44.557 16415 16415 D adb : commandline.cpp:1646 Using server socket: tcp:172.27.192.1:5037 + // 03-04 12:29:44.557 16415 16415 D adb : adb_client.cpp:160 _adb_connect: host:version + .filter((line) => !line.match(/\.cpp:[0-9]+/)); + // First line is `"List of devices attached"`, remove it // @ts-ignore: todo const attachedDevices: { @@ -239,6 +248,7 @@ export async function getAttachedDevicesAsync(): Promise { }[] = splitItems .slice(1, splitItems.length) .map((line) => { + console.log(line); // unauthorized: ['FA8251A00719', 'unauthorized', 'usb:338690048X', 'transport_id:5'] // authorized: ['FA8251A00719', 'device', 'usb:336592896X', 'product:walleye', 'model:Pixel_2', 'device:walleye', 'transport_id:4'] // emulator: ['emulator-5554', 'offline', 'transport_id:1']