如何在资产中运行可执行文件?

时间:2015-07-09 22:18:09

标签: java android

如何将可执行文件添加到资源中并在Android中运行并显示输出?

我有一个可行的可执行文件。我假设代码中需要有一些chmod

谢谢。

2 个答案:

答案 0 :(得分:2)

将您的可执行文件放在原始文件夹中,然后像使用ProcessBuilder或Runtime.exec一样运行它http://gimite.net/en/index.php?Run%20native%20executable%20in%20Android%20App

答案 1 :(得分:2)

这是我的回答

将copyAssets()放入主要活动中。

某人的代码:

private void copyAssets() {
    AssetManager assetManager = getAssets();
    String[] files = null;
    try {
        files = assetManager.list("");
    } catch (IOException e) {
        Log.e("tag", "Failed to get asset file list.", e);
    }
    for(String filename : files) {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = assetManager.open(filename);
            File outFile = new File(getFilesDir(), filename);
            out = new FileOutputStream(outFile);
            copyFile(in, out);

        } catch(IOException e) {
            Log.e("tag", "Failed to copy asset file: " + filename, e);
        }
        finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    // NOOP
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    // NOOP
                }
            }
        }
    }
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1) {
        out.write(buffer, 0, read);
    }
}

此处还有运行命令的代码

public String runcmd(String cmd){
    try {
        Process p = Runtime.getRuntime().exec(cmd);

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
int read;
char[] buffer = new char[4096];
        StringBuffer out = new StringBuffer();
        while ((read = in.read(buffer)) > 0) {
            out.append(buffer, 0, read);
        }
        in.close();
        p.waitFor();

        return out.substring(0);

    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
}

您可能需要将其更改为

String prog=  "programname";
String[] env= { "parameter 1","p2"};
File dir=  new File(getFilesDir().getAbsolutePath());
Process p = Runtime.getRuntime().exec(prog,env,dir);

确保正确的参数处理

也将此添加到您的主代码中 检查文件的正确复制

String s;
File file4 = new File(getFilesDir().getAbsolutePath()+"/executable");
file4.setExecutable(true);
s+=file4.getName();
s+=file4.exists();
s+=file4.canExecute();
s+=file4.length();
//output s however you want it

应该写:filename,true,true,正确的文件长度。