如何使用Runtime.getRuntime()。exec(" cmd")

时间:2014-10-30 21:26:40

标签: android java-native-interface adb

在我的应用程序中,我正在尝试执行SD卡上的本机代码。

File sdCard = getExternalFilesDir(null); // directory where native file is placed
String nativeFile = "nativeFile";

String cmd = "shell /system/bin/chmod 0777 " + sdCard.getAbsolutePath() + "/" + nativeFile;
Process proc = Runtime.getRuntime().exec(cmd);

但是只要执行Runtime.getRuntime().exec(cmd),就会抛出错误:

java.io.IOException: Error running exec(). Command: [shell, /system/bin/chmod, 0777, /storage/emulated/0/Android/data/com.example.andridutilproject/files/native] Working Directory: null Environment: null

有任何建议,如何解决?

2 个答案:

答案 0 :(得分:3)

首先,您应该在try-catch子句中包含对exec的调用以捕获IOExceptions。

其次,使用exec(java.lang.String[])执行带参数的命令。例如,类似于

Runtime.getRuntime().exec(new String[]{ "shell", "/system/bin/chmod", "0777", sdCard.getAbsolutePath() + "/" + nativeFile });

答案 1 :(得分:2)

Android系统中的SD卡通常会被禁用以执行。因此,即使您正确执行chmod命令,它也会失败。

您可以轻松测试。通过USB(adb shell)启动shell并执行chmod命令。它将失败并显示错误消息,如“错误模式”。

因此,您必须将文件复制到您具有写入权限的其他位置,然后在该副本上设置可执行位。您可以尝试将文件复制到“/ data / local / tmp /”,但我不确定该路径是否仍然可用。