이지랑드로랑 - 13장. 안드로이드 SDK 와 EZ-S3C6410 보드 연결하기
여러분이 아기다리고기다리 외치시는 이지랑드로랑 13번째 강좌가 시작되었습니다.
오늘은 안드로이드 어플리케이션을 개발하는데 꼭 필요한 Android SDK 를 이지보드와 연동해서 개발하는 방법을 설명하도록 하겠습니다. 야호! 신나죠?! (^_^)
What?! Android SDK
말 그대로 안드로이드를 개발하는데 필요한 툴킷을 말합니다.
Android Standard Development Kit, 맞나? ...;;; 틀려도 할 수 없습니다! 머 대충 이런 겁니다.
우리가 C 언어로 안드로이드 어플리케이션을 짤 수 없다는 것은 대충 다들 알고 계신잖아요. 이정돈 다 아시죠? ^^
이 안드로이드 SDK는 안드로이드를 빌드할 수 있는 기본적인 환경과 AVD(Android Virtual Device)를 제공합니다.
미리 설명드리자면 우리는 이 AVD 를 이지보드로 대체하는 것을 해보는 겁니다. 신난다! ㅎㅎㅎ
안드로이드 SDK 를 이용해서 개발을 하려면 먼저 준비되어야 할 것이 Eclipse 와 Sun Microsystems 의 Java JDK 입니다.
안드로이드는 당연히 Java를 이용해서 개발하구요, 개발환경은 이클립스를 기반으로 하고 있습니다.
그러니까 두개는 준비하셔야겠죠?
Eclipse IDE for Java Developers : 다운로드
Sun JAVA : 다운로드
위 두개의 툴을 설치하는 것에 대해서는 따로 설명하지 않겠습니다.
일단 이클립스와 JDK 를 모두 설치하셨다는 것을 가정하고 이제 시작하도록 해볼께요.
Step1. Google 에서 Android SDK 내려받기
지금껏 우리는 안드로이드 소스를 GIT 서버를 통해서 내려받곤 했는데요, 이젠 안드로이드의 진짜 주인 구글 친구들이 가장 일반적으로 공개하고 있는 개발자사이트를 통해서 SDK를 내려받을 겁니다.
사실 많은 사람들이 커널이나 프레임워크 따위에는 관심없어요!
그렇다고 좌절하지 마세요!
우린 휴대폰이 아닌 다른 장치에 안드로이드를 응용할 수 있는 능력을 가지게 될 그런 능력자 아닙니까!!! 멋진거에요!
안드로이드 공식 개발자 사이트 : http://developer.android.com/sdk/index.html
먼저 위 주소로 들어가서 SDK 를 다운로드 받도록 할 겁니다.
각자의 운영체제에 맞는 것을 다운로드 받으면 되는데요, 저는 귀찮아서 윈도우에서 작업을 하려고 해요.
리눅스를 좋아하긴 하지만, 윈도우도 좋아하니까요;;;; 쿨럭;;;
[그림13-1. Windows, Mac, Linux 버전으로 재공되는 안드로이드 SDK]
그래도 참 대단한게 애플의 아이폰 어플을 만들려면 꼭 맥OS 기반에서 작업을 해야하는데 말이죠.
구글 안드로이드는 윈도우, 맥, 리눅스... 아주 운영체제를 가리지 않는다고 해도 과언이 아닙니다. (지구 정복하려나?)
아무튼 전 윈도우 버전을 받았습니다. (2010년 3월 7일, R04 버전이 나왔고 안드로이드 2.1 Eclair 까지 지원)
다운로드 받은 파일은 압축을 풀어서 자기가 쓰기 편한 곳에 배치하도록 하세요.
전 개발할 때 이클립스를 통째로 돌려쓰기 위해서 이클립스를 설치한 디렉토리에 몰아넣는 습성(?)을 가지고 있습니다.
여기까지도 머 그닥 설명은 필요 없을 것 같아요. (여러분을 믿습니다!)
Step3. 이클립스에서 안드로이드 SDK 컴포넌트 추가하기
이제 이클립스에서 안드로이드 SDK 관련 컴포넌트를 추가하도록 하겠습니다.
그냥 SDK 압축만 풀었다고 쓸수 있을거라고 생각하셨다면 여러분은 너무 순진하신겁니다. ^^
안드로이드 공식 개발자 사이트 : http://developer.android.com/sdk/eclipse-adt.html
위 주소로 들어가시면 안드로이드 SDK 관련 컴포넌트를 추가하는 것을 버전에 맞게 잘 설명하고 있습니다.
이클립스는 버전이 지금 갈릴레오랑 가니메데를 많이 쓰고 있는데요, 전 갈릴레오를 사용하고 있어서 갈릴레오를 기준으로 설명드리도록 하겠습니다.
이클립스를 실행하고 메뉴에서 Help - Install New Software 를 선택합니다.
[그림13-2. Install new software, Add Site]
위와 같이 안드로이드 ADT 주소(https://dl-ssl.google.com/android/eclipse/) 를 추가하면....
[그림13-3. Developer Tools 가 나타난 모습]
자! 드디어 우리가 설치하려고 하는 툴들이 나타났습니다.
DDMS, ADT 두개를 모두 선택하고 Next 버튼을 눌러서 설치를 진행하세요.
별거 없습니다! 계속 Next 누르면서 설치할 때 자주보는 '동의하시겠습니까?' 나오면 동의하고 계속 넘어가면 됩니다. 쉽죠?
그리고 마지막으로 안드로이드 SDK를 설치한 곳의 위치를 지정해 주시면 됩니다.
메뉴에서 Window - Preferences 에서 Android 트리를 선택해서 SDK Location을 지정해 줍니다.
[그림13-4. SDK Location 지정하기]
SDK 위치를 지정하셨다면 그냥 OK 를 누르면 됩니다.
그리고 나서 이제 업데이트를 한번 또 해줘야 하는데요, 다음과 같은 과정을 거칩니다.
메뉴에서 Window - Android SDK and AVD Manager 를 클릭합니다.
[그림13-5. 패키지 확장설치]
Available Package, 사용가능한 패키지 탭을 누르면 뭔가 쭉 나타나는데, 귀찮습니다! 몽땅 다 설치해 버립니다. ^^a
뭐, 저는 개발도구는 풀인스톨이 최고다라는 주의기 때문에;;; 여튼 그렇습니다.
역시 설치할 때 '동의하겠습니까?' 물어보면 거기에 반기 들지 마시고 동의해주시면 되겠습니다.
... 이런... 엄청나게 느리군요!!! 전 세계적으로다가 많이들 받는가보다 생각하고! 커피 여러잔 마시고 나면 끝날 겁니다.
이걸로 우리가 원하는 작업은 일단 다 된겁니다.
그럼 진짜 안드로이드를 위한 개발환경이 가춰졌는지 한번 테스트를 해보도록 할까요?
Step4. 에뮬레이터로 HelloWorld 프로그램 돌려보기
일단 우리 보드와 연결하기 전에 검증이라는 것이 있으니까요, 만국공통 입문 프로그램, HelloWorld를 돌려보죠.
그전에 해줘야 할 것은 AVD를 하나 생성해 줘야 한다는 것입니다.
AVD란 Android Virtual Device 라는 것으로 가상으로 장치를 생성하는 것, 즉! 에뮬레이터를 말합니다. ^^
자, 바로 앞에서 열었던 Android SDK and AVD 에서 Virtual Device 탭을 선택하고 New 버튼을 클릭해 에뮬레이터를 하나 생성해 보도록 할까요?
[그림13-6. AVD 생성하는 모습]
그리고 이제 프로젝트를 하나 생성해 볼까요?
[그림13-7. 프로젝트 생성]
자, 이렇게 간단하게 프로젝트를 하나 생성하고 이제 실행을 시켜보도록 합시다.
아차차! 실행을 시키기 전에 꼭 해줘야 할 것은 말이죠, Run Configurations 를 선택해서 AVD 설정을 해줘야 하는 겁니다.
[그림13-8. 타겟보드 설정하는 모습, 일단은 에뮬레이터로]
아까 만들었던 AVD를 선택해서 연동하도록 합니다.
그리고 멋지게 Run!!!
[그림13-9. 에뮬레이터로 돌아가는 Hello World 프로그램]
잘 돌아가네요. 그럼 이제 이지보드에 연결해 보도록 할까요?
Step5. 이지보드에서 Hello World 프로그램 돌려보기
자! 이제 우리의 EZ-S3C6410에서 프로그램을 디버깅해보도록 하겠습니다.
우리가 그동안 괜히 삽질하면서 이더넷을 살리고 했던 것이 아닙니다. 다~ 이때를 위한 것이라고 할 수 있지요.
먼저 안드로이드 SDK 를 설치한 디렉토리 밑에 있는 tools 디렉토리 ({Android_SDK}/tools/)에 board_connect.bat 파일을 하나 만들어서 다음과 같은 내용을 추가합니다.
set ADBHOST=192.168.10.89
adb kill-server
adb devices
위에서 ADBHOST 는 보드의 IP를 말합니다.
꼭 확인 마셔야 할 것은 board_connect.bat 파일의 위치와 이지보드의 IP 가 되겠습니다.
그리고 이지보드에 설치한 안드로이드에서 init.rc 의 스크립트가 꼭 아래와 같이 되어 있는지 확인합니다.
# adbd is controlled by the persist.service.adb.enable system property
service adbd /sbin/adbd
disabled
# adbd on at boot in emulator
on property:ro.kernel.qemu=1
start adbd
on property:persist.service.adb.enable=1
start adbd
on property:persist.service.adb.enable=0
stop adbd service debuggerd /system/bin/debuggerd
그리고 안드로이드에서 Setting - Applicatinos - Development 에서 USB Debugging 모드도 활성화 합니다.
이렇게 하면 일단 보드에서의 설정은 얼추 끝난 겁니다.
그럼 아까 만들었던 board_connect.bat 파일을 실행해 볼까요?
[그림13-10. 성공적으로 보드의 ADB와 연동한 모습]
자! 실행하고 위와 같이 daemon started successfully 라는 메시지를 봤다면 성공한 겁니다.
만약 저 메시지가 안나온다면... 슬프지만 실패한 겁니다.
안된다고 좌절하지 마시고 뭐, 혹시 실수한건 없는지 차근차근 살펴보고 계속 따라와 주세요.
[그림13-11. 타겟보드를 매뉴얼 모드로 전환]
자! 이제 아까 했던 Run Configuratinos 에서 타겟보드를 매뉴얼로 전환합니다.
이제 에뮬레이터가 아닌 우리 보드에서 실행할 수 있는 그 순간이 바로 눈 앞에 있는 겁니다! Run!!!
[그림13-12. 사용자가 직접 선택하는 타겟보드의 모습]
자! 위에 보이는 목록 중에서 emulator-5554, 이게 바로 우리의 이지보드가 되겠습니다.
선택하고 OK 버튼을 눌러 보세요.
네트워크 상태가 좋다면 거의 바로, 늦는다면 조금 기다린 후 보드에 프로그램이 실행된 것을 보실 수 있을 겁니다.
[13-13. DDMS를 이용해서 이지보드 안드로이드의 스크린샷을 찍은 모습]
여러분은 ADT에 들어있는 툴중 DDMS를 이용해서 이지보드에 떠있는 안드로이드 스크린샷도 곧바로 찍을 수 있죠.
위에 그림이 바로 그렇게 찍은 겁니다. ^^
위 프로그램은 /data/app/ 디렉토리 안에 .apk 파일로 되어 들어가게 됩니다.
ADB를 이용해서 안드로이드 파일 시스템에 APK 파일을 인스톨 한 것이 되겠습니다.
어때요!
이제 여러분은 이지보드를 이용해서 어플리케이션까지 개발할 수 있는 기본적인 환경을 모두 갖추게 된 겁니다.
하하하!!! 해피한 일이 아닐 수 없죠? ^^
제 뭘 만들어 볼까요?
현재 EZ-S3C6410 보드에는 USB-OTG 포트가 포함되어 있지 않은 것으로 알고 있습니다.
USB 연결없이 네트워크 연결만으로 ADB를 사용하신 것인지, 아니면 USB ADB 사용을 위해 별도의 확장 보드를 제작하신 것인지요?
개인적으로는 EZ-S3C6410 보드에 USB OTG 포트가 빠져있는 것이 아쉬웠습니다.
말씀하신 USB 클라이언트가 USB OTG Device Mode를 말씀하신 것인지요?
보드 상에는 2개의 USB Port 모두 A Type으로 되어 있고, 회로도에서도 2개의 포트의 회로가 동일하게 되어 있습니다. 제가 보기에는 USB Device로 사용할 수 있도록 되어 있지는 않은 것으로 보입니다. 즉, USB OTG PHY를 USB 2.0 Host를 사용하기 위한 UTMI Interface가 아닌 USB 1.1 Host와의 Serial Interface Mode로 사용이 되어서 2개의 포트 모두 USB 1.1를 지원하도록 되어있는 것으로 이해를 하였습니다.
아니면 말씀하신 것과 같이 USB OTG Device Mode로 사용이 되고, PC와의 연결을 위해서는 양쪽 모두 A Type의 플러그로 되어 있는 케이블이 사용되어 져야 하는 것인가요?
이 부분에 대해 확인 부탁드립니다.
강좌기다리는 보람이 있습니다. 잘 보았습니다.
계속 좋은 강좌 부탁드려요..