본문 바로가기

android/Process

[ Android ] 코드 내에서 외부 명령어 실행하기

반응형

Android 앱 개발에서 Java를 사용하여 콘솔 명령을 실행하는 방법을 알아보겠습니다. 이 작업은 주로 Runtime 클래스와 Process 클래스를 사용하여 수행됩니다. 다음은 콘솔 명령을 실행하는 일반적인 방법입니다:

  1. Runtime.getRuntime().exec() 사용:
    Runtime.getRuntime().exec() 메서드를 사용하여 명령을 실행할 수 있습니다. 실행된 명령은 Process 객체로 반환됩니다.
  2. Process 객체로부터 입력 및 출력 스트림을 읽기:
    Process 객체로부터 표준 출력 및 표준 오류 스트림을 읽어 명령 실행 결과를 확인할 수 있습니다.

다음은 간단한 예제 코드입니다:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ConsoleCommandExample {
    public static void main(String[] args) {
        try {
            // 실행할 명령
            String command = "ls -l";

            // 명령 실행
            Process process = Runtime.getRuntime().exec(command);

            // 명령의 표준 출력 읽기
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 명령의 표준 오류 읽기
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            while ((line = errorReader.readLine()) != null) {
                System.err.println(line);
            }

            // 프로세스 종료 상태 확인
            int exitCode = process.waitFor();
            System.out.println("Exit Code: " + exitCode);

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

이 예제에서는 ls -l 명령을 실행하고, 명령의 표준 출력 및 표준 오류를 읽어서 콘솔에 출력합니다. 중요한 점은 Runtime.getRuntime().exec() 메서드를 사용할 때 전체 명령을 하나의 문자열로 전달하는 것입니다. 만약 여러 인수를 사용하는 명령을 실행하려면 문자열 배열을 사용할 수도 있습니다.

또한, Process.waitFor() 메서드를 사용하여 프로세스가 종료될 때까지 기다릴 수 있습니다. 이렇게 하면 명령이 완료된 후 종료 코드를 확인할 수 있습니다.

주의 사항:

  • Android에서는 특정 명령의 실행이 제한될 수 있습니다. 루트 권한이 필요한 명령은 일반적인 앱 환경에서 실행되지 않을 수 있습니다.
  • 명령 실행 결과를 처리할 때 적절한 예외 처리를 통해 오류 상황을 관리해야 합니다.

이 예제를 기반으로 필요에 맞게 명령과 입출력 처리를 조정하여 사용할 수 있습니다.

반응형