기본 콘텐츠로 건너뛰기

11월, 2007의 게시물 표시

오픈 소스 JavaME - phoneMe 소개

혹시, JavaME를 iPod Touch에 올리고 싶다면? 어떤 방법이 가장 손쉬울 수 있을까?
아마도, Sun의 phoneMe를 사용하는 것이 가장 올바른 방법이 아닐까 한다.

From Java.Net

phoneMe는 Sun이 공개한 JavaME 소프트웨어로 현재 feature 버전advanced 버전, 두 개의 버전으로 제공되고 있다. feature 버전은 주로 중저가형 휴대폰을 타겟으로 하며 CLDC라고 하는 JavaVM을 사용하며 advanced 버전은 고가형 Smart Phone을 타겟으로 하며 CDC라고 하는 JavaVM을 사용한다.

현재 MR2 버전까지 릴리즈된 phoneMe feature 버전의 경우 CLDC, MIDP, MMAPI, WMA 등 JTWI의 핵심 JSR 소스 코드가 모두 공개되어 있으며 Windows, Linux 환경에서 빌드 및 에뮬레이션이 가능하다. 또한, JavaCall이라고 하는 잘 정의된 포팅 함수를 이용하여 여러 장치에 포팅이 용이하도록 구성되어 있는 것도 특징이라고 할 수 있다.

혹시, 여러분의 iPhone Touch 혹은 닌텐도에 JavaME를 직접 올려보고 싶다면 phoneMe의 세계로 오세요!

모바일 환경의 웹 어플리케이션 개발?

구글 메일, 캘린더, 오피스 등 요즘 개인적으로 가장 많이 사용하는 어플리케이션 들이다. 부쩍 웹 기반의 어플리케이션 사용 빈도가 늘어나고 있다.

미래의 소프트웨어 개발 환경은 SOA 즉, 서비스 기반의 웹 어플리케이션 형태가 될 것이라는 것이 지배적인 의견이며 현실 또한 그런 방향으로 진행중인 것으로 생각된다.

그렇다면, 앞으로 어떤 브라우저 기술이 웹 어플리케이션 개발의 표준일 될 것인가? MS의 IE? 모질라의 FireFox? 아니면 Apple의 사파리?

위 브라우저들 중 Apple의 사파리를 사용하시는 분들은 그리 많지 않을 것이라 생각된다. 하지만, 모바일 소프트웨어 플랫폼에서의 승자는? 개인적으로는 사파리에 한표를 더지고 싶다!

그렇다면 사파리를 꼽은 근거는 무엇인가? Apple의 사파리의 브라우저 엔진인 WebKit이 그 이유다. WebKit은 Apple사가 KDE의 KHTML, KJS를 이용하여 개발한 오픈소스 브라우저 엔진으로 HTML, CSS, DOM, JavaScript, SVG 등의 컨텐츠를 처리할 수 있는 브라우저 엔진이다.

현재 WebKit은 임베디드 디바이스 환경에서 주목을 받고 있는데 노키아의 S60 시리즈의 브라우저 엔진으로 사용되고 있으며 또한, 구글의 안드로이드에 사용된다. 물론, Apple의 iPhone의 브라우저 엔진 역시 WebKit이다.

자 이정도면 왜 WebKit이 모바일 휴대폰 환경의 강자가 될 수 있을지 충분히 설명이 되었는가? 개인적으로는 웹 클라이언트 기술에는 큰 관심은 없지만 WebKit과 관련된 표준 웹 기술들에 대해서는 흥미가 있다. 참고로 Apple의 iPhone DevCenter를 들러보는 것이 도움이 되리라 생각된다. 또한, WebKit 개발자들의 블로그도 참고해보자.

모바일 소프트웨어 플랫폼 화이팅!

JavaFX 스크립트와 JavaFX 모바일의 관계?

보통 부르는 명칭이 비슷하면 그 성질도 유사한 것이 당연하다고 하겠다. 예를 들면, 김치와 김치전은 하나가 다른 하나의 재료가 된다는 점에서 유사하다고 할 수 있다.

