繁体   English   中英

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

[英]How can I run executable in assets?

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

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

谢谢。

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

这是我的答案

将copyAssets()放到mainactivity中。

某人的代码:

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,正确的文件长度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM