diff --git a/app/src/adb/adb.c b/app/src/adb/adb.c index 2afe11c5..5b61788a 100644 --- a/app/src/adb/adb.c +++ b/app/src/adb/adb.c @@ -194,6 +194,14 @@ sc_adb_execute(const char *const argv[], unsigned flags) { return sc_adb_execute_p(argv, flags, NULL); } +bool +sc_adb_start_server(struct sc_intr *intr, unsigned flags) { + const char *const argv[] = SC_ADB_COMMAND("start-server"); + + sc_pid pid = sc_adb_execute(argv, flags); + return process_check_success_intr(intr, pid, "adb start-server", flags); +} + bool sc_adb_forward(struct sc_intr *intr, const char *serial, uint16_t local_port, const char *device_socket_name, unsigned flags) { diff --git a/app/src/adb/adb.h b/app/src/adb/adb.h index ac9e15b0..1381031f 100644 --- a/app/src/adb/adb.h +++ b/app/src/adb/adb.h @@ -21,6 +21,9 @@ sc_adb_get_executable(void); sc_pid sc_adb_execute(const char *const argv[], unsigned flags); +bool +sc_adb_start_server(struct sc_intr *intr, unsigned flags); + bool sc_adb_forward(struct sc_intr *intr, const char *serial, uint16_t local_port, const char *device_socket_name, unsigned flags); diff --git a/app/src/server.c b/app/src/server.c index 3264c4ee..f6e8b6df 100644 --- a/app/src/server.c +++ b/app/src/server.c @@ -665,6 +665,15 @@ run_server(void *data) { const struct sc_server_params *params = &server->params; + // Execute "adb start-server" before "adb devices" so that daemon starting + // output/errors is correctly printed in the console ("adb devices" output + // is parsed, so it is not output) + bool ok = sc_adb_start_server(&server->intr, 0); + if (!ok) { + LOGE("Could not start adb daemon"); + goto error_connection_failed; + } + // params->tcpip_dst implies params->tcpip assert(!params->tcpip_dst || params->tcpip); @@ -677,7 +686,6 @@ run_server(void *data) { // exist, and scrcpy will execute "adb connect"). bool need_initial_serial = !params->tcpip_dst; - bool ok; if (need_initial_serial) { struct sc_adb_device device; ok = sc_adb_select_device(&server->intr, params->req_serial, 0,