以编程方式从Android设备执行文件

时间:2018-11-21 23:38:57

标签: java android file

我已经完成了Chess UI应用程序,现在想加载一个Chess引擎来测试我的UI是否真的与UCI兼容。国际象棋引擎位于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设备上也是如此。我尝试在exec()方法上运行“ ls”命令,但“模拟”中的文件夹为空。显而易见的原因可能是因为我没有查看/访问这些文件的权限,但是我需要知道我该怎么做(尽管在清单文件中添加了READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE)。

是否有可能将引擎嵌入到项目中的某个位置(在资源中?),并以某种方式将adb-shell嵌入其中?

1 个答案:

答案 0 :(得分:0)

仅通过使用-noexec标志装入SD卡,就不能这样做。

将内部存储器与chmod +x一起使用将是唯一可用的选项。