Skip to content

Commit

Permalink
refactor: 重构 adb argv 并为所有参数添加默认值
Browse files Browse the repository at this point in the history
  • Loading branch information
MistEO committed Nov 27, 2023
1 parent 3aca3b9 commit dbe6d24
Show file tree
Hide file tree
Showing 17 changed files with 152 additions and 150 deletions.
13 changes: 3 additions & 10 deletions source/MaaAdbControlUnit/Base/ArgvWrapper.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,19 @@ struct ArgvWrapper

Argv argv;

bool parse(const json::value& value);
bool parse(const json::array& arr);
Argv gen(const std::map<string, string>& replacement) const;
};

template <typename Argv>
requires IsSomeKindOfStringArray<Argv> && CheckArgv<Argv>
bool ArgvWrapper<Argv>::parse(const json::value& value)
bool ArgvWrapper<Argv>::parse(const json::array& arr)
{
if (!value.is_array()) {
return false;
}

const auto& arr = value.as_array();
if (MAA_RNS::ranges::any_of(arr, [](const json::value& val) { return !val.is_string(); })) {
return false;
}

argv.clear();
argv.reserve(arr.size());
MAA_RNS::ranges::transform(arr, std::back_inserter(argv), [](const json::value& val) { return val.as_string(); });
argv = arr.to_vector<string>();
return true;
}

Expand Down
17 changes: 4 additions & 13 deletions source/MaaAdbControlUnit/Base/UnitBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,12 @@ void UnitBase::merge_replacement(Argv::replacement argv_replace, bool _override)
}
}

bool UnitBase::parse_argv(const std::string& key, const json::value& config, Argv& argv)
bool UnitBase::parse_argv(const std::string& key, const json::value& config, const json::array& default_argv,
Argv& argv)
{
auto aopt = config.find<json::object>("command");
if (!aopt) {
LogError << "Cannot find argv entry";
return false;
}

auto opt = aopt->find<json::value>(key);
if (!opt) {
LogError << "Cannot find key" << VAR(key);
return false;
}
auto jargv = config.get("command", key, default_argv);

if (!argv.parse(*opt)) {
if (!argv.parse(jargv)) {
LogError << "Parse config failed:" << VAR(key);
return false;
}
Expand Down
3 changes: 2 additions & 1 deletion source/MaaAdbControlUnit/Base/UnitBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ class UnitBase
virtual void merge_replacement(Argv::replacement argv_replace, bool _override = true);

protected:
static bool parse_argv(const std::string& key, const json::value& config, /*out*/ Argv& argv);
static bool parse_argv(const std::string& key, const json::value& config, const json::array& default_argv,
/*out*/ Argv& argv);

std::optional<std::string> command(const Argv::value& cmd, bool recv_by_socket = false, int64_t timeout = 20000);

Expand Down
10 changes: 9 additions & 1 deletion source/MaaAdbControlUnit/General/Activity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,15 @@ MAA_CTRL_UNIT_NS_BEGIN

bool Activity::parse(const json::value& config)
{
return parse_argv("StartApp", config, start_app_argv_) && parse_argv("StopApp", config, stop_app_argv_);
static const json::array kDefaultStartAppArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "am start -n {INTENT}",
};
static const json::array kDefaultStopAppArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "am force-stop {INTENT}",
};

return parse_argv("StartApp", config, kDefaultStartAppArgv, start_app_argv_) &&
parse_argv("StopApp", config, kDefaultStopAppArgv, stop_app_argv_);
}

bool Activity::start_app(const std::string& intent)
Expand Down
13 changes: 12 additions & 1 deletion source/MaaAdbControlUnit/General/Connection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,18 @@ MAA_CTRL_UNIT_NS_BEGIN

bool Connection::parse(const json::value& config)
{
return parse_argv("Connect", config, connect_argv_) && parse_argv("KillServer", config, kill_server_argv_);
static const json::array kDefaultConnectArgv = {
"{ADB}",
"connect",
"{ADB_SERIAL}",
};
static const json::array kDefaultKillServerArgv = {
"{ADB}",
"kill-server",
};

return parse_argv("Connect", config, kDefaultConnectArgv, connect_argv_) &&
parse_argv("KillServer", config, kDefaultKillServerArgv, kill_server_argv_);
}

bool Connection::connect()
Expand Down
15 changes: 13 additions & 2 deletions source/MaaAdbControlUnit/General/DeviceInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,19 @@ MAA_CTRL_UNIT_NS_BEGIN

