2014-10-30 129 views
4

在我的應用程序中,我試圖執行存在於我的SD卡上的本機代碼。如何使用Runtime.getRuntime()。exec(「cmd」)

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

沒有'shell'可執行文件。你爲什麼試圖運行它? – 2014-10-30 22:22:55

回答

2

首先,您應該將調用exec包裝在try-catch-clause中以捕獲IOException。

其次,使用exec(java.lang.String[])執行帶參數的命令。例如,類似於

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

Android系統中的sdcard通常被禁止執行。因此,即使正確執行chmod命令,它也會失敗。

您可以輕鬆地測試。通過USB(adb shell)啓動shell並執行chmod命令。它會失敗並顯示錯誤消息,如「錯誤模式」。

因此,您必須將文件複製到您有寫入權限的其他位置,然後在該副本上設置可執行位。您可以嘗試將該文件複製到「/ data/local/tmp /」,但我不確定該路徑是否仍然可用。

+2

是否有任何方法可以複製具有現成可執行權限的文件?另外我該如何執行該文件。 – 2014-10-31 05:21:35

+0

通過runtime.exec(..)使用命令「cp」。 – Robert 2014-10-31 09:21:32

相關問題