본문 바로가기

글로벌 네트워크

안드로이드 젤리 빈 4.3 에뮬레이터에서 한글 출력하기

안녕하세요? 우리를 그토록 뜨겁게 달구었던 강렬한 태양도 이제는 지쳤나 봅니다. 역시 자연은 위대하죠? 얼마 전 구글에서 안드로이드 운영체제인 젤리 빈을 릴리스했습니다. 4.3 버전의 젤리 빈은 “더 달콤하다”는 구글의 광고처럼 여러 가지 개선된 성능을 보여준다고 합니다. 하지만 이전 버전에서처럼 한글 글꼴을 지원하지 않아 우리로서는 참 답답합니다. 도대체 구글의 생각이 무엇인지 의심스럽기도 하고, 실수라 하더라도 릴리스된 지 한 달이나 지난 현재까지도 아무런 후속 조치가 없는 것을 보면 화가 나기도 합니다. 어찌 됐든, 목마른 사람이 우물 판다는 우리 속담도 있고, 열심히 공부해서 실력을 쌓으려고 큰맘 먹고 책도 샀는데, 한글이 나오지 않아 참담함을 느끼면 곤란할 테니, 일단은 해결 방법을 찾아야겠죠? 곧(10월 중) 제이펍에서 안드로이드 최신 버전인 젤리 빈 4.3에 맞춰 새 책을 출간합니다. 그에 앞서 아래 내용을 차근차근 따라 해두면 좋을 듯합니다. 한 가지 부탁드리겠습니다. 이 글을 다른 곳에 그대로 복사하지 마시길 바랍니다. 이 글의 링크를 공유하는 것은 괜찮지만 글 자체를 복사하는 것은 안 됩니다. 그리고 젤리 빈 4.2 버전부터 한글 미출력 오류가 있었는데, 말씀드릴 해결 방법은 젤리 빈 4.2 버전에도 똑같이 적용할 수 있습니다. 그럼 시작해 볼까요? 따듯한 차 한 잔 준비하시고요!


서른다섯 번째 이야기

안드로이드 젤리 빈 4.3 에뮬레이터에서 한글 출력하기

작성일: 2013년 8월 29일

작성자: 배장열


=====================================================================================================

우선, 구글의 안드로이드 개발자 사이트에서 SDK를 다운로드해야겠지요? 이 과정은 생략합니다. 예전에는 이클립스와 SDK를 따로 다운로드해야 했는데, 버전이 올라가면서 통합되어 이제는 구글의 안드로이드 개발자 사이트에서 SDK만 다운로드하면 됩니다.


* 제 시스템 환경

패러렐즈 7에서 가상 OS로 윈도 7(32비트) 사용 중

호스트 OS는 맥 OS X 10.8.4 마운틴 라이언


저는 윈도용 32비트 SDK를 다운로드했습니다. 다운로드한 압축 파일을 풀면 폴더 하나가 생깁니다. 이 폴더 안으로 들어가면 그림 35-1처럼 보입니다.


<그림 35-1 이클립스와 젤리 빈 SDK 폴더>


<그림 35-2 패키지 업데이트>


일단, 한글이 출력되지 않는 모습을 봐야겠죠? 일종의 “비포 앤 애프터”입니다. 처음 이클립스를 실행하고 Android SDK Manager를 실행하면 그림 35-2처럼 설치해야 하는 항목이 눈에 띕니다. 하나는 ARM 시스템 이미지이고, 다른 하나는 Google USB Driver입니다. ARM 시스템 이미지가 리비전 2로 업데이트가 되어 혹시 한글 미출력 오류가 해결되었나 생각했는데, 역시였습니다. 패키지를 설치했으면, 애플리케이션을 하나 만들어볼까요?


제가 샘플로 만든 애플리케이션은 에뮬레이터의 언어 설정에 따라 화면에 “Hello World!”나 “안녕하세요.” 텍스트 중 하나와 “한글이 왜 안돼?”라는 한글 버튼을 표시합니다. 그림 35-3은 4.3 에뮬레이터에서 실행된 결과 화면입니다.


<그림 35-3 에뮬레이터에서 샘플 애플리케이션을 실행한 결과>


“Hello World!” 텍스트는 현재 에뮬레이터가 “영어”로 설정돼 있어 그렇게 나타난 것입니다. 버튼은 제대로 표시되지 않네요. 에뮬레이터 언어를 “한국어”로 변경하면 “Hello World!”는 “안녕하세요.”로 변경되어 표시됩니다. 하지만, 에뮬레이터 언어 설정에서 “한국어”로 변경하려고 하면 그림 35-4처럼 황당한 일이 일어납니다. 한국어 항목이 보이지 않는 거죠. 에뮬레이터 시스템 이미지에 한글 글꼴이 없어서 이렇게 보이는 것입니다.


