Как в зенопостере на C# выполнить команду adb shell cp /folder1/ /folder2/

Jack_Dream

Client
Регистрация
05.12.2021
Сообщения
330
Благодарностей
28
Баллы
28
Как в зенопостере на C# выполнить команду adb shell cp /folder1/ /folder2/
 

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 050
Баллы
93
Как в зенопостере на C# выполнить команду adb shell cp /folder1/ /folder2/
Если не использовать библиотеки эмулирующие консольные запросы, то:
Для начала вам нужно подключиться к конкретному устройству через консоль.
После вам нужно получить имя устройства и использовать вот такую команду adb -s {name_device} shell {right_request} // right_request == правильный запрос
Вы же в консоли это делали? Если да, то ниже вы явно разберетесь.) Если нет, обратите внимание на мою подпись. :do:


Важно! Не забыть указать в Using'ах
91883

Пример запроса в консоль с получением результата в переменную:
string pathAdb = project.Variables["pathAdb"].Value; // путь к adb
Process cmd = new Process();
cmd.StartInfo = new ProcessStartInfo
{
    FileName = "cmd.exe",
    CreateNoWindow = true,
    UseShellExecute = false,
    WindowStyle = ProcessWindowStyle.Normal,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
};
cmd.Start();

cmd.StandardInput.WriteLine($"cd {pathAdb}"); // переход в директорию с adb
Thread.Sleep(200);
cmd.StandardInput.WriteLine(string.Format(@"adb devices")); // запросить список активных устройств

cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
return cmd.StandardOutput.ReadToEnd();


Решение с получением коллекции устройств. Подключение к первому и совершение запроса getprop ro.build.version.sdk в shell андроида. ↓
Получить версию sdk эмулятора через adb shell getprop ro.build.version.sdk:
string pathAdb = project.Variables["pathAdb"].Value; // путь к adb
Process cmd = new Process();
cmd.StartInfo = new ProcessStartInfo
{
    FileName = $"cmd.exe",
    CreateNoWindow = true,
    UseShellExecute = false,
    WindowStyle = ProcessWindowStyle.Normal,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
};
cmd.Start();

//cmd.StandardInput.WriteLine($"cd {pathAdb}"); // переход в директорию с adb // пример нескольких команд
//Thread.Sleep(200);
cmd.StandardInput.WriteLine(string.Format(@"adb devices")); // запросить список активных устройств

cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();

string consoleResponse = cmd.StandardOutput.ReadToEnd().ToString(); // ответ от консоли

MatchCollection matchListDevices = Regex.Matches(consoleResponse, @"(?m)^emulator.+(?=[    ]+(device|offline))"); // получить коллекцию устройств
List<string> listDevices = matchListDevices.Cast<Match>().Select(match => match.Value).ToList();

string device = project.Variables["device"].Value = listDevices[0]; // вывести в переменную первое устройство для наглядности

cmd.Start();

cmd.StandardInput.WriteLine($"adb -s {device} shell getprop ro.build.version.sdk"); // запрос для получения версии sdk

cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();

return consoleResponse = cmd.StandardOutput.ReadToEnd().ToString(); // полный ответ из консоли. Дальше тоже можно очистить геруляркой и работать дальше
Ниже приложил шаблон для наглядности. ↓
 

Вложения

Последнее редактирование:

Jack_Dream

Client
Регистрация
05.12.2021
Сообщения
330
Благодарностей
28
Баллы
28
Спасибо!
 
  • Спасибо
Реакции: djaga

Valek_333

Client
Регистрация
16.08.2020
Сообщения
14
Благодарностей
4
Баллы
3
Если не использовать библиотеки эмулирующие консольные запросы, то:
Для начала вам нужно подключиться к конкретному устройству через консоль.
После вам нужно получить имя устройства и использовать вот такую команду adb -s {name_device} shell {right_request} // right_request == правильный запрос
Вы же в консоли это делали? Если да, то ниже вы явно разберетесь.) Если нет, обратите внимание на мою подпись. :do:


Важно! Не забыть указать в Using'ах
Посмотреть вложение 91883

Пример запроса в консоль с получением результата в переменную:
string pathAdb = project.Variables["pathAdb"].Value; // путь к adb
Process cmd = new Process();
cmd.StartInfo = new ProcessStartInfo
{
    FileName = "cmd.exe",
    CreateNoWindow = true,
    UseShellExecute = false,
    WindowStyle = ProcessWindowStyle.Normal,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
};
cmd.Start();

cmd.StandardInput.WriteLine($"cd {pathAdb}"); // переход в директорию с adb
Thread.Sleep(200);
cmd.StandardInput.WriteLine(string.Format(@"adb devices")); // запросить список активных устройств

cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
return cmd.StandardOutput.ReadToEnd();


Решение с получением коллекции устройств. Подключение к первому и совершение запроса getprop ro.build.version.sdk в shell андроида. ↓
Получить версию sdk эмулятора через adb shell getprop ro.build.version.sdk:
string pathAdb = project.Variables["pathAdb"].Value; // путь к adb
Process cmd = new Process();
cmd.StartInfo = new ProcessStartInfo
{
    FileName = $"cmd.exe",
    CreateNoWindow = true,
    UseShellExecute = false,
    WindowStyle = ProcessWindowStyle.Normal,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
};
cmd.Start();

//cmd.StandardInput.WriteLine($"cd {pathAdb}"); // переход в директорию с adb // пример нескольких команд
//Thread.Sleep(200);
cmd.StandardInput.WriteLine(string.Format(@"adb devices")); // запросить список активных устройств

cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();

string consoleResponse = cmd.StandardOutput.ReadToEnd().ToString(); // ответ от консоли

MatchCollection matchListDevices = Regex.Matches(consoleResponse, @"(?m)^emulator.+(?=[    ]+(device|offline))"); // получить коллекцию устройств
List<string> listDevices = matchListDevices.Cast<Match>().Select(match => match.Value).ToList();

string device = project.Variables["device"].Value = listDevices[0]; // вывести в переменную первое устройство для наглядности

cmd.Start();

cmd.StandardInput.WriteLine($"adb -s {device} shell getprop ro.build.version.sdk"); // запрос для получения версии sdk

cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();

return consoleResponse = cmd.StandardOutput.ReadToEnd().ToString(); // полный ответ из консоли. Дальше тоже можно очистить геруляркой и работать дальше
Ниже приложил шаблон для наглядности. ↓

Здравствуйте) а не подскажите случаем, реально ли разбить приведенный Вами код на кубики? То есть получили ответ от cmd, обработали его и в зависимости от ответа даем другую, следующую команду) Заранее огромное спасибо)
 
  • Спасибо
Реакции: avlba и djaga

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)