bool DeviceInfo::parse(const json::value& config)
{
return parse_argv("UUID", config, uuid_argv_) && parse_argv("Resolution", config, resolution_argv_) &&
parse_argv("Orientation", config, orientation_argv_);
static const json::array kDefaultUuidArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "settings get secure android_id",
};
static const json::array kDefaultResolutionArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "dumpsys window displays | grep -o -E cur=+[^\\ ]+ | grep -o -E [0-9]+",
};
static const json::array kDefaultOrientationArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "dumpsys input | grep SurfaceOrientation | grep -m 1 -o -E [0-9]",
};

return parse_argv("UUID", config, kDefaultUuidArgv, uuid_argv_) &&
parse_argv("Resolution", config, kDefaultResolutionArgv, resolution_argv_) &&
parse_argv("Orientation", config, kDefaultOrientationArgv, orientation_argv_);
}

std::optional<std::string> DeviceInfo::request_uuid()
Expand Down
7 changes: 6 additions & 1 deletion source/MaaAdbControlUnit/General/DeviceList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,12 @@ MAA_CTRL_UNIT_NS_BEGIN

bool DeviceList::parse(const json::value& config)
{
return parse_argv("Devices", config, devices_argv_);
static const json::array kDefaultDevicesArgv = {
"{ADB}",
"devices",
};

return parse_argv("Devices", config, kDefaultDevicesArgv, devices_argv_);
}

std::optional<std::vector<std::string>> DeviceList::request_devices()
Expand Down
26 changes: 1 addition & 25 deletions source/MaaAdbControlUnit/Input/MaatouchInput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,7 @@ MAA_CTRL_UNIT_NS_BEGIN

bool MaatouchInput::parse(const json::value& config)
{
auto popt = config.find<json::object>("prebuilt");
if (!popt) {
LogError << "Cannot find entry prebuilt";
return false;
}

auto mopt = popt->find<json::object>("maatouch");
if (!mopt) {
LogError << "Cannot find entry prebuilt.maatouch";
return false;
}

{
auto opt = mopt->find<json::value>("package");
if (!opt) {
LogError << "Cannot find entry prebuilt.maatouch.package";
return false;
}

if (!opt->is_string()) {
return false;
}

package_name_ = opt->as_string();
}
package_name_ = config.get("prebuilt", "maatouch", "package", "com.shxyke.MaaTouch.App");

return invoke_app_->parse(config);
}
Expand Down
36 changes: 6 additions & 30 deletions source/MaaAdbControlUnit/Input/MinitouchInput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,16 @@ MAA_CTRL_UNIT_NS_BEGIN

bool MinitouchInput::parse(const json::value& config)
{
auto popt = config.find<json::object>("prebuilt");
if (!popt) {
LogError << "Cannot find entry prebuilt";
return false;
}
static const json::array kDefaultArch = {
"x86_64", "x86", "arm64-v8a", "armeabi-v7a", "armeabi",
};
json::array jarch = config.get("prebuilt", "minitouch", "arch", kDefaultArch);

auto mopt = popt->find<json::object>("minitouch");
if (!mopt) {
LogError << "Cannot find entry prebuilt.minitouch";
if (MAA_RNS::ranges::any_of(jarch, [](const json::value& val) { return !val.is_string(); })) {
return false;
}

{
auto opt = mopt->find<json::value>("arch");
if (!opt) {
LogError << "Cannot find entry prebuilt.minitouch.arch";
return false;
}

const auto& value = *opt;
if (!value.is_array()) {
return false;
}

const auto& arr = value.as_array();
if (MAA_RNS::ranges::any_of(arr, [](const json::value& val) { return !val.is_string(); })) {
return false;
}

arch_list_.clear();
arch_list_.reserve(arr.size());
MAA_RNS::ranges::transform(arr, std::back_inserter(arch_list_),
[](const json::value& val) { return val.as_string(); });
}
arch_list_ = jarch.to_vector<std::string>();

return invoke_app_->parse(config);
}
Expand Down
16 changes: 14 additions & 2 deletions source/MaaAdbControlUnit/Input/TapInput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,15 @@ MAA_CTRL_UNIT_NS_BEGIN

bool TapTouchInput::parse(const json::value& config)
{
return parse_argv("Click", config, click_argv_) && parse_argv("Swipe", config, swipe_argv_);
static const json::array kDefaultClickArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "input tap {X} {Y}",
};
static const json::array kDefaultSwipeArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "input swipe {X1} {Y1} {X2} {Y2} {DURATION}",
};

return parse_argv("Click", config, kDefaultClickArgv, click_argv_) &&
parse_argv("Swipe", config, kDefaultSwipeArgv, swipe_argv_);
}

bool TapTouchInput::init(int swidth, int sheight, int orientation)
Expand Down Expand Up @@ -71,7 +79,11 @@ bool TapTouchInput::touch_up(int contact)

