루트권한을 얻었는지 확인하기 위해 http://itouch.tistory.com/41 이 글을 참고하여

테스트를 해보았습니다. 아래는 관련코드입니다.

Process p;

try {
// Preform su to get root privledges
p = Runtime.getRuntime().exec("su");
// Attempt to write a file to a root-only
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("echo \"Do I have root?\" >/system/sd/temporary.txt\n");
// Close the terminal
os.writeBytes("exit\n");
os.flush();
try {
p.waitFor();
if (p.exitValue() != 255) {
// TODO Code to run on success
toastMessage("root");
}
else {
// TODO Code to run on unsuccessful
toastMessage("not root");
}
} catch (InterruptedException e) {
// TODO Code to run in interrupted exception
toastMessage("not root");
}
} catch (IOException e) {
// TODO Code to run in input/output exception
toastMessage("not root");
}

 

 

위 코드는 exitvalue 가 255(-1)이 아닐때만 "root" 성공으로 판단하게 되어 있습니다.

 

그래서 테스트를 해보았는데

처음 실행을 하면 루트권한을 허용할찌 여부를 묻는 다이얼로그 (superuser.apk)가 뜨게됩니다.

그리고 다이얼로그 부분에서 거부를 선택하게 되면 루트권한을 얻지 못하게됩니다.

그런데 이때 exitvalue값을 체크해보니 1이란 값이 나옵니다. 그러니 당연히 root가 성공적으로 되었다고 메세지는 나오게됩니다.

루트권한을 획득한 경우 exitvalue값은 0이었습니다.

 

그래서 저는 0인경우에만 성공으로 두면 될것 같다는 생각을 했습니다.

 

그리고 추가테스트를 해보았습니다.

 루트권한을 얻은 후 "am start -n 패키지명/.액티비티명" 으로 특정패키지 실행명령을 내리게 되면 정상적으로 실행이 됩니다.

그런데 이때 exitvalue값을 체크해봤더니 0이아니고 1이란 값이었습니다.

 

처음에는 0이 정상인줄 알고 0이 아니면 모두 오류로 처리하려고 했는데,...

테스트 해보니 1일때도 정상실행이 되어서 감을 잡을 수가 없습니다. 이부분을 어떻게 처리해야 하나요? 조언좀 부탁드립니다^^