Ubuntu에서 AVD를 일반계정으로 실행하면 멈추는 문제로 3일재 골머리 앓습니다.
우선, 저는 리눅스와 안드로이드 개발 둘 다에 초보자입니다. 이번에 처음 깔아봤네요.
일단, Ubuntu 11.04를 VirtualBox에 깔고,
source.android.com의 가이드 처럼 Andoid SDK와 이클립스를 설정했습니다.
Hello World 프로젝트 만들고 AVD로 돌려보려는데, AVD가 실행 되다가 멈추네요.
근데 sudo로 실행하면 또 실행 됩니다.
근데 깔려있는 이클립스를 sudo로 실행 해 보니, 플러그인이고 뭐고 없어서 그렇게 쓸 수도 없는듯 하고....
그래서 어떻게든 해결해 보려고, 분석방법을 알아보고
strace나 ltrace로 로그도 만들어 보고, AVD도 -debug 옵션줘서 실행도 해 봤습니다.
그걸로 내린 결론은, 우분투가 AVD의 소켓활동을 차단하고 있는게 아닐까 싶은데, 해결책을 알 수가 없네요.
strace의 결과를 간추려 보면,
...
socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_FILE, path=@"/tmp/.X11-unix/X0"}, 20) = 0
getpeername(3, {sa_family=AF_FILE, path=@"/tmp/.X11-unix/X0"}, [20]) = 0
getsockname(3, {sa_family=AF_FILE, NULL}, [2]) = 0
fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}])
writev(3, [{"l\0\v\0\0\0\22\0\20\0\0\0", 12}, {"", 0}, {"MIT-MAGIC-COOKIE-1", 18}, {"\0\0", 2}, {"__\256S\353\276b\361\345\26AA\356\330RA", 16}, {"", 0}], 6) = 48
read(3, 0x9d29d38, 8) = -1 EAGAIN (Resource temporarily unavailable)
...
...
...
poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN}])
read(3, "\1\0p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096) = 32
read(3, 0x9d2a770, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(3, 0x9d2a770, 4096) = -1 EAGAIN (Resource temporarily unavailable)
...
...
이렇게 무한루프를 돌던데, 저 소켓에서 읽을 수 없다는 내용이 아닐까 싶습니다.
그리고 ltrace결과에서
.....
[pid 2449] [0xbadd41] SYS_265(1, 0x7fe1a148, 0xbb1ff4, 0x7fe1a178, 0) = 0
[pid 2449] [0xb35416] SYS_socketcall(17, 0x7fe1a010, 0x2dbff4, 0, 0x7fe1a12f) = 20
[pid 2449] [0xbadd41] SYS_265(1, 0x7fe19ee8, 0xbb1ff4, 0x7fe19f18, 0) = 0
[pid 2449] [0xbadd41] SYS_265(1, 0x7fe1a148, 0xbb1ff4, 0x7fe1a178, 0) = 0
[pid 2449] [0xb35416] SYS_poll(0x08fd9be0, 2, 507) = 1
[pid 2449] [0xbadd41] SYS_265(1, 0x7fe1a148, 0xbb1ff4, 0x7fe1a178, 0) = 0
[pid 2449] [0xb35416] SYS_socketcall(17, 0x7fe1a010, 0x2dbff4, 0, 0x7fe1a12f) = 1792
[pid 2449] [0xbadd41] SYS_265(1, 0x7fe1a148, 0xbb1ff4, 0x7fe1a178, 0) = 0
......
이 부분에서 무한루프 돌면서 멈추어 있네요.
루트권한으로 실행하면 되는걸로 봐선, 뭐가 안깔려 있거나 해서 실행 불능인건 아닌듯 하고,
/tmp/.X11-unix/X0라는 소켓 파일의 존재유무나 권한과는 관계가 없더군요.
AVD를 -degug-all 옵션줘서 실행했을땐 ddms가 adb로 ping 날린다는 메시지에서 멈춘걸로 봐선
ddms에서 adb로 날리는 핑을 차단하는 방화벽 활동 같은것도 의심되기는 한데,
ufw도 disable 시켜놨는데도 이럽니다. 대체 뭐가 문제인지 알 수가 없네요.
설마 원래부터 AVD는 루트권한으로 실행해야 되는건 아니겠죠?
댓글 달기