안드로이드 개발 질문/답변
(글 수 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/ 입니다.