JavaFX 모바일은 구글의 안드로이드와 유사한 개방된 휴대폰 플랫폼을 기치로 한 Sun의 기술이다. 2007년 JavaOne에서 전격 발표되었으나 아직 그 실체는 공개된 것이 없다. Sun의 웹사이트 자료를 보면 리눅스 커널을 이용하여 운영체제를 제공하고 주요 휴대폰 기능을 담당하는 프로그램을 Java로 개발하여 제공한다고 한다.

프로그램 개발 업체에게는 Java SE, ME API들을 그대로 활용하여 어플리케이션을 개발할 수 있도록 한다. 또한, JavaFX 모바일이라는 이름에서 유추해보면 JavaFX라는 재료를 이용하여 맛난 기술을 제공할 것임을 알 수 있다.

From Sun Microsystems

즉, JavaFX 모바일을 탑재한 휴대폰 혹은 셋탑박스 등에는 Java SE, ME를 이용하여 개발 된 프로그램 뿐아니라 JavaFX 스크립트를 이용한 화려한 UI를 가진 프로그램을 제공할 수 있을 것이다.

구글의 안드로이드가 자신 만의 새로운 SDK를 사용하는 것에 비해 Sun의 JavaFX 모바일 환경은 이미 표준화 되어 있는 Java 기술을 모두 포함하며 또한, 새로운 스크립트 기술인 JavaFX 모바일을 제공하게 될 것으로 보인다. 이런 점들을 고려해보면 응용프로그램 개발 환경으로서는 Sun의 솔루션이 더 매력적인 환경이 될 수도 있지 않을까 생각해본다.

안드로이드의 package 검토 - android.hardware

android.hardware 패키지는 현재 카메라 장치와 센서를 사용하기 위한 CameraDevice, Sensors와 같은 클래스를 제공한다. 이 글에서는 CameraDevice 클래스에 대해 검토해보도록 하겠다.

1. 카메라를 이용한 촬영
안드로이드의 CameraDevice 클래스는 촬영을 위한 속성을 설정한 후 capture method를 이용해 촬영한 이미지를 android.graphics.Canvas 객체에 저장한다. 촬영 시 설정할 수 있는 속성은 RGB565 혹은 YUV 포맷, 이미지의 크기 등을 결정할 수 있는데 현재 버전의 SDK 문서를 보면 크기는 단 2개만 선택 가능한 것으로 되어 있다.

2. 기타 카메라에 대한 기능들
현재 안드로이드 SDK 문서에는 설정 후 촬영외에 별다른 기능을 제공하는 것으로 보이지 않는다.

3. Java ME JSR234의 카메라 기능과 비교
Java ME JSR234 Advanced Multimedia Supplements의 카메라 관련 API는 카메라의 노출, 초점, 줌 등을 설정할 수 있고 또한, 연속 촬영, 동영상 촬영등이 가능하다. 이에 비해 현재 안드로이드의 카메라 API는 사용하기 간편한 점을 제외하곤 JSR234에 비해 기능이 너무 빈약하다고 할 수 있다.

4. 추후 추가되었으면 하는 사항
우선 촬영하는 이미지의 크기를 2개로 제한 한 것은 휴대폰 별로 여러 설정이 가능한 것을 무시한 구현으로 생각된다. 또한, 현재 휴대폰의 카메라가 줌이라든가 화이트 밸런스 설정 등 여러 고급 기능을 제공하고 있으므로 현실적으로 이에 대한 API도 제공하는 것이 좋을 것 같다.
단, 일반적인 촬영만을 위해서는 간단하게 사용할 수 있는 utility 클래스를 제공하는 것이 좋을 것 같다.

리눅스 커널 입문자를 위한 정보들

안드로이드, JavaFX Mobile, OpenMoko 모두 리눅스 커널을 사용하는 휴대폰 소프트웨어 플랫폼이다. 즉, 리눅스 커널에 대한 이해가 해당 플랫폼을 이용한 디바이스를 개발 시 중요할 것이다.
리눅스 커널에 대한 기술적 이해를 위해 다음과 같은 자료들을 참고하도록 하자!

1. 리눅스 커널 뉴비 사이트
2. 리눅스 커널 해부 (developerWorks)
3. 리눅스 커널의 이해 한글판, 혹은 영문판
4. 리눅스 커널 인 넛셸 eBook
5. HOWTO: 리눅스 디바이스 드라이버 해도 되는 것, 하면 안되는 것
6. 리눅스 커널 지도
7. 리눅스 커널 소스 참조 사이트

