Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ExecuteRemoteCommand bugged?! #110

Open
SaymanNsk opened this issue Aug 27, 2024 · 5 comments
Open

ExecuteRemoteCommand bugged?! #110

SaymanNsk opened this issue Aug 27, 2024 · 5 comments
Labels
bug Something isn't working

Comments

@SaymanNsk
Copy link

Describe the bug

Эмулятор LDPlayer 9 крайней сборки с сайта авторов.
Пытаюсь накидать автоматизацию. В процессе прикручиваю redsocks2. Там нужно "крутить" iptables.
adb.adbClient.ExecuteRemoteCommand("echo -n > /data/local/tmp/rs/iptables.rules", adb.deviceData);
не отрабатывает. Если добавить аргумент на receiver или Encoding, тогда срабатывает. Но, не всегда требуется "грабить" вывод. Тут он точно не требуется. В результате, файл не обнуляется.

Steps to reproduce the bug

Шаги простые - выполнить ExecuteRemoteCommand с единственным аргументом DeviceData.

Expected behavior

По всей видимости, команда должна отработать без возвращения куда-либо вывод с консоли.

Screenshots

No response

NuGet package version

3.3.13

.NET Platform

.NET Framework 4.8.x

Platform type

Windows

System version

Microsoft Windows [Version 10.0.19045.4780]

IDE

Visual Studio 2022

Additional context

No response

@SaymanNsk SaymanNsk added the bug Something isn't working label Aug 27, 2024
@SaymanNsk
Copy link
Author

SaymanNsk commented Aug 27, 2024

Команда не отработала с аргументом Encoding.ASCII.
adb.adbClient.ExecuteRemoteCommand("echo -n > /data/local/tmp/rs/iptables.rules", adb.deviceData, Encoding.ASCII);
при этом:
adb -s emulator-5554 shell "echo -n > /data/local/tmp/rs/iptables.rules" - отработала нормально.

@SaymanNsk
Copy link
Author

var tmp = ldplayer.Adb.adbClient.ExecuteRemoteCommand("echo -n > /data/local/tmp/rs/iptables.rules", ldplayer.Adb.deviceData, Encoding.ASCII);

string result = string.Join("\n", tmp);

и вот тогда отработала команда.

@wherewhere
Copy link
Member

@yungd1plomat

@SaymanNsk
Copy link
Author

Не уверен, как и почему, но deviceClient.StartApp(packageName) и deviceClient.StopApp(packageName) тоже не работают. просто ничего не выполняется.

@SaymanNsk
Copy link
Author

SaymanNsk commented Sep 4, 2024

Нашёл причину не срабатывания команд. Разработчики, возьмите на заметку: метод Connect цепляется к Offline девайсу, у которого transport_id меняется, когда State меняется на Online. От сюда и проблема.

I found the reason of not triggering commands. Developers, take note: Connect method connects to Offline device, which transport_id changes when State changes to Online. That's where the problem comes from.

закастылил:

adbClient.Connect($"emulator-{port}");

var timeout = 10;
var res = 1;
do
{
	deviceData = adbClient.GetDevices().FirstOrDefault(p => p.Serial.Contains($"emulator-{port}"));
	if (deviceData.State == DeviceState.Online)
	{
		res = 0;
		break;
	}
	Task.Delay(1000).Wait();

} while (timeout-- != 0);

if (res != 0) throw new Exception($"Device emulator-{port} offline!");
deviceClient = new DeviceClient(adbClient, deviceData);

в итоге и это тоже не помогло. придётся карячить Appium...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants