Выполнить файл с устройства Android программно - PullRequest
0 голосов
/ 22 ноября 2018

Я закончил свое приложение Chess UI и теперь хочу загрузить шахматный движок, чтобы проверить, действительно ли мой UI-интерфейс совместим с UCI.Шахматный движок находится в папке Download устройства Android ('/ storage / emulated / 0 / Download').Это код, который запускается:

try {
        File f  = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        String path = f.getAbsolutePath();
        String stockfishPath = path + "/Stockfish-9-armv64v8";
        engineProcess = Runtime.getRuntime().exec(stockfishPath);
        processReader = new BufferedReader(new InputStreamReader(
                engineProcess.getInputStream()));

        String sCurrentLine;

        ArrayList<String> output = new ArrayList<>();
        while ((sCurrentLine = processReader.readLine()) != null) {
            output.add(sCurrentLine);
        }

        processWriter = new OutputStreamWriter(
                engineProcess.getOutputStream());
    } catch (Exception e) {
        e.printStackTrace();
    }

Когда я запускаю его, происходит сбой в методе exec (), потому что он утверждает, что не может найти файл, даже если файл существует на устройстве Android.Я попытался запустить команду "ls" в методе exec (), но папка внутри "emulated" пуста.Очевидная причина этого, вероятно, заключается в том, что у меня нет разрешения на просмотр / доступ к этим файлам, но мне нужно знать, как я могу это сделать (несмотря на добавление READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE в файле манифеста).

Естьвозможно ли встраивать движок где-нибудь в проект (в ресурсы?) и каким-то образом adb-shell в это?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы не можете этого сделать, просто потому, что SD-карта монтируется с флагом -noexec.

с использованием внутренней памяти с chmod +x будет единственной доступной опцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...