Android 프로그래밍을 하다 C코드를 Java코드와 연동해야하는 일이 생겼습니다.

Android NDK를 이용해 빌드하다보니 ant를 사용하여 안드로이드 프로그램을 빌드하였습니다.

Linux에서 빌드할때와 Mac OSX에서 빌드할때 미묘한 차이가 생기더군요.


Java로 된 안드로이드 소스코드는 UTF-8로 분명히 저장되어 있는데, Ant가 Linux에서 돌릴때엔 ascii로 인식해서 컴파일을 하더군요. 결국엔 안드로이드 어플에 한글이 깨져 나오는 문제가 있습니다.

Mac에서는 아무런 문제없이 빌드되고 안드로이더 어플에 한글이 깨져나오는 일이 없습니다. 참 미묘하기도 하지요?


참고로 CentOS5에 설치한 Ant 버전은 아래와 같습니다.

[studioego@localhost ~]$ ant -version

Apache Ant version 1.7.1 compiled on June 27 2008

[studioego@localhost ~]$ 



그리고 Mac  OSX 10.6에 설치된 Ant버전은 아래와 같다.

Dae-Hyun-Sung-ui-MacBook-Pro:~ studioego$ ant -version

Apache Ant version 1.8.1 compiled on September 21 2010

Dae-Hyun-Sung-ui-MacBook-Pro:~ studioego$


CentOS5 에서 Ant를 실행했을때


$ ant debug

Buildfile: build.xml

    [setup] Android SDK Tools Revision 8

    [setup] Project Target: Android 2.2

    [setup] API level: 8

    [setup] 

    [setup] ------------------

    [setup] Resolving library dependencies:

    [setup] No library dependencies.

    [setup] 

    [setup] ------------------

    [setup] 

    [setup] 

    [setup] Importing rules file: tools/ant/main_rules.xml


-debug-obfuscation-check:

-set-debug-mode:

-compile-tested-if-test:

-dirs:

     [echo] Creating output directories if needed...

    [mkdir] Created dir: /******/bin/classes

-pre-build:

-resource-src:

     [echo] Generating R.java / Manifest.java from the resources...

     [null] /home/studioego/android/platform-tools/aapt: /usr/lib/libz.so.1: no version information available (required by /home/studioego/android/platform-tools/aapt)

-aidl:

     [echo] Compiling aidl files into Java classes...

-pre-compile:

compile:

    [javac] Compiling 5 source files to /******/bin/classes

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]            ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]             ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]              ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]               ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                 ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                  ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                   ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                    ^

    [javac] /******/src/org/ccl/mobile/student/AnnoLine.java:4: warning: unmappable character for encoding ascii

    [javac] // 시작점 좌표

    [javac]                      ^

(생략)

    [javac] 100 warnings

(생략)



이후 소스코드는 UTF-8로 분명히 저장했는데도 안드로이드 어플에서 글씨가 깨져 나옵니다.


Mac OSX 10.6 Snow Leopard 에 탑재된 Ant를 실행했을때

$ ant debug

Buildfile: /******/build.xml

    [setup] Android SDK Tools Revision 10

    [setup] Project Target: Android 2.2

    [setup] API level: 8

    [setup] 

    [setup] ------------------

    [setup] Resolving library dependencies:

    [setup] No library dependencies.

    [setup] 

    [setup] ------------------

    [setup] 

    [setup] 

    [setup] Importing rules file: tools/ant/main_rules.xml

-debug-obfuscation-check:

-set-debug-mode:

-compile-tested-if-test:

-pre-build:

-dirs:

     [echo] Creating output directories if needed...

-aidl:

     [echo] Compiling aidl files into Java classes...

-renderscript:

     [echo] Compiling RenderScript files into Java classes and RenderScript bytecode...

-resource-src:

     [echo] Generating R.java / Manifest.java from the resources...

-pre-compile:

...

(생략)

BUILD SUCCESSFUL

Total time: 10 seconds


소스코드도 UTF-8로 저장되었고 안드로이드 어플에서 한글이 깨지는 일이 없이 문제 없이 돌아갑니다. 


