diff --git a/3rdparty/resource/minitouch/arm64-v8a/minitouch b/3rdparty/resource/minitouch/arm64-v8a/minitouch new file mode 100644 index 0000000000..33301cfe35 Binary files /dev/null and b/3rdparty/resource/minitouch/arm64-v8a/minitouch differ diff --git a/3rdparty/resource/minitouch/armeabi-v7a/minitouch b/3rdparty/resource/minitouch/armeabi-v7a/minitouch new file mode 100644 index 0000000000..474231abda Binary files /dev/null and b/3rdparty/resource/minitouch/armeabi-v7a/minitouch differ diff --git a/3rdparty/resource/minitouch/armeabi/minitouch b/3rdparty/resource/minitouch/armeabi/minitouch new file mode 100644 index 0000000000..7c45952ed8 Binary files /dev/null and b/3rdparty/resource/minitouch/armeabi/minitouch differ diff --git a/3rdparty/resource/minitouch/x86/minitouch b/3rdparty/resource/minitouch/x86/minitouch new file mode 100644 index 0000000000..8a06b868a2 Binary files /dev/null and b/3rdparty/resource/minitouch/x86/minitouch differ diff --git a/3rdparty/resource/minitouch/x86_64/minitouch b/3rdparty/resource/minitouch/x86_64/minitouch new file mode 100644 index 0000000000..9eeb5e6f25 Binary files /dev/null and b/3rdparty/resource/minitouch/x86_64/minitouch differ diff --git a/resource/config.json b/resource/config.json index 58c47b883a..391f8d95c3 100644 --- a/resource/config.json +++ b/resource/config.json @@ -55,7 +55,10 @@ "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", - "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"", + "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", + "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", + "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" [minitouchInput]" }, "BlueStacks": { "devices": "[Adb] devices", @@ -73,7 +76,10 @@ "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", - "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"", + "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", + "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", + "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" [minitouchInput]" }, "MuMuEmulator": { "devices": "[Adb] devices", @@ -91,7 +97,10 @@ "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", - "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"", + "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", + "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", + "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" [minitouchInput]" }, "LDPlayer": { "devices": "[Adb] devices", @@ -109,7 +118,10 @@ "screencapEncode": "[Adb] -s [AdbSerial] shell screencap -p", "release": "[Adb] kill-server", "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", - "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"", + "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", + "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", + "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" [minitouchInput]" }, "Nox": { "devices": "[Adb] devices", @@ -127,7 +139,10 @@ "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", - "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"", + "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", + "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", + "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" [minitouchInput]" }, "XYAZ": { "devices": "[Adb] devices", @@ -145,7 +160,10 @@ "screencapEncode": "[Adb] -s [AdbSerial] shell screencap -p", "release": "[Adb] kill-server", "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", - "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"", + "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", + "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", + "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" [minitouchInput]" }, "WSA": { "devices": "[Adb] devices", @@ -164,7 +182,10 @@ "screencapEncode": "[Adb] -s [AdbSerial] shell screencap -d [DisplayId] -p", "release": "[Adb] kill-server", "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", - "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"", + "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", + "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", + "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" [minitouchInput]" }, "Compatible": { "devices": "[Adb] devices", @@ -182,7 +203,10 @@ "screencapEncode": "[Adb] -s [AdbSerial] exec-out screencap -p", "release": "[Adb] kill-server", "start": "[Adb] -s [AdbSerial] shell am start -n [Intent]", - "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"" + "stop": "[Adb] -s [AdbSerial] shell \"am force-stop `dumpsys activity activities 2>/dev/null | grep Activities= 2>/dev/null | grep -m 1 -i -o -E [^\\ ]*arknights[^/]*`\"", + "pushMinitouch": "[Adb] -s [AdbSerial] push \"[minitouchLocalPath]\" \"/data/local/tmp/[minitouchWorkingFile]\"", + "chmodMinitouch": "[Adb] -s [AdbSerial] shell chmod 700 \"/data/local/tmp/[minitouchWorkingFile]\"", + "callMinitouch": "[Adb] -s [AdbSerial] shell \"/data/local/tmp/[minitouchWorkingFile]\" [minitouchInput]" } } } diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index b072256350..81feeceb8c 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -997,7 +997,7 @@ bool asst::Controller::connect(const std::string& adb_path, const std::string& a } auto& uuid_str = uuid_ret.value(); - std::erase(uuid_str, ' '); + std::erase_if(uuid_str, [](char c) { return !std::isdigit(c) && !std::isalpha(c); }); m_uuid = std::move(uuid_str); json::value info = get_info_json() | json::object { @@ -1166,6 +1166,23 @@ bool asst::Controller::connect(const std::string& adb_path, const std::string& a return false; } + if (m_enable_minitouch) { + auto minitouch_cmd_rep = [&](const std::string& cfg_cmd) -> std::string { + return utils::string_replace_all( + cmd_replace(cfg_cmd), + { + // TODO: 用 adb shell getprop ro.product.cpu.abilist 来判断该用哪个文件夹里的 + { "[minitouchLocalPath]", (m_resource_path / "minitouch" / "armeabi-v7a" / "minitouch").string() }, + { "[minitouchWorkingFile]", m_uuid }, + }); + }; + + call_command(minitouch_cmd_rep(adb_cfg.push_minitouch)); + call_command(minitouch_cmd_rep(adb_cfg.chmod_minitouch)); + + m_adb.call_minitouch = minitouch_cmd_rep(adb_cfg.push_minitouch); + } + // try to find the fastest way if (!screencap()) { Log.error("Cannot find a proper way to screencap!"); diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index f1d0b5a4e6..7a29e57af0 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -40,6 +41,7 @@ namespace asst bool connect(const std::string& adb_path, const std::string& address, const std::string& config); bool inited() const noexcept; void set_exit_flag(bool* flag); + inline static void set_resource_path(const std::filesystem::path& path) { m_resource_path = path; } const std::string& get_uuid() const; cv::Mat get_image(bool raw = false); @@ -133,6 +135,8 @@ namespace asst std::string start; std::string stop; + std::string call_minitouch; + /* properties */ enum class ScreencapEndOfLine { @@ -152,6 +156,10 @@ namespace asst } screencap_method = ScreencapMethod::UnknownYet; } m_adb; + bool m_enable_minitouch = true; + + inline static std::filesystem::path m_resource_path; + std::string m_uuid; inline static std::string m_adb_release; // 开了 adb daemon,但是没连上模拟器的时候, // m_adb 并不会存下 release 的命令,但最后仍然需要一次释放。 diff --git a/src/MeoAssistant/Resource/GeneralConfiger.cpp b/src/MeoAssistant/Resource/GeneralConfiger.cpp index 19c720992e..2367c41a54 100644 --- a/src/MeoAssistant/Resource/GeneralConfiger.cpp +++ b/src/MeoAssistant/Resource/GeneralConfiger.cpp @@ -46,7 +46,9 @@ bool asst::GeneralConfiger::parse(const json::value& json) adb.release = cfg_json.at("release").as_string(); adb.start = cfg_json.at("start").as_string(); adb.stop = cfg_json.at("stop").as_string(); - // adb.pullscreen = cfg_json.at("pullscreen").as_string(); + adb.push_minitouch = cfg_json.at("pushMinitouch").as_string(); + adb.chmod_minitouch = cfg_json.at("chmodMinitouch").as_string(); + adb.call_minitouch = cfg_json.at("callMinitouch").as_string(); m_adb_cfg[name] = std::move(adb); } diff --git a/src/MeoAssistant/Resource/GeneralConfiger.h b/src/MeoAssistant/Resource/GeneralConfiger.h index dcbae06624..cd7bf390e7 100644 --- a/src/MeoAssistant/Resource/GeneralConfiger.h +++ b/src/MeoAssistant/Resource/GeneralConfiger.h @@ -68,6 +68,9 @@ namespace asst std::string release; std::string start; std::string stop; + std::string push_minitouch; + std::string chmod_minitouch; + std::string call_minitouch; }; class GeneralConfiger final : public SingletonHolder, public AbstractConfiger diff --git a/src/MeoAssistant/ResourceLoader.cpp b/src/MeoAssistant/ResourceLoader.cpp index 8704fedc37..d6d0eee27f 100644 --- a/src/MeoAssistant/ResourceLoader.cpp +++ b/src/MeoAssistant/ResourceLoader.cpp @@ -4,6 +4,7 @@ #include "Utils/Logger.hpp" +#include "Controller.h" #include "Resource/BattleDataConfiger.h" #include "Resource/CopilotConfiger.h" #include "Resource/GeneralConfiger.h" @@ -67,6 +68,10 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path) LoadResourceAndCheckRet(WordOcr, "PaddleOCR"_p); LoadResourceAndCheckRet(CharOcr, "PaddleCharOCR"_p); + if (!m_loaded) { + Controller::set_resource_path(path); + } + m_loaded = true; #undef LoadTemplByConfigerAndCheckRet