2014-10-30 6 views
4

내 응용 프로그램에서 내 SD 카드에있는 네이티브 코드를 실행하려고합니다.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 

어떤 제안을 어떻게이 문제를 해결하기 위해 :

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)으로 실행, 그것은 오류가 발생합니다?

+0

'shell'실행 파일이 없습니다. 왜 너는 그것을 달구려고 노력하고 있니? –

답변

2

우선, try-catch 절에서 exec에 대한 호출을 감싸서 IOException을 잡아야합니다.

두 번째로 exec(java.lang.String[])을 사용하여 매개 변수가있는 명령을 실행하십시오. 예를 들어,

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

Android 시스템의 sdcard는 일반적으로 실행이 불가능합니다. 따라서 chmod 명령을 올바르게 실행하더라도 실패합니다.

쉽게 테스트 할 수 있습니다. USB (adb 쉘)를 통해 쉘을 시작하고 chmod 명령을 실행하십시오. "잘못된 모드"와 같은 오류 메시지와 함께 실패합니다.

따라서 쓰기 권한이있는 다른 위치로 파일을 복사 한 다음 해당 복사본의 실행 가능 비트를 설정해야합니다. 예를 들어 파일을 "/ data/local/tmp /"에 복사 할 수는 있지만 그 경로가 여전히 사용 가능한지 확실하지 않습니다.

+2

준비된 실행 권한으로 파일을 복사하는 방법이 있습니까? 또한 어떻게 파일을 실행할 수 있습니다. –

+0

runtime.exec (..)를 통해 "cp"명령을 사용하십시오. – Robert

관련 문제