ant의 버전 차이때문에 그런건가요?


이 문제 때문에 Linux용 최신 ant binary 버전을 다운 받아서 사용했어도 똑같은 일이 발생하더군요.

버전문제는 아는 것 같고.. Linux용 ant를 직접 빌드해서 사용해야 문제가 해결될까요?


한글이 깨지는 문제때문에 구글링 한 결과 android-sdk폴더안의 파일을 수정해야되더군요

android-sdk디렉토리 안에 있는 tools/ant/main_rules.xml 을 열고 나서 

<property name="java.encoding" value="ascii" /> 부분을 찾습니다. 

 120     <!-- compilation options -->

 121     <property name="java.encoding" value="ascii" />

 122     <property name="java.target" value="1.5" />

 123     <property name="java.source" value="1.5" />

이후 ascii를 UTF-8로 수정후 저장합니다.

 <property name="java.encoding" value="UTF-8" />

이후에 다시 ant로 안드로이드 어플 컴파일 하면 한글이 깨지는 문제가 사라집니다.

참조: android: getting rid of “warning: unmappable character for encoding ascii”

(역시 구글링하면 모든 문제가 대부분 해결 되더군요 ㅎㅎ)


참고로 Mac OSX에선 기본적으로 UTF-8로 설정되어서 위와 같이 한글이 깨지는 문제가 없더군요.

아래는 맥의 ant 설정파일의 내용입니다.

/Users/studioego/android-sdk-mac_86/tools/ant/main_rules.xml

124     <!-- compilation options -->

125     <property name="java.encoding" value="UTF-8" />

126     <property name="java.target" value="1.5" />

127     <property name="java.source" value="1.5" />


Buy me a coffeeBuy me a coffee

이번 monaca님이 주최하신 애자일 3종 강탈 1탄 Head First Software Development에 당첨이 되었습니다.

그 당첨된 책이 드디어 도착하였습니다 >.<

2009년 1월 2일 드디어 도착한 소포를 뜯어보니 책이였어요 +_+

학교서 돌아오니 책상위에 웬 택배가 있었나 싶었더니?

monaca님의 이벤트에 당첨된 Head First Software Development가 도착!



으흐흐 저는 sungdh86로 당첨되었답니다. 드디어 책이 도착하여 저의 기분이 좋군요 +_+

책이 도착하였으니 얼른얼른 읽고 서평을 올리겠습니다 >.<


이것이 당첨된 Head First Software Development

대충 책을 훑어보았는데 4학년 1학기때 UML그린다고 삽질하거나, 영문판 소프트웨어공학과목 교재 에서 이해 못한 내용들이 그림으로 잘 설명되어서 뻥 뚫리게 이해할수 있게 한 것 같다.

Object-oriented Systems Analysis and Design Using UML
작가
Simon BennettSteve McRobbRay Farmer
출판사
McGraw Hill Higher Education
출간일
2005년 8월 1일, 월요일
설명
The book provides a clear, practical framework for development that uses all the major techniques from UML 2.0. It follows an iterative and incremental approach based on the industry-standard Unified Process. It places systems analysis and design in the context of the whole systems lifecycle, and includes generic analysis and design issues. Two realistic case studies are used throughout the book - one for illustrative examples and the other for practical exercises for the reader.The book is structured in four parts, which can be flexibly combined to meet the needs of the syllabus. The first part provides the background to information systems analysis and design and to object-orientation. The second begins with two case study chapters, and focuses on the activities of requirements gathering and systems analysis, and the basic notation of the Unified Modelling Language (UML). The third part covers the activities of system design and UML notation for object design. The final part examines the later stages of the systems development lifecycle, reuse and software development methodologies.

위의 책은 4학년 1학기 소프트웨어공학 교재이다. 이책 읽다가 해석 안되는 부분도 많고 머리가 나쁜지 아님 익숙하지 않은 내용들이라서 그런지 읽어도 이해 안되서 머리가 아픈 줄 알았다.

이번 교육용 협업 및 학습 오픈소프 프로젝트인 Sakai Project를 공부하다 막힌 부분의 기초를 쌓기 위해서 현재 읽고 있는 Head First시리즈들 입니다.

HEAD FIRST SOFTWARE DEVELOPMENT
카테고리 컴퓨터/IT
지은이 댄 필로네 (한빛미디어, 2008년)
상세보기

HEAD FIRST OBJECT ORIENTED ANALYSIS DESIGN
카테고리 대학교재
지은이 브렛 맥래프린 (한빛미디어, 2007년)
상세보기

HEAD FIRST DESIGN PATTERNS
카테고리 컴퓨터/IT
지은이 에릭 프리먼 외 (한빛미디어, 2005년)
상세보기

위의 3개의 책을 읽다보니 4학년 소프트웨어공학 수업 듣기 전에 3개의 책을 읽었다면 UML설계도 쉽게 하고, 소프트웨어공학을 금방 이해하였을 것이고, 소프트웨어공학 과제 프로그래밍도 매우 쉽게 나갔을 것이라는 생각만 하고 있다. 정말 다시 4학년 1학기로 돌아가면 소프트웨어공학 A+받을 것이라는 생각이 들 정도로 3개의 책이 머리속에 쏙쏙 들어가게 설명이 되어있다.

ps. monaca님 저의 닉은 sungdh86과 studioego 두개 동시에 쓴답니다. 이점 유의해주세기 바랍니다. 혹시나 블로그에 글 올렸는데 다른 닉으로 올려서 먹튀자 명단으로 올라갈까바 걱정 ㄷㄷ

Buy me a coffeeBuy me a coffee

이번 monaca님이 주최하신 애자일 3종 강탈 1탄 Head First Software Development에 당첨이 되었습니다.

이번 대학원 가기전에 교수님이 공부하라고 던져주신 교육용 협업 및 학습 오픈소프 프로젝트인 Sakai Project에 대해 공부하다 보니 Agile방식으로 Log4J나 JUNIT코드들이 난무하고 Framework는 왜이리 써서 머리 터지게하는지 어떻게 다가갈지 겁이 나더군요.


Monaca님의 말마따나

HFSD는 프로젝트에 어떤 문제가 생기고, 도구를 사용해 그 문제를 어떻게 해결하는가에 집중합니다. 그래서 익히 이름은 들어봤지만 어렵게 느껴지거나 쉽게 접근하기 어려운 뽀스(force)가 느껴졌던 프로젝트 유틸리티를 조금은 쉽게 접근할 수 있습니다. 

테스트를 위한 TDD,

버전 관리를 위한 Subversion, 

빌드 관리를 위한 Ant,

지속적인 통합을 위한 CruiseControl

이런 도구가 이야기와 함께 등장합니다. 어쩌면 '내가 했던 프로젝트가 이랬었지'하고 공감하는 부분도 있겠죠. 공감된다면 책에서 말하는 문제 해결 방법을 적용해보는 것도 좋습니다.

Sakai Project에서 보았던 위의 내용들을 이해 하기 위해서 책이 필요했었는데 다행이도 당첨이 되어서 기쁩니다.

으흐흐 저는 sungdh86로 당첨되었다는 기쁨이 ㅎㅎ

책 도착하면 잘 읽고 서평을 올리겠습니다 >.<


이것이 당첨된 Head First Software Development

ps. monaca님 저의 닉은 sungdh86과 studioego 두개 동시에 쓴답니다. 이점 유의해주세기 바랍니다. 혹시나 블로그에 글 올렸는데 다른 닉으로 올려서 먹튀자 명단으로 올라갈까바 걱정 ㄷㄷ

ps2. 요즘 공부하는 것들이 SI업체에서 하는 일들 ㄷㄷㄷ 나도 졸업하면 악명높은 SI업체로 발을 디디는 것인가?

HEAD FIRST SOFTWARE DEVELOPMENT
카테고리 컴퓨터/IT
지은이 댄 필로네 (한빛미디어, 2008년)
상세보기

Buy me a coffeeBuy me a coffee

+ Recent posts