<그림 35-4 언어 설정에서 한국어 항목이 빈 상태>


그럼 에뮬레이터의 시스템 이미지는 어디에 있을까요? 구글의 안드로이드 개발자 사이트에서 다운로드한 SDK 압축 파일을 푼 결과가 그림 35-1이었습니다. 여기서 sdk, system-images, android-18, armeabi-v7a를 차례로 클릭하여 폴더 안으로 들어가면, system.img 파일이 보입니다. 여기까지 진행한 결과가 그림 35-5입니다. 젤리 빈 4.2.2 버전 또한 비슷한 폴더 경로를 따라가면 됩니다. 다만, android-18 폴더가 4.3 안드로이드 버전을 의미한다는 점만 기억하시면 될 듯합니다.


<그림 35-5 system.img 파일의 위치>


system.img 파일이 에뮬레이터의 시스템 이미지 파일입니다. 여기에 한글 글꼴이 없어서 그림 35-3과 그림 35-4처럼 보인 겁니다. 다만, system.img 파일은 우리가 흔히 보는 iso 이미지 파일이나 img 이미지 파일과 다릅니다. 안드로이드가 인텔 프로세서에서 동작하는 운영체제가 아니다 보니 yaffs라는 파일시스템으로 시스템 이미지 파일을 압축했습니다. 글이 길어지니 yaffs 파일시스템에 대해서는 직접 구글링해 보시기 바랍니다.


우리는 이 system.img 파일에 한글 글꼴(여기서는 네이버의 나눔고딕코딩 글꼴을 사용함)을 추가하고 다시 압축할 것입니다. 그러면 에뮬레이터에서도 한글이 보이겠죠?


우선, system.img 파일을 풀 수 있는, 즉 yaffs를 지원하는 유틸리티가 있어야 합니다. yaffs 유틸리티는 리눅스용도 있고, 윈도용도 있습니다. 여기서는 윈도용을 개발자 웹사이트에서 다운로드하겠습니다.


* yaffs 유틸리티 다운로드 웹사이트: http://code.google.com/p/yaffey/


위의 웹사이트에서 윈도 32비트용 버전 0.2를 다운로드할 수 있습니다. yaffey라는 이 유틸리티는 몇 가지 제한 사항이 있습니다. 그 중에서 가장 중요한 것은 리눅스에서 사용되는 심볼릭 링크(혹은 소프트 링크)를 생성할 수 없다는 점입니다. 따라서 무작정 한글 글꼴만 추가하면 에뮬레이터에서 한글 글꼴을 인식하지 못합니다. 그 대신, 영문 기본 글꼴을 한글 글꼴로 바꾸어야 합니다. 그러니 엄밀히 말하면 한글 글꼴을 추가하는 것이 아니라 기본 영문 글꼴을 한글 글꼴로 변경하는 것입니다. 심볼릭 링크를 지원한다면, 단순히 한글 글꼴을 추가하고 기본 영문 글꼴의 심볼릭 링크를 생성하면 됩니다. 어찌 됐든, 에뮬레이터는 어차피 테스트용이고, 실제 단말기에서 테스트하는 것과는 다른 문제이므로, 어디까지나 임시방편으로 적용하시는 것이 좋습니다. 물론, 원래 system.img 파일은 백업해두어야겠죠?


yaffey 유틸리티를 실행합니다. 도구 모음에서 Open을 클릭하고, 위에서 말씀 드린 시스템 이미지 파일을 찾아 불러옵니다. 요약 정보를 알려주는 창(그림 35-6)을 닫으면, 시스템 파일의 폴더 구조가 나타납니다. 여기서 fonts를 더블클릭하면 설치된 글꼴이 나타납니다. 글꼴들을 훑어보면 그림 35-7처럼 DroidSans.ttf와 DroidSans-Bold.ttf가 각각 Roboto-Regular.ttf와 Roboto-Bold.ttf를 심볼릭 링크로 가리키고 있음을 알 수 있습니다. 따라서 에뮬레이터가 생성되면 Roboto-Regular.ttf와 Roboto-Bold.ttf가 기본 영문 폰트로 사용되는 것입니다. 우리는 이 두 글꼴 파일을 삭제하고, 이 자리에 나눔글꼴 두 개를 추가한 뒤, 이름을 각각 Roboto-Regular.ttf와 Roboto-Bold.ttf로 바꿀 것입니다. Roboto-Regular.ttf와 Roboto-Bold.ttf는 그림 35-8을 참고하시기 바랍니다.


<그림 35-6 yaffey 유틸리티>


<그림 35-7 system.img 파일의 글꼴들>


<그림 35-8 Roboto-Regular.ttf와 Roboto-Bold.ttf>


