У меня есть приложение Unity, которое создает процесс, который пытается отправить команды на устройство Android через оболочку adb. Я могу отправлять команды в течение всего приложения. Но я получаю вывод только с устройства Android в первый раз. Я не знаю, если это проблема с буфером с OutputDataReceived. Входные данные проходят, но я не получаю никаких журналов в моем редакторе Unity. Если я поверну Process.StartInfo.CreateNoWindow в true, я смогу увидеть все выходные данные в оболочке adb, которая появляется вне Unity. Вывод не перенаправляется из этой консоли в Unity после первого выполнения.
public void StartShellProcessAsync ()
{
ShellThread = new Thread(() =>
{
ShellProcess = new Process();
ShellProcess.StartInfo.FileName = "adb.exe";
ShellProcess.StartInfo.Arguments = "shell";
ShellProcess.StartInfo.CreateNoWindow = false;
ShellProcess.StartInfo.UseShellExecute = false;
ShellProcess.StartInfo.RedirectStandardOutput = true;
ShellProcess.StartInfo.RedirectStandardError = true;
ShellProcess.StartInfo.RedirectStandardInput = true;
ShellProcess.EnableRaisingEvents = true;
ShellProcess.OutputDataReceived += new DataReceivedEventHandler(OnOutputDataReceived);
ShellProcess.ErrorDataReceived += new DataReceivedEventHandler(OnErrorDataReceived);
ShellProcess.Exited += new EventHandler(OnProcessExited);
ShellProcess.Start();
ShellProcess.BeginOutputReadLine();
ShellProcess.BeginErrorReadLine();
ShellProcess.WaitForExit();
});
ShellThread.Start();
}
У меня есть кнопки в Unity, которые отправляют команды, как показано ниже:
am start -m <application activity>
am stack list
Я пытаюсь прочитать вывод из am stack list
Это работает, если это первая команда, которую я посылаю. Но если я запускаю его после am start -m <application activity>
, вывод не поступает в Unity.
Причина, по которой я запускаю ShellProcess внутри потока, заключается в том, чтобы процесс оставался открытым в течение всего времени выполнения приложения. Я не хочу создавать новый процесс для каждой команды, отправляемой в Android, так как она отнимает много времени.