안드로이드 개발 질문/답변
(글 수 45,052)
A라는 root uid로 돌아가는 daemon을 앱에서 죽였다가 특정 intent를 받으면 다시 실행시키는 서비스를 개발하고 있는데, 이게 죽지를 않습니다.
간략화한 소스인데, 현재 load()에서 root_daemon을 args와 함께 호출하는 건 되는 것으로 보이는데, android.os.Process.killProcess(Integer.parseInt(i.pid));랑, Runtime.getRuntime().exec(kill);이거 두개다 작동을 안 하네요. 이유가 뭔가요?
지금 adb가 먹지 않아서 stderr을 못보네요 ㅠㅠ
/home/sephiron/a.javasource
onCreate() { super.onCreate(); try { Runtime.getRuntime().exec("su"); } catch (Exception err) { err.printStackTrace(); } } public void unload() { // TODO add some exception try { String kill = new String("kill -9 "); kill += pid; android.os.Process.killProcess(Integer.parseInt(i.pid)); // 이거랑 Runtime.getRuntime().exec(kill); // 이거 } catch (Exception err) { err.printStackTrace(); this.stopSelf(); } } public void load() { try { String cmd = "root_daemon" + args; Runtime.getRuntime().exec(cmd); } catch (Exception err) { err.printStackTrace(); } }
간략화한 소스인데, 현재 load()에서 root_daemon을 args와 함께 호출하는 건 되는 것으로 보이는데, android.os.Process.killProcess(Integer.parseInt(i.pid));랑, Runtime.getRuntime().exec(kill);이거 두개다 작동을 안 하네요. 이유가 뭔가요?
지금 adb가 먹지 않아서 stderr을 못보네요 ㅠㅠ
2010.10.07 19:42:15
해결해서 답글 답니다. 당연히 루팅폰이어야 하고, 이 소스는 아예 잘못된 소스입니다. exec는 프로세스를 fork하기 때문 부모 프로세스인 앱에서는 루트 권한을 얻을 수 없습니다.
해결책은 http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/ 입니다.