bool TapKeyInput::parse(const json::value& config)
{
return parse_argv("PressKey", config, press_key_argv_);
static const json::array kDefaultPressKeyArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "input keyevent {KEY}",
};

return parse_argv("PressKey", config, kDefaultPressKeyArgv, press_key_argv_);
}

bool TapKeyInput::press_key(int key)
Expand Down
36 changes: 33 additions & 3 deletions source/MaaAdbControlUnit/Invoke/InvokeApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,39 @@ MAA_CTRL_UNIT_NS_BEGIN

bool InvokeApp::parse(const json::value& config)
{
return parse_argv("Abilist", config, abilist_argv_) && parse_argv("SDK", config, sdk_argv_) &&
parse_argv("PushBin", config, push_bin_argv_) && parse_argv("ChmodBin", config, chmod_bin_argv_) &&
parse_argv("InvokeBin", config, invoke_bin_argv_) && parse_argv("InvokeApp", config, invoke_app_argv_);
static const json::array kDefaultAbilistArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "getprop ro.product.cpu.abilist | tr -d '\n\r'",
};
static const json::array kDefaultSdkArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "getprop ro.build.version.sdk | tr -d '\n\r'",
};
static const json::array kDefaultPushBinArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "push", "{BIN_PATH}", "/data/local/tmp/{BIN_WORKING_FILE}",
};
static const json::array kDefaultChmodBinArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "chmod 700 \"/data/local/tmp/{BIN_WORKING_FILE}\"",
};
static const json::array kDefaultInvokeBinArgv = {
"{ADB}",
"-s",
"{ADB_SERIAL}",
"shell",
"export LD_LIBRARY_PATH=/data/local/tmp/; \"/data/local/tmp/{BIN_WORKING_FILE}\" {BIN_EXTRA_PARAMS} 2>&1",
};
static const json::array kDefaultInvokeAppArgv = {
"{ADB}",
"-s",
"{ADB_SERIAL}",
"shell",
"export CLASSPATH=\"/data/local/tmp/{APP_WORKING_FILE}\"; app_process /data/local/tmp {PACKAGE_NAME}",
};

return parse_argv("Abilist", config, kDefaultAbilistArgv, abilist_argv_) &&
parse_argv("SDK", config, kDefaultSdkArgv, sdk_argv_) &&
parse_argv("PushBin", config, kDefaultPushBinArgv, push_bin_argv_) &&
parse_argv("ChmodBin", config, kDefaultChmodBinArgv, chmod_bin_argv_) &&
parse_argv("InvokeBin", config, kDefaultInvokeBinArgv, invoke_bin_argv_) &&
parse_argv("InvokeApp", config, kDefaultInvokeAppArgv, invoke_app_argv_);
}

bool InvokeApp::init(const std::string& force_temp)
Expand Down
6 changes: 5 additions & 1 deletion source/MaaAdbControlUnit/Screencap/Encode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ MAA_CTRL_UNIT_NS_BEGIN

bool ScreencapEncode::parse(const json::value& config)
{
return parse_argv("ScreencapEncode", config, screencap_encode_argv_);
static const json::array kDefaultScreencapEncodeArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "exec-out", "screencap -p",
};

return parse_argv("ScreencapEncode", config, kDefaultScreencapEncodeArgv, screencap_encode_argv_);
}

bool ScreencapEncode::init(int swidth, int sheight)
Expand Down
12 changes: 10 additions & 2 deletions source/MaaAdbControlUnit/Screencap/EncodeToFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,16 @@ MAA_CTRL_UNIT_NS_BEGIN

bool ScreencapEncodeToFileAndPull::parse(const json::value& config)
{
return parse_argv("ScreencapEncodeToFile", config, screencap_encode_to_file_argv_) &&
parse_argv("PullFile", config, pull_file_argv_);
static const json::array kDefaultScreencapEncodeToFileArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "shell", "screencap -p > \"/data/local/tmp/{TEMP_FILE}\"",
};
static const json::array kDefaultPullFileArgv = {
"{ADB}", "-s", "{ADB_SERIAL}", "pull", "/data/local/tmp/{TEMP_FILE}", "{DST_PATH}"
};

return parse_argv("ScreencapEncodeToFile", config, kDefaultScreencapEncodeToFileArgv,
screencap_encode_to_file_argv_) &&
parse_argv("PullFile", config, kDefaultPullFileArgv, pull_file_argv_);
}

bool ScreencapEncodeToFileAndPull::init(int swidth, int sheight)
Expand Down
Loading

0 comments on commit dbe6d24

Please sign in to comment.