2010-05-11 4 views
3

Dalvik VM에서 실행되는 응용 프로그램 (서비스)에서 프로그래밍 방식으로 전화를 다시 시작할 수 있습니까?Android SDK 또는 NDK로 전화를 다시 시작할 수 있습니까?

SDK가이 기능을 제공하지 않으면 NDK를 사용하고 커널이 제공하는 일부 기능을 호출하는 방법은 무엇입니까? 나는이 옵션이 선호되지 않는다는 것을 안다. (안정적인 라이브러리가 아니다.) 유일한 옵션이라면, 그것도 고려해야 할 것이다.

+0

을 필요로 API 레벨부터 가능하며, 편집은 무엇입니까? 나는 (주요) 수정 사항을 보지 못했다. – kaskelotti

+0

그는 android 태그를 추가했습니다. "edited ... ago"링크를 클릭하면 표시됩니다. – David

+0

감사합니다. 차이점을 보여주기 위해 해당 기능을 찾고있었습니다. 태그는 좋다 :) – kaskelotti

답변

3

바라지는 않지만. :-)

마음대로 휴대 전화를 다시 시작할 수 있다면 악의적 인 앱이 임의로 간격을두고 조용히 수행하여 불행한 삶을 살 수 있습니다.

Android는 Java 언어 샌드 박스가 아닌 보안을 위해 프로세스 경계와 Linux 액세스 권한을 사용하기 때문에 NDK는 여기에 추가 기능을 제공하지 않습니다.

왜이 작업을 수행 하시겠습니까? 어쩌면 당신이 한 일을 성취 할 다른 방법이 있을지 모릅니다.

+0

답장을 보내 주셔서 감사합니다. 전화를 재부팅해야 할 필요가 있거나 정확한 요구 사항입니다. 내가 일하고있는 응용 프로그램은 전화 응용 프로그램을 테스트하기위한 것입니다. 재부팅은 모든 리소스를 해제하기 위해 테스트가 완료된 후에 실행됩니다. 또 다른 가능성은 특정 Dalvik VM을 죽이는 것이지만, 릴리스 프로세스로서 충분한 지 여부와 전체 재부트보다 구현하기가 더 쉬운 지 여부는 알 수 없습니다. – kaskelotti

+0

프로세스가 쉽게 * 스스로를 죽일 수 있습니다. 관련 응용 프로그램을 제어하는 ​​경우 "죽습니다"메시지를 받아 들여 System.exit()을 호출하면됩니다. 다른 프로세스를 죽이는 것은 동일한 사용자 ID를 가지고있는 경우에만 가능하며, 동일한 개발자가 빌드하고 서명 한 경우에만 해당됩니다. – fadden

+0

감사합니다. 이 "die"메시지를 인 텐트 나 다른 고수준의 수단으로 보내거나, 커널에서 사용 가능한 신호를 보내는 것으로 의미합니까? 사용자 ID는 무엇을 의미합니까? 셸의 'ps'명령은 프로세스를 시작한 사용자를 제공합니다. 더 높은 수준의 사용자 ID가 있습니까? – kaskelotti

1

리눅스에서 NDK/JNI 경로를 사용하여 장난을 치는 올바른 시스템 호출이 발견되어 결국이 함수를 호출 할 수있었습니다. 그 결과, 수퍼 유저 권한이 필요했습니다. 나는 이것이 사실 일 것이라고 추측했다.

이 문제를 극복하기위한 방법이 있습니까? 전화를 뿌리는 것 말고, 나는 아직도 피하려고 노력하고있다.

adb를 사용하여 전화를 다시 부팅 할 수 있습니다. ddmd 또는 다른 데몬과 통신하는 것 같아요. 그래서 어떻게 든 동일한 기능을 사용할 수 있습니까?

+0

시스템 호출이란 무엇입니까? – Reno

+0

나는이 모든 주제를 이미 잊어 버렸습니다. http://developer.android.com/reference/android/os/PowerManager.html#reboot%28java.lang.String%29가 기기를 재부팅하는 데 더 적합하다고 생각합니다. 비록 그것을 테스트하지 않았습니다. 시스템 호출의 경우 정확히 sys_reboot를 호출 할 수 없습니다. 필자는 안드로이드 1.6으로 테스트 한 것 같지만, 안드로이드 커널/API는 꽤 발전되어 왔으며, 그러한 시스템 호출은 더 이상 사용 가능하지 않을 수도 있습니다. – kaskelotti

+0

사실, 이들 중 어느 것도 GB 또는 ICS에서 작동하지 않는 것으로 보이며, 무엇이라도 찾으면 답변을 게시 할 것입니다. 사용 된 시스템 호출을 기억한다면 알려주십시오. 감사. – Reno

3
+0

+1 Androik SDK가 진화 중임을 알았습니다. (그리고이 스레드는 여전히 업데이트를받습니다.) 문제 도메인이 더 이상 동일하지 않기 때문에 이것을 정답으로 받아 들일 수는 없습니다. 공유를 통해 새로운 기기에 대한 훌륭한 업데이트로 투표를받습니다. – kaskelotti

관련 문제