마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

runtime.exec 명령어 실행 질문

0 추천

strace라는 디버깅 툴을 실제 기기 안에서 사용하려고 합니다.

몇 번의 삽질 끝에 adb shell 상에서는 명령어가 잘 먹히고, 결과값 또한 잘 나옵니다.

하지만 어플리케이션에서 명령어를 실행하면, runtime.exec(cmd) 부분에서 예외처리됩니다.

기기는 루팅한 상태입니다. strace -p <pid> 외에 다른 명령어( ex) ls )는 잘 되는데.. 뭐가 문제인지 잘 모르겠네요.. 

아래는 코드 일부입니다.

 

bt_getlog.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        try {
            Runtime runtime = Runtime.getRuntime();
            Process process;
            int id= android.os.Process.myPid();
            String cmd = "strace -p " + id;

            process = runtime.exec(cmd);

            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuffer log = new StringBuffer();

            int length;
            char[] buffer = new char[4096];

            while((length = br.read(buffer)) > 0){
                log.append(buffer, 0, length);
            }
            tv_getlog.setText(log.toString());
보이저 (1,160 포인트) 님이 2016년 1월 19일 질문

1개의 답변

+1 추천
1. 위 코드를 실행하는 앱에 대해 strace를 실행하는 거라면 제대로 안 될 수도 있습니다.

2. adb shell은 일반 앱보다 좀 더 많은 권한을 가지고 실행됩니다. 루트 권한을 얻은 후 strace를 실행해 보세요.
익명사용자 님이 2016년 1월 19일 답변
말씀하신대로 위 코드를 실행하는 앱이 strace를 실행하는거라 루트권한을 얻은 후 진행해봤지만 안되네요.  아마 권한의 문제도 있겠지만, 실시간으로 뭔가 추적하는 명령어라서 문제가 생기는 것 같습니다. 아무튼 adb가 더 많은 권한을 가지고 실행된다는건 처음 알았네요. 감사합니다.
...