기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요 ^^
소켓 관련 리눅스 코드(이 후 부터는 A라고 하겠습니다 ^^;;)를 ndk를 이용하여 컴파일 하여 이를 안드로이드 어플에서 getRuntime().exec()을 이용하여 호출 하고자 합니다.
그런데, A를 adb를 이용하여 안드로이드 상에서 직접 실행 시키면 동작을 잘 하는데, 안드로이드 어플에서 getRuntime().exec()를 이용하여 호출을 하면 동작을 안하네요 ㅡㅡ;;
좀 살펴 봤더니 다음과 같은 문제가 있는것으로 의심이 됩니다.
A는 소켓 관련 프로그램인데, NIC에 바인딩하는 방식이 SO_BINDTODEVICE 옵션입니다.
root권한이 있어야 사용가능한 옵션인데요, 물론 제가 테스트하는 단말은 직접 android를 포팅한 단말이기에 adb를 통하여 단말에 접속한 뒤 콘솔에서 A를 실행 시키면 동작을 잘 하더군요.
그런데... 왜 안드로이드 어플에서 getRuntime().exec()를 통해서 실행만 시키면 SO_BINDTODEVICE 옵션을 줄때 리턴값이 계속 -1로 떨어 지네요. 왜 그런지를 모르겠습니다. ㅡㅡ
안드로이드 어플에서 getRuntime().exec()을 이용하여 데몬 형태의 프로그램을 실행 시키면 이는 VM을 거쳐서 실행되는건지, 아니면 무언가 다른 이유가 있는건지도 모르겠네요... ㅎㅎ
혹시 경험해 보셨거나 조언 주실 수 있는분 부탁 드립니다.
어플이 root로 도는게 아니라 그럴껄요?
안드로이드 앱은 실행하면 app넘버 이렇게 실행권한이 들어갑니다.
adb 로 ps 때려보시면 나와요.
원하는대로 하시려면 라이브러리로 묶거나 Binder 같은거 쓰셔야 할것 같습니다.
아니면 exec 로 실행하려고 하는 파일을 777로 권한을 주셔도 될것 같긴 합니다.