2011-10-24 3 views
11

서버 소켓 포트 24에 바인딩하려는 안드로이드 서비스가 있습니다. 권한이있는 포트이므로 바인드 예외로 인해 실패하고 있습니다. 이 작업을 수행하기 위해 내가해야 할 일이 궁금합니다. 이 포럼에서이 질문을 여러 번 보았지만 해결 방법은 없습니다.안드로이드에서 1024 미만의 포트에 바인딩하는 방법은 무엇입니까?

이 서비스는 Android에서 실행되는 장치에서 실행됩니다. 우리는 장치에 대한 안드로이드 플랫폼을 구축합니다. 우리에게는 필요한 모든 통제력이 있습니다.

+1

루트로서 실행되는 프로세스 만 포트 24에서 수신 대기 할 수 있습니다. Java 응용 프로그램을 루트로 실행할 수 있습니까? –

+0

동의. 프로세스는 루트 권한으로 실행되거나, 관리자 권한을 가진 사용자 ID로 실행되어야합니다 (Android가 Linux 개념을 지원하는지 확실하지 않음). 일반적으로 장치를 제어하는 ​​경우 Java에서는 데몬을 작성하지 않고 C/C++에서는 데몬을 작성하고 일반 Linux 데몬 지원을 사용하여 데몬을 시작합니다. – CommonsWare

+1

"su ..."권한 상승 방법은 포트에 바인딩하는 옵션이 아닙니다. 쉘 스크립트를 생성하려고하지 않습니다. 모든 안드로이드 애플 리케이션은 기본적으로 접합기에서 분기 된 프로세스이므로, 접합자가 SOMETHING을 기반으로 권한을 높이 지 않으면 바인드 할 수 없습니다. Zygote가 허용하는지 여부는 궁금합니다. 만약 그렇다면, 그게 뭐야? – videoguy

답변

0

는 포트 1024 미만에 바인딩, 당신은 뿌리를해야하고 그 일을 두 가지 방법이있다.

  1. 시스템 응용 프로그램 :이 앱은 시스템 /에 설치되어야한다 /이 루트로 실행되어야 곳에서 폴더를 애플 리케이션. 그러나 도움이 필요한 경우에는 서명 문제가 있습니다 (available). 배포 또한 시스템 앱의 문제입니다.

  2. su 이진수 : su 이진수는 간단한 exec("su -c [command]")을 사용하여 호출 할 수 있습니다. 그러나 일은 말하기가 쉽지 않습니다. 하나의 명령 만이 아니라 Android 프로세스를 실행해야합니다. 따라서 방법을 제공하는 libsuperuser이 있으며 전체 길이는 doc page입니다.

관련 문제