Microsoft MVP성태의 닷넷 이야기
Java: 14. 안드로이드 - Hello World 실습 [링크 복사], [링크+제목 복사],
조회: 31508
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

안드로이드 - Hello World 실습

이기종 환경을 이해하기 위해 ^^ iPhone/Mac에 이어 안드로이드까지 해봤습니다.

Objective-C의 대안 - Xamarin의 Mono를 이용한 C# iOS 개발 환경
; https://www.sysnet.pe.kr/2/0/1363

안드로이드는 사실 자바 문법을 약간 알고 있다보니 초기 거부감이 iOS에 비해서는 덜했습니다. 그런데 후반부 거부감이 무시 못 할 수준이군요. ^^;

암튼, 우선 개발 환경 먼저 구성해 보았습니다.

안드로이드애플리케이션개발환경구축하기1 
; http://sharepoint.egloos.com/2962243

안드로이드애플리케이션개발환경구축하기2 
; http://sharepoint.egloos.com/2962245

위의 글을 읽고 잘 따라해 보았습니다.

우선 JDK 설치 먼저! JDK 1.7 x64 버전으로 다음의 폴더에 설치했습니다. (이상하군요. JDK 안에 JRE가 포함되어 있는데도 JDK와 JRE 2곳의 설치 경로를 묻습니다.)

Windows x64 90.03 MB    jdk-7u9-windows-x64.exe  (1.7.0.9 버전)

JDK 설치: D:\android\jdk7u9
JRE 설치: D:\android\jre7u9

그다음 이클립스 설치입니다. 역시 x64 버전으로 했고 "Eclipse IDE for Java EE Developers, Windows 64 Bit" 항목을 다운로드해 설치했습니다. Visual Studio와는 달리 이클립스는 eclipse.exe가 사용될 JRE VM 경로를 지정할 수 있습니다. "-vm" 옵션으로 지정하면 되는데 매번 명령행에서 입력할 수 없으니 탐색기에서 eclipse.exe에 대한 "단축 아이콘"을 만들어서 명령행에 지정해 주면 됩니다.

D:\android\eclipse\juno64\eclipse.exe -vm "D:\android\jdk7u9\jre\bin\javaw.exe"

또한, Visual Studio의 Solution 개념에 해당하는 것으로 "workspace"라는 것이 있는데요. 자바 개발은 대부분 workspace를 한번 정하면 잘 안 바꾸기 때문에 아예 이클립스 시작부터 workspace를 지정해서 쓰는 경우가 많습니다. 이를 위해 "-data" 옵션을 지정하면 되는데, 따라서 제 단축 아이콘 하나는 다음과 같이 정해져 있습니다.

D:\android\eclipse\juno64\eclipse.exe -data "D:\android\workspace" -vm "D:\android\jdk7u9\jre\bin\javaw.exe"

이제 ADT(Android Developer Tools)를 다운로드하는데요. 이클립스의 "Help" / "Install New Software..." 메뉴를 선택하고 "Add" 버튼을 누른 후 다음의 배포 경로를 추가시킵니다.

Name: AndroidDev
Location: https://dl-ssl.google.com/android/eclipse/

확인하면, 목록에 "Developer Tools"와 "NDK Plugins"가 나오는데 전부 선택하고 진행, 중간에 서명되지 않은 소프트웨어 설치에 대한 경고가 나오지만 무시하고 OK 버튼을 눌러 넘어갑니다. 완료 후 이클립스를 재실행하면 경고창 하나가 다시 발생하는 데, Android SDK 경로를 지정해야 한다고 합니다. 경고창은 무시하고 "Welcome to Android Development" 창에서 "Target Location"에 SDK 경로를 지정해 주면 된다. 제 경우에는 D:\android\sdk로 지정했는데 설치가 완료되면 약 500MB의 공간이 점유됩니다.

잘 설치되었는지 확인하기 위해 이클립스의 "Window" 메뉴에 "Android SDK Manager"와 "Android Virtual Device Manager" 메뉴가 있는지 봅니다. 만약 없다면 이클립스의 "Help" / "Check for updates..." 메뉴를 선택해서 업데이트를 해보면 나올 수도 있습니다. (제 경우에 IDE 항목이 하나 있었는데, 업데이트 후 그제서야 Android 메뉴가 나왔습니다.)

일단 제가 참고한 블로그 글에서는 여기까지만 알 수 있고 그다음이 없군요. ^^ 아니... 하다 못해 Hello World 예제라도 나와야 하는 거 아닌가요? ^^




그래서, 그다음부터는 다음의 글을 참고해서 간단한 앱을 만들어 보았습니다.

안드로이드 튜토리얼 1 - Hello World
; http://devsw.tistory.com/44

위의 글을 보니, 우선 AVD(Android Virtual Machine)을 만들어야 하는군요. 이클립스의 "Window" / "Android Virtual Device Manager" 메뉴를 선택하면 되는데, 여기서부터 안드로이드의 파편화가 느껴지기 시작합니다. 저는 일단 "Galaxy Nexus (4.65", 720 * 1280: xhdpi)"를 기본값으로 두고 하나 만들었습니다.

이제 이클립스에서 "File" / "New" / "Android Application Project"를 선택하고 "TestApp" 프로젝트를 기본 설정만으로 생성했는데, 오... ^^ 이렇게 프로젝트가 만들어졌습니다.

android_hello_world_1.png

휴~~~ 일단 모든 폴더와 파일을 이해하는 것은 나중으로 미뤄야겠군요. ^^

어쨌든, 그냥 생성한 프로젝트가 "Hello World" 예제이니 Run을 해보았습니다. 그런데, 다음과 같은 오류가 Console 창에 떨어지는군요.

[2012-11-20 19:25:16 - TestApp] Error in an XML file: aborting build.

이클립스 창의 activity_main.out.xml 파일에도 "No XML content. Please add a root view or layout to your document."라는 오류가 보입니다. 보니까, /res/layout 폴더에 이상한 일이 벌어졌습니다. 처음에는 activity_main.xml 파일 하나만 있었는데, "Run"을 할 때마다 activity_main.out.xml, activity_main.out.out.xml, activity_main.out.out.xml 이런 식으로 파일이 늘어갑니다. 그리고 그렇게 생성된 파일의 내용이 비어 있어서 저런 오류가 발생했던 것입니다. 모두 삭제하고 다시 빌드해서 Run을 해보았습니다. 다행히 이번에는 XML 오류는 발생하지 않는데, 금방 다음과 같은 오류가 나왔습니다.

[[시간 생략] - TestApp] Automatic Target Mode: launching new emulator with compatible AVD 'AVD_for_Galaxy_Nexus_by_Google'
[[시간 생략] - TestApp] Launching a new emulator with Virtual Device 'AVD_for_Galaxy_Nexus_by_Google'
[[시간 생략] - Emulator] PANIC: Could not open: C:\Users\TestKevin\.android/avd/AVD_for_Galaxy_Nexus_by_Google.ini

제 경우에 사용자 계정의 루트를 D 드라이브로 옮겨 놓았는데요. "Android Virtual Device Manager" 메뉴에서 생성한 가상 디바이스는 변경한 루트 경로를 반영해서 생성되었던 반면 이클립스의 실행 환경은 원래의 사용자 계정 루트에서 가상 디바이스 환경을 검색하고 있는 것입니다. 음... 어쨌든, 이 정도는 제가 고급 사용자이다 보니 쉽게 맞춰줄 수 있습니다. ^^

junction "C:\Users\TestKevin\.android"  "D:\Work\.android"

자... 이제 되었겠죠. ^^ 다시 한번 실행을 했는데, 이번에는 다음과 같은 오류가 발생했습니다.

[[시간 생략] - Emulator] emulator: WARNING: Requested RAM size of 1024MB is too large for your environment, and is reduced to 768MB.
[[시간 생략] - Emulator] Failed to allocate memory: 8
[[시간 생략] - Emulator] 
[[시간 생략] - Emulator] This application has requested the Runtime to terminate it in an unusual way.
[[시간 생략] - Emulator] Please contact the application's support team for more information.

처음엔 이클립스 실행 화면의 폭이 작아서 위의 메모리 오류가 보이지 않아 도대체 이유를 알 수 없었습니다. 할 수 없이 자바를 잘 아는 동료한테 물어봤는데 잠시 후에 메모리를 낮춰야 한다는 대답을 해주더군요. ^^; 아니, 8GB 메모리에 1GB 메모리를 못 잡아서 저런 오류가 발생하는군요. 음... 그래요. 그럴 수도 있습니다. 잦은 메모리 할당으로 파편화가 생기면 연속된 1GB 메모리를 할당할 수 없으니... (그렇다면 애당초 512MB 정도로 낮게 잡아야 하지 않았을까요? 8GB 개발 환경도 많다고 볼 수는 없을 텐데!) 그래서 "Android Virtual Device Manager"에서 해당 가상 디바이스의 메모리를 512MB로 낮춰 주었습니다.

이렇게 해주고 나서야 비로소 "Hello World" 실행에 성공을 했습니다. ^^ 그런데... 가상 디바이스의 실행 속도가,,, 휴,,, 한 세월이군요. 그렇게 느릴 수가 없습니다. ^^; 윈도우 폰 개발자들은 정말이지, 이에 비하면 축복받은 환경이라고 생각하면 됩니다.




그런데, 문제가 있습니다. activity_main.xml의 파일이 activity_main.out....xml으로 늘어나는 현상은 여전했습니다. 게다가 이클립스 툴바의 특정 아이콘 영역이 비정상적으로 심하게 깜박거리는 데 뭔가 CPU 작업이 심란하게 발생하는 것 같았습니다. 도저히 이 상태로는 개발할 수가 없을 것 같다는 생각이 들었는데요.

듣자하니, 이클립스 Juno가 무척 느리다고 하는군요. 그래서 제 컴퓨터에 설치된 이클립스 Indigo 버전에 ADT를 다시 설치하고 -vm 옵션과 -data 옵션을 사용해서 Juno가 구성했던 기존 환경을 그대로 이어받았습니다. "Hello World" 프로젝트가 잘 올라왔고 툴바의 아이콘은 안정적이었으나, activity_main.xml 파일의 문제는 여전했습니다.

모르겠습니다. 이차저차해서 Run을 하니 이번에는 다음과 같은 오류가 발생합니다.

[2012-11-22 19:24:10 - Unexpected error while launching logcat. Try reselecting the device.] device not found
com.android.ddmlib.AdbCommandRejectedException: device not found
    at com.android.ddmlib.AdbHelper.setDevice(AdbHelper.java:752)
    at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:373)
    at com.android.ddmlib.Device.executeShellCommand(Device.java:462)
    at com.android.ddmuilib.logcat.LogCatReceiver$1.run(LogCatReceiver.java:110)
    at java.lang.Thread.run(Thread.java:722)

장치를 발견할 수 없다라니... 이클립스의 "Android Virtual Device Manager"에서는 Juno의 환경 설정을 이어받아 Indigo에도 동일하게 보였습니다. 어쩔 수 없군요. 혹시나 싶어서 일단 지우고 Indigo 이클립스를 통해서 다시 생성했습니다. 이제서야 실행하니 정상적으로 나옵니다. 아... 맞다. 한참 후에~~~! 그동안 emulator-arm.exe는 CPU 100%를 치고 (i7이라서 12%), 뜨거워진 노트북을 식히기 위해 팬은 돌고... 그나마 실행된 에뮬레이터의 반응 속도는 답답할 정도로 느립니다.

불쌍한 안드로이드 개발자들... 이렇게 열악한 환경속에서 그동안 프로그래밍을 하고 있었다니...

솔직히, 오늘 실습을 하기 전까지는 카카오톡 윈폰 버전이 급하게 다른 버전을 포팅하다 보니 안정성이 떨어진 것이 아닐까 이해해 주려고 했지만, 그건 아무래도 아닌 것 같습니다. 이런 개발 환경을 비교해 보았을 때, 왠지 카톡 윈폰 버전의 개발자에게 문제가 있어 보인다는.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/5/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2012-11-22 11시37분
[jacking] 이미 알고 계시겠지만 안드로이드도 Mono로 하는게 좋을 것 같습니다. 개발 환경도 잘 되어 있고 언어도 익숙한 것을 사용할 수 있고요^^
[guest]
2012-11-22 12시23분
Mono로 접근한다고 해도 역시 ^^ 원본을 아는 것이 중요할 것 같아서 개발환경 구축을 해보았습니다.
정성태
2012-11-22 02시58분
[Lyn] 그래서 안드로이드는 실기개발이 기본입니다 ^^; 에뮬레이터 상태가 안좋아서요
[guest]
2012-11-22 11시09분
아... 그렇군요. 제가 안드로이드 폰이 없어서, 그걸 확인 못해봤군요. ^^
정성태
2012-11-23 12시13분
[짜두] 헬로월드가 없었던건 그 이후에도 계속 블로깅을 올릴 계획이었기 때문이라는..ㅎㄷㄷ 암튼 케빈님의 파워블로깅에 링크가 걸리다니 영광입니다~ㅋ
[guest]
2012-11-23 03시38분
짜두님... 그래서 그다음 어떤 앱이 만들어졌어요? ^^ 궁금합니다.
정성태
2012-11-23 05시04분
[짜두] 블로그 TODO 카테고리에 제목만 잔뜩 올려놓고 못쓰고 있어요 ㅠㅠ 웹앱도 있고, 네이티브도 있고 머 오픈소스 머시기 머 이런 아이템들 몇게 있습니다. 제목만...ㅋ
[guest]

