Чтение предварительно скомпилированного двоичного файла c ++ из постоянного пути данных на устройстве android (Unity) - PullRequest
0 голосов
/ 13 апреля 2020

Я работал над игрой в шахматы и использую движок Stock для создания AI для него. Мне удалось заставить его работать на P C, поскольку это было довольно просто.


//Starting the process
string filepath = Application.streamingAssetsPath+ "/" + "stockfish_10_x64.exe";
 mProcess = new Process();
        ProcessStartInfo si = new ProcessStartInfo()
        {
            FileName = filepath,
            UseShellExecute = false,
            CreateNoWindow = true,
            RedirectStandardError = true,
            RedirectStandardInput = true,
            RedirectStandardOutput = true
        };
        mProcess.StartInfo = si;
        mProcess.OutputDataReceived += new DataReceivedEventHandler(MProcess_OutputDataReceived);
        mProcess.Start();
        mProcess.BeginErrorReadLine();
        mProcess.BeginOutputReadLine();

        SendLine("uci");
        SendLine("isready");

Это в основном запускает процесс для данного файла (в данном случае stockfish_10_x64.exe). Я могу легко отправлять данные и получать от них данные.

Это работает безупречно. Теперь я хочу просто запустить его на Android. Я использую скомпилированный двоичный файл Stockfi sh для Android (https://stockfishchess.org/download/). Мне удалось извлечь его из сборки приложения Unity и скопировать этот двоичный файл в его постоянное местоположение.

   string filepath = Application.persistentDataPath + "/" + "stockfish-10-armv7";
        Debug.Log(filepath);
        if (!File.Exists(filepath))
        {
            WWW executable = new WWW("jar:file://" + Application.dataPath + "!/assets/" + "stockfish-10-armv7");
            while (!executable.isDone)
            {
            }
            File.WriteAllBytes(filepath, executable.bytes); 
        }

Нет потери данных. Я проверил количество переданных байтов и сравнение окончательного размера исходного файла и файла результатов.

Теперь проблема в этом. Как запустить файл из скрипта Unity c#? Я просто не могу прочитать и написать файл. Насколько я знаю, нам нужно отправить ввод в файл движка, и он вернет мне лучший ход в качестве вывода. да, мне нужны разрешения на чтение и запись. Я делаю это, давая разрешение с помощью chmod

  var plugin = new AndroidJavaClass("com.chessbattles.jeyasurya.consoleplugin.AndroidConsole");
            string command = "chmod 777 "+filepath;
            outPut = plugin.CallStatic<string>("ExecuteCommand",command);

Я действительно не уверен, что это правильный способ сделать это.

Ну, тогда я просто использую mProcess (созданный выше) для отправки ввода. Но это не похоже на работу. Что я делаю неправильно? Предложение было бы здорово.

...