에뮬레이터도 루팅을 해야 /data/ 폴더에 접근이 가능하까요?
사용자의 폰이 루팅이 된건지 확인하려는 작업을 하고 있습니다.
두가지 방법이 떠올랐는데
1.APP상에서 SU,ID의 명령어로 반환된 값을 통해 확인한다
adb shell 에서는 su 명령어가 먹히고 id를 치면 uid=0(root) gid=0(root) 값이 나오길래
오전에 질문글에 대한 답변을 참고로 해서
Process process = Runtime.getRuntime().exec("id");
InputStream in = process.getInputStream();
사용해 봤더니 adb shell에서와는 다르게
uid=10030(app_30) gid=10030(app_30) groups=1015(sdcard_rw)
을 반환해 줬습니다.
Runtime.getRuntime().exec("su"); 를 넣으면 null 처리 되는 것 같습니다.
2. /data/app 목록을 불러오게 해서 불러오면 루팅 폰 이다.
http://www.androidpub.com/420002 위 주소의 달린 답글을 보니 해당 소스는 루팅폰이나
에뮬레이터에서는 실행이 된다고 했는데 에뮬레이터에서도 java.lang.NullPointerException 으로 에러가 났습니다.
에뮬레이터도 따로 루팅(?)을 해야 테스트가 가능할까요?
위 링크의 소스를 컴파일한 apk를 첨부파일로 올렸습니다. 앱 제목은 파일리스트로체크 라고 해놨는데 혹시
루팅한 폰을 가지고 계신분이 있다면 이 apk를 설치, 실행해보시고 정상작동을 하는지 뻑나는지 알려주시면 감사하겠습니다.
자답입니다 해외 블로그에 관련 소스가 있네요
Runtime.getRuntime().exec 별도의 native process를 만드는 명령어라 첨부해서 움직였어야 했네요
http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/
참고 사이트입니다 루팅폰에서는 실험 안해봤는데 에뮬에서는 root 순정 폰에서는 not root 라고 뜨네요
에뮬레이터는 adb shell로 접속한 후 id치면 root로 나옵니다. 즉 쉘은 root 권한인 상태이죠. 그러나 어플리케이션은 설치시 app_xx 권한을 자동으로 가지게 됩니다. 에뮬레이터라도 su를 사용할 수 있게 해야 root권한을 가지겠죠. 그러므로 루팅된 폰의 상태를 검사하시려면, su명령어의 성공여부로 판단하면 되지 않을까요?