위 목록을 기준으로 차근 차근 한발짝식 앞으로!

Java ME SCMAD 준비 - JTWI란?

SCMAD (Sun Certified Mobile Application Developer)는 SCJP를 취득 후 응시할 수 있는 자격으로 Java ME 관련 기술에 대한 능력을 검증하는 자격증입니다. 앞으로 SCMAD 자격 취득에 필요한 지식을 Sun의 Exam Objectives를 기준으로 차례대로 살펴보도록 하겠습니다.

이번 글에서는 JTWI의 기본지식에 대해 정리해보도록 하겠습니다. 시험 준비를 위해 이 글과 함께 JCP 사이트에서 관련 Spec을 함께 참고하세요.

1. JTWI의 목적
휴대폰에 구현된 Java ME의 호환성, 상호동작성 및 구현의 완성도를 향상시키기 위한 목적으로 만들어진 스팩입니다.
자세한 내용은 JWTI Spec 문서의 1.2 Goal 항목을 참고하시기 바랍니다.

2. JTWI에 명시된 반드시 구현해야할 사항
아래에 나열한 JSR은 반드시 구현하여야 합니다.
MIDP 2.0 (JSR-118)WMA 1.1 (JSR-120)
3. JTWI에 명시된 선택적으로 구현되어야 할 사항
다음 JSR은 사항에 따라 선택적으로 구현해야 합니다.
MMAPI 1.1 (JSR-135)MMAPI를 구현하였다면 반드시 1.1 버전을 구현해야 JTWI와 호환된다
4. 최소 요구사항
CLDC 1.0 (JSR-30)은 JWTI를 구현하기 위한 기본 JSR이다
5. JTWI와 다른 기술들간의 차이점 및 관련 사항
JTWI는 다른 JSR처럼 새로운 기술에 대한 표준을 제정한 것이 아닙니다. Java ME 구현의 호환성을 높이기 위해 이미 정의된 JSR에 대해 좀 더 명확한 정의를 제공하고 있습니다.
예를 들면, MIDP 표준에서 선택적으로 구현할 수 있도록 정의된 WAV 사운드 재생을 JTWI에서는 반드시 구현해야할 항목으로 정의하고 있습니다.
JTWI에 호환되는 Java ME 구현을 제공하기 위해서는 다음과 같은 조건을 따르면 됩니다.
JWTI에 명시한 JSR 항목들을 해당 버전 혹은 상위 버전으로 구현 제공JTWI에 명시한 clarification 항목을 만족JWTI에 명시하지 않은 JSR의…

안드로이드보다 선배? OpenMoko 프로젝트

OS2가 Windows의 어머니라면 OpenMoko는 안드로이드의 선배 정도라고 표현할 수 있을것 같다.
OpenMoko는 네오 1973 스마트폰을 개발하기 위해 사용된 리눅스 기반의 플랫폼으로 OpenMoko WIKI의 말을 빌자면 world first opon mobile phone software stack 이다.

OpenMoko 플랫폼은 안드로이드와 달리 라이브러리가 C, C++로 제공되어진다.

OpenMoko WIKI 페이지를 보면 커널 개발 과정 및 하드웨어 설계 등등 다양한 자료가 작성되어 있다. 안드로이드가 아직 SDK 관련 정보밖에 공개안된 상태에서 리눅스를 이용한 휴대폰 소프트웨어 스택 개발에 관심이 있다면 한번쯤 확인해볼 만한 기술이라고 생각된다.

IBM의 developerWorks에 OpenMoko 소프트웨어 개발에 대한 튜토리얼이 제공되어 있으니 이것도 참조해보시길.