한 가지 주의할 점이 있습니다. 앞에서 말씀 드린 대로 리눅스에서 작업한다면, 기존 글꼴 파일을 삭제할 이유가 없습니다. 단순히 한글 글꼴을 추가한 뒤 심볼릭 링크만 생성하면 됩니다.


추가할 한글 글꼴은 네이버의 나눔 글꼴입니다. 개발자용으로 배포되고 있는 나눔고딕코딩 글꼴을 선택하는 것이 좋습니다. 네이버 웹사이트에서 글꼴을 다운로드한 뒤, 폴더에 풀어놓습니다. 이때 폴더 이름에 한글이 들어 있으면 yaffey가 인식을 못하니 주의하세요. 이제 yaffey 유틸리티에서 나눔고딕과 나눔고딕볼드, 두 글꼴을 복사합니다. 이때 주의할 점이 있습니다. yaffey 유틸리티에서 fonts를 클릭하여 선택한 뒤에 복사해야 합니다. 그러지 않으면 엉뚱한 곳에 글꼴이 복사됩니다. yaffey 유틸리티의 도구모음에서 Import를 클릭하고, 해당 글꼴을 불러옵니다. 여기까지 진행된 화면이 그림 35-9입니다.


* 나눔고딕 코딩 글꼴 웹 페이지: http://dev.naver.com/projects/nanumfont


<그림 35-9 나눔 글꼴을 추가한 모습>


이제, 기존 영문 기본 글꼴을 삭제합니다. Roboto-Regular.ttf와 Roboto-Bold.ttf를 클릭하여 선택한 뒤, 도구모음에서 Delete를 클릭합니다.


거의 다 됐네요. 나눔고딕과 나눔고딕볼드의 속성을 편집할 차례입니다. 한 번에 하나씩만 작업할 수 있으니, 먼저 나눔고딕을 선택합니다.


1. 도구모음에서 Properties를 클릭합니다.

2. 우선 이름부터 Roboto-Regular.ttf로 변경합니다.

3. Permissions 영역에서 Execute 속성을 전부 해제합니다. User, Group, All에서 Execute 속성에 체크 표시가 없어야 합니다.

4. OK를 클릭합니다.


이제 나눔고딕볼드를 작업할 차례입니다. 나눔고딕볼드를 선택합니다.


1. 도구모음에서 Properties를 클릭합니다.

2. 우선 이름부터 Roboto-Bold.ttf로 변경합니다.

3. Permissions 영역에서 Execute 속성을 전부 해제합니다. User, Group, All에서 Execute 속성에 체크 표시가 없어야 합니다.

4. OK를 클릭합니다.


이제 저장만 하면 완료됩니다.


1. 도구모음에서 Save As를 클릭합니다.

2. systen.img를 입력합니다.

3. 저장 버튼을 클릭합니다. OK를 클릭하여 요약 창을 닫습니다.

4. 저장된 systen.img 파일을 sdk\system-images\android-18\armeabi-v7a 폴더를 찾아 복사합니다. 덮어써야겠죠?


앞에서 만든 샘플 애플리케이션을 테스트할 차례입니다. 이클립스를 실행하고 Window 메뉴에서 Android Virtual Device Manager를 실행합니다. 기존 에뮬레이터는 과감히 삭제하고, 새로 에뮬레이터를 만듭니다. 그림 35-10은 한글이 올바로 표시된 안드로이드 애플리케이션의 모습니다. 그림 35-3과 비교가 되시나요? 에뮬레이터의 언어도 그림 35-11처럼 한국어로 변경할 수 있습니다. 다시 샘플 애플리케이션을 실행하면 그림 35-12처럼 “안녕하세요.”가 올바로 출력되는 것을 확인할 수 있습니다.


<그림 35-10 나눔 글꼴을 추가한 뒤 에뮬레이터에서 샘플 애플리케이션을 실행한 결과>


<그림 35-11 언어 설정>


<그림 35-12 언어 설정에서 한국어로 변경한 뒤 샘플 애플리케이션을 실행한 결과>


여기서 잠깐! 한 가지 이상한 점을 발견하셨나요? 맞습니다. 영문 글꼴이 별로 미려하지 못합니다. 아까 언급했던 Roboto-Regular.ttf와 Roboto-Bold.ttf 파일이 없다보니 좀 웃긴 모양새가 됐습니다. 마지막으로, 시스템 이미지를 변경한 뒤 처음으로 에뮬레이터가 생성될 때는 대단히 느릴 수 있습니다.


오늘은 여기까지입니다. 긴 글 읽어주셔서 고맙습니다. 여기서 말씀 드린 내용은 어디까지나 임시방편이라는 점에 유의하시고, 10월에 출간될 제이펍의 안드로이드 책과 함께 안드로이드를 공부하실 때 조금이나마 도움이 되시기를 바랍니다.