From c8fb6e3c3b45a6d960c4267ecc533098b4d609bd Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Sun, 18 Sep 2022 19:23:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20kill=5Fadb=5Fdaemo?= =?UTF-8?q?n()=20=E4=BD=BF=E5=BE=97=E5=9C=A8=E6=B2=A1=E8=BF=9E=E4=B8=8A?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8=E7=9A=84=E6=97=B6=E5=80=99=20adb=20?= =?UTF-8?q?daemon=20=E4=B9=9F=E8=83=BD=E9=80=80=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/Controller.cpp | 23 ++++++++++++++++++++++- src/MeoAssistant/Controller.h | 3 +++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index b0fc49d2a6..af838d8a58 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -73,6 +73,7 @@ asst::Controller::~Controller() } set_inited(false); + kill_adb_daemon(); #ifndef _WIN32 close(m_pipe_in[PIPE_READ]); @@ -1033,6 +1034,10 @@ bool asst::Controller::connect(const std::string& adb_path, const std::string& a if (connect_ret) { auto& connect_str = connect_ret.value(); is_connect_success = connect_str.find("error") == std::string::npos; + if (connect_str.find("daemon started successfully") != std::string::npos && + connect_str.find("daemon still not running") == std::string::npos) { + m_adb_release = cmd_replace(adb_cfg.release); + } } if (!is_connect_success) { json::value info = get_info_json() | json::object { @@ -1176,7 +1181,7 @@ bool asst::Controller::connect(const std::string& adb_path, const std::string& a m_adb.swipe = cmd_replace(adb_cfg.swipe); m_adb.screencap_raw_with_gzip = cmd_replace(adb_cfg.screencap_raw_with_gzip); m_adb.screencap_encode = cmd_replace(adb_cfg.screencap_encode); - m_adb.release = cmd_replace(adb_cfg.release); + m_adb_release = m_adb.release = cmd_replace(adb_cfg.release); m_adb.start = cmd_replace(adb_cfg.start); m_adb.stop = cmd_replace(adb_cfg.stop); @@ -1241,6 +1246,22 @@ bool asst::Controller::set_inited(bool inited) return true; } +void asst::Controller::kill_adb_daemon() { + if (m_instance_count) return; +#ifndef _WIN32 + if (m_child) +#endif + { + if (!m_adb_release.empty()) { + call_command(m_adb_release, 20000, false, false); + m_adb_release.clear(); + } + else if (!m_adb.release.empty()) { + call_command(m_adb.release, 20000, false, false); + } + } +} + bool asst::Controller::release() { try_to_close_socket(); diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index acfed957ee..e53292dcdd 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -78,6 +78,7 @@ namespace asst bool recv_by_socket = false, bool allow_reconnect = true); int push_cmd(const std::string& cmd); bool release(); + void kill_adb_daemon(); bool set_inited(bool inited); void try_to_close_socket() noexcept; @@ -158,6 +159,8 @@ namespace asst } m_adb; std::string m_uuid; + inline static std::string m_adb_release; // 开了 adb daemon,但是没连上模拟器的时候, + // m_adb 并不会存下 release 的命令,但最后仍然需要一次释放。 std::pair m_scale_size = { WindowWidthDefault, WindowHeightDefault }; double m_control_scale = 1.0; int m_width = 0;