단, 안드로이드의 선배이지만 왠지 빠른 시일안에 후배에게 밀릴것 같은 예감이... :(

안드로이드 리눅스 커널 소스 포팅 ?

개인적으로 어플리케이션 개발보다는 시스템 소프트웨어 방면의 개발에 관심이 많은지라 안드로이드 운영체제 자체를 디바이스에 어떻게 포팅할 수 있는지가 큰 관심사입니다.

불행하게도 현재 공개된 안드로이드 웹사이트의 정보는 대부분 SDK에 관련된 내용뿐입니다. 아마도, 안드로이드가 리눅스 커널을 사용하므로 리눅스 운영체제 관련된 내용을 살펴보면 나중에 소스가 전면적으로 공개된다면 도움이 되지 않을까 생각합니다.

일단, 아쉬우나마 Google이 제공한 안드로이드 리눅스 커널 소스 코드 트리 중에 한국어로 번역된 HOWTO 문서를 먼저 확인해보고자 합니다.

혹, 관심있는 여러분들도 (저처럼 리눅스에 문외한이라면) 살펴보도록 하시죠.

안드로이드와 Java ME

현재 휴대폰 플랫폼으로 가장 성공한 것은? Java ME. 정답입니다.그렇다면 휴대폰 플랫폼으로 등장하고 SDK에서 자바언어를 사용하는 안드로이드와 Java ME의 관계는?

"개가 닭보듯 하는 관계"

좀 심한 감이 없지 않지만. 현재 안드로이드 SDK의 패키지를 살펴보면 Java ME와는 아무런 관련이 없다는 것을 알 수 있다.
패키지 목록에서 microedition이라는 단어로 검색해보면 javax.microedition.khronos.opengles단 한개의 패키지만 존재한다. MIDP라든가 JTWI 관련 JSR은 단 한개도 제공되지 않는다는 사실.

즉, 기존에 여러분이 작성한 Java ME용 (MIDP 용) MIDlet은 안드로이드의 VM에서는 실행되지 않는다! 두둥...

아마도, 실제 안드로이드를 탑재한 휴대폰이 개발되면 각 제조사가 알아서 Java ME의 표준 JSR들을 지원하지 않을까라는 생각이다. 그렇게 되야만 기존 어플리케이션도 동작하고 Java라는 eco system에 분란을 만들지 않을테니까...

안드로이드 프로그램을 디버깅하는 방법

이클립스에 안드로이드 플러그인을 정상적으로 설치하였다면 이제 예제 프로그램을 어떻게 디버깅할 수 있는지 살펴보도록 하죠.

1. 이클립스에서 디버그 시작 하기
안드로이드 SDK 예제중 NoteList를 디버그 모드로 실행해보도록 하겠습니다.
NoteList의 예제코드를 이미 존재하는 파일을 이용한 안드로이드 프로젝트로 생성하십시오.정상적으로 생성되었으면 WorkBench의 Navigation에서 NoteList를 선택하고 Debug As > Android Application 메뉴를 선택합니다2. 이클립스에서 로그 메시지 보기
안드로이드의 시스템 로깅이나 프로그램의 로깅 메시지를 보기 위해서는 안드로이드의 LogCat 도구를 사용합니다. 이클립스에 통합되어 있으므로 손쉽게 이용할 수 있습니다.
Window > Show View > Other... 메뉴를 선택합니다Show View 대화 상자에서 Android를 선택한 후 LogCat을 선택합니다. IDE에 아래 화면과 같은 LogCat 윈도우가 추가됩니다
3. 프로그램에서 로그 메시지 출력하는 법
프로그램에서 로그 메시지를 출력하기 위해서는 android.util.Log 클래스를 이용합니다. 이 클래스는 메시지의 출력 레벨 별로 5개의 메쏘드를 제공하여 LogCat에서 레벨별로 분류하여 살펴볼 수 있도록 합니다. 자세한 내용은 위 링크를 참고하세요.
LogCat의 2번째 컬럼은 디버그 메시지의 레벨을 표시하는 것으로 다음과 같은 문자를 사용합니다.
D - Debug levelE - Error levelI - Information levelV - Verbose levelW - Warning level
4. 이클립스에서 중단점 (break point) 설정 하기
이클립스 IDE의 WorkBench에서 중단점을 설정하는 것도 가능합니다. 소스 에디팅 윈도우의 가장 좌측 선택 바의 context menu에서 Toggle Breakpoint를 선택하여 중단점을 추가하거나 제거할 수 있습니다.
일단 중단점에서 break가 걸…

안드로이드(Android) 개발 환경 설정 따라하기

이 글은 안드로이드 SDK 문서의 Installing the SDK를 참조하여 정리한 내용입니다.

1. 다운받을 프로그램 목록
- JDK 5 or 6
- Apache Ant 1.6.5 or later
- Eclipse Europa
- 안드로이드 SDK

2. 우선 JDK와 Eclipse 등을 먼저 설치하세요
(이 글에서는 Ant는 설치하지 않아도 무방합니다)

3. 안드로이드 SDK 설치하기다운로드 받은 ZIP 파일의 압축을 풀어줍니다
SDK를 설치한 폴더가 $SDK_ROOT라고 하면 $SDK_ROOT\tools 폴더를 PATH 환경변수에 추가합니다
tools 폴더에 있는 emulator.exe 파일이 정상적으로 실행되는지 확인해봅니다자. 실행해보신 첫번째 소감이 어떤신지요? ^^ 잠깐 에뮬레이터를 가지고 놀아보시지요.
4. Eclipse용 플러그인 설치하기
편리한 개발환경 구축을 위해 Eclipse용 안드로메다 개발 tool 플러그인을 설치해보도록 하겠습니다.일단 Eclipse Europa 버전을 설치하세요이클립스를 실행하신 후 Help > Software Updates > Find and Install.... 메뉴를 선택하세요대화상자에서 Search for new features to install 옵션을 선택하신 후 다음으로 진행합니다New Remote Site를 선택합니다이름항목에 원하는 문자열을 입력하고 (예: Android Plugin) URL에는 http://dl-ssl.google.com/android/eclipse/를 입력합니다.목록에 자신이 추가한 항목이 있는지 확인하고 Finish를 선택합니다만일 네트워크 연결이 실패하면 proxy 설정을 확인합니다.검색 결과 화면에서 Android Plugin > Eclipse Integration > Android Development Tools을 선택한 후 진행하여 설치를 완료합니다5. 안드로이드 플러그인 설정
플러그인 설치 완료 후 이클립스를 재 실행합니다Window > Pre…

Q&A: 구글의 안드로이드란?

이 글은 BBC 웹페이지에 게제된 안드로이드 관련 Q&A 기사의 핵심 내용만 간추려 번역한 것입니다.


원문 자료: http://news.bbc.co.uk/2/hi/technology/7080758.stm

안드로이드란?
리눅스 기반의 S/W 개발 플랫폼 및 도구로서 차세대 휴대폰을 개발하기 위해 사용될 것입니다.

Open Handset Alliance란 무엇인가?
34개의 관련 업체로 이루어진 협의체로 안드로이드를 이용한 휴대폰을 개발하기 위한 목표를 가지고 있습니다.

안드로이드의 차별점
가장 큰 차이점은 개방성입니다. 기존의 Windows Mobile, Symbian, RIM 플랫폼등을 사용하기 위해서는 라이센스가 필요하며 또한, S/W 역시 코드가 개방되어 있지는 않습니다.

어떤 기능이 제공될 것인가?
한마디로 요약하면 휴대폰에서 PC보다 더 편리한 사용환경을 제공하는 것이 목표입니다.

관련 산업에 미칠 영향은?
리눅스가 앞으로 모바일 산업에서 가장 중요한 기술일 될 것입니다. 관련 전문가의 예상으로는 2012년에 모바일 플랫폼의 약 31%정도가 리눅스를 사용할 것이라고 합니다.

구글의 의도는?
현재 PC보다 휴대폰을 사용하여 인터넷을 사용하는 인구가 더 많다고 합니다. 바로 이점이 구글에게 엄청난 잠재적 시장을 제공할 수 있습니다. 구글이 모바일 웹 사용 환경을 더 발전시킨다면 더 많은 사용자들이 구글의 서비스를 사용하게 될 것입니다.

구글 안드로이드 (Android) 소개 동영상

구글이 합병한 안드로이드사의 창립자 Nick Sears의 인터뷰 동영상입니다.

"오늘날의 휴대폰은 프로그램 개발을 위해서는 그다지 좋은 플랫폼이 아니다. 그리하여 구글이 개방된 안드로이드 운영체제를 제공하여 Open Mobile Alliance 회원사와 함께 수많은 안드로이드 기반 폰 (소위 말하는 gPhone 혹은 GooglePhone) 을 만들 것이다.
그리하여, 현재의 인터넷과 같이 많은 사람들이 자신이 원하는 (예를 들면, 세금을 처리한다든가, 와이프의 생각을 내가 이해할 수 있게 자동으로 번역해준다든가 등등) 기능을 가진 휴대폰 소프트웨어를 개발하여 기여할 수 있는 세상을 만들것이다."

뭐 대충 위와 같은 이야기인 것 같습니다.

안드로이드와 자바

Sun의 자바(Java)는 Google의 안드로이드(Android)에서 어떤 위치를 차지할 것인가?

개발자로서 위 질문에 대한 답이 무척궁굼하지 않을 수 없습니다. 특히나 자바를 매일 사용하고 있는 개발자인 저로서는 자바 언어가 안드로이드에서도 핵심 개발 언어로 사용되었으면 하는 개인적인 바램입니다.

그러면 이와 관련된 정보가 있는지 한번 살펴보도록 할까요? 우선 Google의 Open Mobile Alliance 페이지에서는 별로 신통한 정보는 찾아볼 수 없습니다. 단, Java와 관련된 업체의 주석정도는 확인해볼 수 있었습니다.

From "http://www.openhandsetalliance.com/member_quotes.html"
"We are delighted to be a member of the Open Handset Alliance, which opens new horizons in the mobile space. Beyond our OMA applications contribution to this alliance, we strive to address the challenges and needs of all players in the current and future mobile value chain with a full range of integration and development services. Thanks to the availability of our Jbed™ Java™ VM on the Android platform, we offer immediate compatibility to the standard Java MEworld to enable Java ME-based mobile services with the Android platform."
-- Jean-Claude Martinez, CEO of Esmertec

Sun의 조나단 슈워츠 CEO는 자신의 블로그에 Java / Linux를 사용한 …

Android (안드로이드)를 배우자 블로그에 대한 소개

도대체 이 블로그는 무엇에 대해 배워보자는 것일까요? 여러분의 사춘기 시절에 즐겨보던 공상과학 영화에 등장하는 안드로이드 로보트를 직접 만들어보자는 것일까요?

아닙니다.

Android (안드로이드)는 Google이 곧 (11월 12일) 공개할 휴대폰용 Open 운영체제(와 SDK)의 이름입니다. Google이 제공한 정보에 따르면 이 운영체제는 Linux를 기반으로 하고 있습니다. 운영체제와 함께 곧 여러분들에게 제공될 Android용 SDK를 사용하게 되면 휴대폰의 다양한 기능을 맘껏 사용할 수 있는 멋진 응용프로그램 개발이 가능하다고 합니다.

또한, 휴대폰에 나중에 설치되는 응용프로그램이 제조 시 미리 탑재되는 응용프로그램과 모든 면에서 동일한 수준의 개발을 가능하게 하는 것이 목적이라고 합니다. 이는 기존의 휴대폰용 프로그램 개발 플랫폼에 비해 분명 상당히 개방적인 개발 환경을 제공할 것이라는 암시입니다. (물론, 뚜껑을 열어 직접 확인해봐야겠지만요... - 시스템의 보안 및 안정성 문제는 어떻게 해결하려는 것인지? 가상화 기술을 이용하여 운영체제 가상화를 하거나 혹은 Java와 유사한 VM을 제공하려는 것일까요?)

프로그램 개발을 위한 풍부한 라이브러리와 개발 도구 역시 제공한다고하니 어떤 S/W 도구들이 제공될지 궁굼하군요.

Goolge은 또한 개방된 휴대폰 소프트웨어를 제공하기 위한 목표로 여러 제조업체, 통신사, 소프트웨어 업체, 반도체 업체를 망라한 Open Handset Alliance를 조직하였습니다. 휴대폰 관련 분야에 관심이 많으신 분이라면 한번 이상은 들어보았을 법한 굵직한 회사들이 대거 포진하였으며 국내의 삼성전자, LG전자도 포함되어 있습니다.

자... 이쯤되면 흥미가 당기지 않으시나요? 2007년 들어 휴대폰 소프트웨어 개발을 위한 플랫폼이 엄청나게 성장해버렸습니다. Apple의 iPhone역시 내년에 SDK를 공개한다고 합니다. Sun은 휴대폰용 JavaFX Mobile을 JavaOne 2007에서 이미 발표한 바가 있습니다.

Apple, …