본문 바로가기

프로그래밍/libGDX

RoboVM - 자바로 iPhone 앱 개발하기

RoboVM

RoboVM 0.01 버전이 발표되었습니다. RoboVM은 자바로 아이폰 앱을 개발할 수 있는 툴 입니다. 오라클의 ADF, j2objc등의 툴들이 존재하지만 부족한 점들이 있습니다. j2objc는 자바 코드를 Object-C 코드로 변환하는 툴인데, 코드 변환을 하다 보니 디버깅의 어려움이 있고, 자바의 여러 기능들이 사용할 수 없는 단점들이 있습니다. 그 외에도 JNI코드를 사용할 수 없는 단점도 존재합니다.

RoboVM은 조금 다릅니다. 일단 소스코드를 변환하는 것이 아니라 자바 바이트 코드를 네이티브 코드로 변환을 합니다. 네이티브 코드 변환하여 아이폰에서 사용할 수 있게 해주는 것입니다. 또한 Object-C Bridge를 포함하도 있습니다. 그래서 자바코드에서 아이폰 라이브러리를 직접 사용할 수 있는 환경을 만들어 줍니다.

RoboVM: http://www.robovm.org/



RoboVM의 특징[각주:1]

RoboVM은 이클립스등의 자바 개발 환경에서 코코아터치API를 이용하여 네이티브 iOS 앱 개발을 가능하게 해줍니다.

바이트코드를 네이티브 코드로 변환

RoboVM의 컴파일러는 자바 바이트 코드를 ARM 또는 x86 네이티브 코드로 변환이 가능합니다. 변환된 코드는 인터프리팅 과정을 거치지 않고 해당 CPU에서 직접 실행 됩니다. 메인 타겟은 아이폰이나 아이패드 또는 iOS 시뮬레이터이지만 RoboVM은 Linux와 Mac OS X x86의 실행 파일도 생성할 수 있습니다.

안드로이드 기반 런타임

java.lang, java.util, java.io등의 자바의 런타임 코어 클래스들은 안드로이드 런타임에 기반을 두고 있습니다. 이게 무슨 의미인가 하면 RoboVM로 생성된 코드는 안드로이드에서도 충분히 잘 돌아간다는 겁니다. RoboVM의 목표는 최대한 많은 안드로이드의 non-UI 부분을 RoboVM에 포함시키는 것입니다. 안드로이드 패키지와 Open GL ES API도 RoboVM에 집어넣어 안드로이드 앱과 RoboVM iOS앱의 코드 공유가 원활하도록 할 수 있습니다.

자바와 Objective-C bridge

RoboVM은 Objective-C bridge를 포함하고 있어 자바코드를 Objective-C 클래스와 객체를 쉽게 사용할 수 있습니다. 아이폰의 UIkit, 코코아터치 UI 프레임워크등은 이미 Objective-C bridge를 이용하여 자바에서 사용될 수 있도록 만들어 졌습니다. 이 방법을 이용하여 해당 CPI에서 네이티브 코드를 직접 실행할 수 있을 뿐만 아니라 네이티브 API등도 직접 사용 할 수 있게 되었습니다.

IDE Integration

RoboVM은 자바에서 가장 유명한 IDE인 이클립스에서 사용할 수 있는 플러그인을 제공합니다. 플러그인을 사용하면 기존 자바 어플리케이션을 실행하는 것처럼 쉽게 앱을 iOS 시뮬레이터에서 실행할 수 있습니다. 

Business friendly open source license

RoboVM은 100% 오픈소스 입니다. 그동안 많은 변환 툴들 또는 크로스 플랫폼 툴들이 유료였는데, RoboVM은 무료입니다. 컴파일 툴들은 GPLv2 라이센스를 따르고 있고, 런타임 코드는 상용으로 사용하기 좋은 아파치 v2.0 라이센스를 채택하고 있습니다. RoboVM은 상용 앱을 개발하는데 사용될 수 있는 라이브러리가 되는 것을 목표로 하고 있다고 합니다.


마치며...

자바 진영에서는 그동안 자바로 아이폰 개발을 하고 싶은 생각을 많이 가지고 있었습니다. 그래서 그 동안 자바로 아이폰 개발을 할 수 있는 많은 툴들이 개발되어 왔습니다. 하지만 자바의 모든 기능을 활용하지 못하거나, 소스 코드를 변환하여 디버깅을 어렵게 하거나, 아이폰의 API를 활용할 수 없거나 해서 실제로 활용되는 경우는 극히 드물었습니다. 하지만 RoboVM은 기존의 변환 툴의 문제점을 많이 해결하여 나온 솔루션이라고 보입니다. 조만간 RoboVM은 크게 성장하는 플랫폼이 될 것 같습니다.




  1. 해당 내용은 다음 링크를 번역한 것입니다. http://blog.robovm.org/2013/01/robovm-001-released.html [본문으로]