Android에서 셸 명령 실행: 실행 문제 해결
"screenrecord --time-limit 10 /sdcard 명령을 실행하려고 할 때 Runtime.getRuntime().exec()를 사용하여 Java 응용 프로그램에서 /MyVideo.mp4"를 실행하면 결과 비디오 파일이 실패합니다. 생성됩니다. 이는 애플리케이션 에뮬레이터 터미널에서 실행할 때 명령이 성공적으로 작동함에도 불구하고 발생합니다.
이 문제의 근본 원인은 Java에서 있는 그대로 명령을 실행하면 현재 사용자 ID(UID)가 명령에 할당된다는 사실에 있습니다. , su 명령으로 부여된 상승된 권한을 사용하는 대신. 결과적으로 파일이 생성되지 않습니다.
해결 방법: 하위 프로세스 I/O 리디렉션
이 문제를 해결하려면 표준 입력을 리디렉션해야 합니다. 실행할 명령에 su 프로세스를 추가합니다. 이렇게 하면 의도된 상승된 권한으로 명령이 실행됩니다.
다음은 이 솔루션을 구현하는 수정된 코드 조각입니다.
try { Process su = Runtime.getRuntime().exec("su"); DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); outputStream.writeBytes("screenrecord --time-limit 10 /sdcard/MyVideo.mp4\n"); outputStream.flush(); outputStream.writeBytes("exit\n"); outputStream.flush(); su.waitFor(); } catch (IOException e) { throw new Exception(e); } catch (InterruptedException e) { throw new Exception(e); }
표준 입력 스트림을 리디렉션하여 "screenrecord" 명령 su 프로세스에서 부여한 상승된 권한으로 효과적으로 실행되어 파일이 성공적으로 생성됩니다.
위 내용은 Java에서 'screenrecord'를 실행하면 비디오 파일이 생성되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!