1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13818정성태11/15/20245303Windows: 272. Windows 11 24H2 - sudo 추가
13817정성태11/14/20244943Linux: 106. eBPF / bpf2go - (BPF_MAP_TYPE_HASH) Map을 이용한 전역 변수 구현
13816정성태11/14/20245397닷넷: 2312. C#, C++ - Windows / Linux 환경의 Thread Name 설정파일 다운로드1
13815정성태11/13/20244822Linux: 105. eBPF - bpf2go에서 전역 변수 설정 방법
13814정성태11/13/20245290닷넷: 2311. C# - Windows / Linux 환경에서 Native Thread ID 가져오기파일 다운로드1
13813정성태11/12/20245053닷넷: 2310. .NET의 Rune 타입과 emoji 표현파일 다운로드1
13812정성태11/11/20245271오류 유형: 933. Active Directory - The forest functional level is not supported.
13811정성태11/11/20244859Linux: 104. Linux - COLUMNS 환경변수가 언제나 80으로 설정되는 환경
13810정성태11/10/20245390Linux: 103. eBPF (bpf2go) - Tracepoint를 이용한 트레이스 (BPF_PROG_TYPE_TRACEPOINT)
13809정성태11/10/20245264Windows: 271. 윈도우 서버 2025 마이그레이션
13808정성태11/9/20245271오류 유형: 932. Linux - 커널 업그레이드 후 "error: bad shim signature" 오류 발생
13807정성태11/9/20244994Linux: 102. Linux - 커널 이미지 파일 서명 (Ubuntu 환경)
13806정성태11/8/20244917Windows: 270. 어댑터 상세 정보(Network Connection Details) 창의 내용이 비어 있는 경우
13805정성태11/8/20244748오류 유형: 931. Active Directory의 adprep 또는 복제가 안 되는 경우
13804정성태11/7/20245377Linux: 101. eBPF 함수의 인자를 다루는 방법
13803정성태11/7/20245336닷넷: 2309. C# - .NET Core에서 바뀐 DateTime.Ticks의 정밀도
13802정성태11/6/20245707Windows: 269. GetSystemTimeAsFileTime과 GetSystemTimePreciseAsFileTime의 차이점파일 다운로드1
13801정성태11/5/20245493Linux: 100. eBPF의 2가지 방식 - libbcc와 libbpf(CO-RE)
13800정성태11/3/20246339닷넷: 2308. C# - ICU 라이브러리를 활용한 문자열의 대소문자 변환 [2]파일 다운로드1
13799정성태11/2/20244922개발 환경 구성: 732. 모바일 웹 브라우저에서 유니코드 문자가 표시되지 않는 경우
13798정성태11/2/20245524개발 환경 구성: 731. 유니코드 - 출력 예시 및 폰트 찾기
13797정성태11/1/20245514C/C++: 185. C++ - 문자열의 대소문자를 변환하는 transform + std::tolower/toupper 방식의 문제점파일 다운로드1
13796정성태10/31/20245396C/C++: 184. C++ - ICU dll을 이용하는 예제 코드 (Windows)파일 다운로드1
13795정성태10/31/20245179Windows: 268. Windows - 리눅스 환경처럼 공백으로 끝나는 프롬프트 만들기
13794정성태10/30/20245268닷넷: 2307. C# - 윈도우에서 한글(및 유니코드)을 포함한 콘솔 프로그램을 컴파일 및 실행하는 방법
13793정성태10/28/20245149C/C++: 183. C++ - 윈도우에서 한글(및 유니코드)을 포함한 콘솔 프로그램을 컴파일 및 실행하는 방법
1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...