diff --git a/CMakeLists.txt b/CMakeLists.txt index b04b623..035a802 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,6 +81,7 @@ if (WIN32) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/images" DESTINATION "${CMAKE_BINARY_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" DESTINATION "${CMAKE_BINARY_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" DESTINATION "${CMAKE_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tools/adb/windows" DESTINATION "${CMAKE_BINARY_DIR}/tools/adb") elseif (APPLE) target_link_libraries(ARCDesktopProject diff --git a/android/adb/AdbUtils.cpp b/android/adb/AdbUtils.cpp index 3f05ddd..d73d1cf 100644 --- a/android/adb/AdbUtils.cpp +++ b/android/adb/AdbUtils.cpp @@ -2,10 +2,19 @@ #include #include #include +#include AdbUtils::AdbUtils(QObject *parent) : QObject(parent) { } +QString AdbUtils::adbPath() { +#ifdef Q_OS_WIN + return QCoreApplication::applicationDirPath() + "/tools/adb/adb.exe"; +#else + return QCoreApplication::applicationDirPath() + "/tools/adb/macos/adb"; +#endif +} + // adb shell dumpsys package ru.rshb.dbo | grep permission // TODO доделать обработку пермишинов // adb shell pm revoke ru.rshb.dbo android.permission.WRITE_CONTACTS; adb shell pm revoke ru.rshb.dbo android.permission.READ_CONTACTS; adb shell pm revoke ru.rshb.dbo android.permission.ACCESS_COARSE_LOCATION; adb shell pm revoke ru.rshb.dbo android.permission.ACCESS_FINE_LOCATION @@ -154,16 +163,30 @@ bool AdbUtils::takeScreenshot(const QString &deviceId, const QString &name) { } bool AdbUtils::takeXmlDump(const QString &deviceId, const QString &name) { - QProcess process; - QString xml = QString( - "adb -s %1 shell 'uiautomator dump /sdcard/uidump.xml' && " - "adb -s %1 pull /sdcard/uidump.xml %2.xml && " - "adb -s %1 shell 'cat /sdcard/uidump.xml' && " - "adb -s %1 shell 'rm /sdcard/uidump.xml'" - ).arg(deviceId, name); - process.start("sh", {"-c", xml}); - process.waitForFinished(); - return process.exitStatus() == QProcess::NormalExit && process.exitCode() == 0; + const QString adb = adbPath(); + QStringList commands = { + QString("%1 -s %2 shell uiautomator dump /sdcard/uidump.xml").arg(adb, deviceId), + QString("%1 -s %2 pull /sdcard/uidump.xml %3.xml").arg(adb, deviceId, name), + QString("%1 -s %2 shell cat /sdcard/uidump.xml").arg(adb, deviceId), + QString("%1 -s %2 shell rm /sdcard/uidump.xml").arg(adb, deviceId) + }; + + for (const QString &cmd: commands) { + QProcess process; +#ifdef Q_OS_WIN + process.start("cmd.exe", {"/C", cmd}); +#else + process.start("sh", {"-c", cmd}); +#endif + if (!process.waitForFinished() || + process.exitStatus() != QProcess::NormalExit || + process.exitCode() != 0) { + qWarning() << "ADB command failed:" << cmd; + return false; + } + } + + return true; } bool AdbUtils::makeTap(const QString &deviceId, const int x, const int y) { @@ -256,7 +279,7 @@ QSet AdbUtils::getListApps(const QString &deviceId) { const QString output = process.readAllStandardOutput(); QSet apps; - const QStringList lines = output.split('\n'); + const QStringList lines = output.split("\n"); for (int i = 0; i < lines.size(); ++i) { QString line = lines.at(i).trimmed().replace("package:", ""); diff --git a/android/adb/AdbUtils.h b/android/adb/AdbUtils.h index d3dcd42..30778de 100644 --- a/android/adb/AdbUtils.h +++ b/android/adb/AdbUtils.h @@ -9,6 +9,8 @@ class AdbUtils final : public QObject { public: explicit AdbUtils(QObject *parent = nullptr); + static QString adbPath(); + static QList > getListDevices(); static QString tryToGetRunningAppPid(const QString &deviceId, const QString &packageName); diff --git a/main.cpp b/main.cpp index 9c4ae61..c4b8a84 100644 --- a/main.cpp +++ b/main.cpp @@ -16,6 +16,7 @@ #include #include "EventHandler.h" +#include "adb/AdbUtils.h" #include "net/NetworkService.h" #include "rshb/GetLastDaysHistoryScript.h" #include "rshb/HomeScreenScript.h" @@ -144,9 +145,11 @@ int main(int argc, char *argv[]) { // 79641815146 - Мама Альфа // 79199196105 - Папа рсхб - startNetworkService(app); - startDeviceScreener(app); - startEventHandler(app); + // startNetworkService(app); + // startDeviceScreener(app); + // startEventHandler(app); + + AdbUtils::takeXmlDump("29301FDH20036X", "test"); MainWindow window; window.show(); diff --git a/tools/adb/macos/adb b/tools/adb/macos/adb new file mode 100755 index 0000000..3bfe1a1 Binary files /dev/null and b/tools/adb/macos/adb differ diff --git a/tools/adb/macos/libc++.dylib b/tools/adb/macos/libc++.dylib new file mode 100755 index 0000000..95f6b9d Binary files /dev/null and b/tools/adb/macos/libc++.dylib differ diff --git a/tools/adb/windows/AdbWinApi.dll b/tools/adb/windows/AdbWinApi.dll new file mode 100644 index 0000000..c32abf5 Binary files /dev/null and b/tools/adb/windows/AdbWinApi.dll differ diff --git a/tools/adb/windows/AdbWinUsbApi.dll b/tools/adb/windows/AdbWinUsbApi.dll new file mode 100644 index 0000000..d10d1e1 Binary files /dev/null and b/tools/adb/windows/AdbWinUsbApi.dll differ diff --git a/tools/adb/windows/adb.exe b/tools/adb/windows/adb.exe new file mode 100644 index 0000000..10784b3 Binary files /dev/null and b/tools/adb/windows/adb.exe differ diff --git a/tools/adb/windows/libwinpthread-1.dll b/tools/adb/windows/libwinpthread-1.dll new file mode 100644 index 0000000..f6599c7 Binary files /dev/null and b/tools/adb/windows/libwinpthread-1.dll differ