在我的应用程序中,我正在尝试执行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
有任何建议,如何解决?
答案 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 /”,但我不确定该路径是否仍然可用。