parseSdkContent failed
Could not initialize class android.graphics.Typeface
정확히는 위와같이 발생합니다. 그래서 다른 프로젝트를 가져와서 막상 실행시킬려고 하면 에러가 발생하는데 OSX 에서는 $HOME/.android 폴더를 강제로 지워주고 다시 시작하니까 문제 없이 동작합니다.
parseSdkContent failed
Could not initialize class android.graphics.Typeface
정확히는 위와같이 발생합니다. 그래서 다른 프로젝트를 가져와서 막상 실행시킬려고 하면 에러가 발생하는데 OSX 에서는 $HOME/.android 폴더를 강제로 지워주고 다시 시작하니까 문제 없이 동작합니다.
민트 리눅스를 잘 쓰고 있었습니다. 그러다가 갑자기 로그인을 하는데 화면이 검게 나오고 아무것도 진행이 안되더군요. 다른일을 하는 중이였기 때문에 침착하게 기다렸습니다. 한시간이 지나도 역시 검게 되어 있는 형태더군요. (한시간은 마치 그렇게 느꼈다는 뜻입니다. 저는 개발자 답게 인내심이 많지가 않습니다 ㅋㅋ)
그 검은 상태에서 마우스 오른쪽을 누르니 메뉴가 나오긴 하더군요. - 브라우져, 터미널 등등 - 이거 저거 다 눌러 보지만 별다르게 쓸만한 것은 없더군요.
그중에서 'Terminal Emulator' 를 선택하면 터미널 창이 하나 나오는데 거기서
sudo apt-get remove openbox
를 입력해서 지워주고 다시 시작하면 정상 복구가 됩니다. 저와 같은 현상이 벌어진 분들에게 바치는 팁입니다.
안드로이드 개발을 위해서 구글이 내놓은 새로운 개발툴 입니다. 최근에 이클립스가 maven 지원이 더딘것 때문에 사용자를 늘려가던 (유료인데도 불구하고!!) IntelliJ 기반입니다. 물론 구글이 내놓아서 공짜랍니다. 크기는 무려 700메가 정도군요, 기가단위가 아니라서 가벼운게냐..
조금 더 만져보니 이게 프로젝트가 비쥬얼 스튜디오 마냥 한번에 하나의 프로젝트만 열게 되어 있군요. 그래서 여러개를 한꺼번에 오픈하는 방식인 ADT 보다 가볍다는 소리를 듣는군요.
자세한 설명과 다운로드는 바로 http://developer.android.com/sdk/installing/studio.html 에서 다운받을 수가 있습니다.
지금까지 ADT 를 잘 사용했는데 왜 이걸 또 배워야 하느냐고 물으실 수가 있습니다. 저는 구글의 대변인은 아니지만 ㅎㅎ 이게 비록 베타인데도 웨어러블 (Wearable) 앱 만드는데 최적화가 되어 있습니다. (추천한다고 여기 저기 쓰여져 있습니다) 그리고 메이븐도 사용할 수가 있습니다. 자세한 것은 위의 주소에 가면 설명이 되어 있지만 따로 가져와 본다면
제가 하는 영역과 관련되서 딱 하나의 불만은 NDK 가 지원 안된다는 점이지만 뭐 급할 것은 없겠지요. 받아서 설치하시고 나면
바로 테마를 Default 에서 취향에 맞춰서 Darcula (드라큘라가 아니다? -ㅅ- ) 바꿔주셔도 좋습니다. 테마가 두개 밖에 없으니 알아서 골라주세용
아 그리고 에디터를 이용할때 사용하는데 전혀 거부감이 없었습니다. 그 말인즉슨 에디터가 기본으로 이맥스(Emacs) 키 바인딩을 지원한다는 것이겠지요. 이것 또한 아주 마음에 드는 부분이였습니다.
Programming is not about typing... it's about thinking. -Rich Hickey
제 추천은 Universal-USB-Installer 를 이용하는 것을 추천드립니다.
$ sudo vi /etc/apt/sources.list
:1,$s/archive.ubuntu.com/ftp.daum.net/g
deb http://packages.medibuntu.org/ precise free non-free
$ sudo apt-get update
$ sudo apt-get install nabi
NDK (Native Development Kit Environment) 입니다. 구글은 Java 환경의 SDK 만 가지고 모든 것이 가능할 것이라고 주장했었으나, 몇 버젼 지나지 않아 자신들의 주장을 철회하고 Native C/C++ 프로그램이 가능한 NDK 를 공개했습니다.
왜 NDK 를 사용하는가에 관해서는 몇가지 이유가 있겠지만
- 빠른 연산을 위해서 (아무래도 C/C++ 이 자바 보다 속도가 빠른것은 주지의 사실입니다)
- 수많은 Open Source 들이 아직도 C/C++ 로 되어 있기 때문에
NDK 를 컴파일 하기 위해서 알아야 할 구글에서 만들어둔 Makefile 입니다. Makefile 의 문법을 쓰고 있지만 세세하게 다 작성할 필요 없이 형태에만 맞춰주면 나머지는 빌드스크립트가 알아서 처리를 해 줍니다. 물론 이 방법 말고 OpenSource 를 컴파일하기 위해서는 방법이 따로 필요하지만 그 건 다른 포스트에서 다루기로 하겠습니다.
실제로 예제를 따라 만들어 보면 쉽게 이해가 될 것 같습니다.
NDK 를 개발하기 위한 준비 과정입니다. SDK 와 NDK 를 받아서 적당한 곳에 풀고 SDK 에 관련된 명령을 어디서든 실행할 수 있게 PATH 에 걸어주고, NDK 또한 어디서건 실행이 가능하게 PATH 에 걸어줍니다.
안드로이드 프로젝트를 만들어줍니다. Eclipse (ADT) 에서도 만들어 줄 수 있지만 저는 기본적으로 Command Line 을 선호하므로 Terminal 에서 만들어 줍니다.
디자인 부분을 손봐줍니다. 그냥 간단하게 TextView 하나 생성해 줍니다.
MainActivity 에서 Layout 에서 만들어준 TextView 에 NativeCode 에서 리턴한 문자열을 출력하는 예제를 만들 예정입니다. 따라서 위와 같이 작성해주면 됩니다.
실제로 Android 프로젝트를 빌드하는 과정입니다. 그냥 위 명령 그대로 입력하면 컴파일 될 것입니다.
EDIT: ubuntu 에서 javah 사용시 classpath 를 명시해 줘야 하더군요.
javah -classpath <android-sdk-path>/platforms/android-20/android.jar:$PROJECT_PATH/bin/classes com.comjuck.MainActivity
Native Code 가 위치해야 하는 $PROJECT_ROOT/jni 에 javah 를 이용해서 생성해준 com_comjuck_MainActivity.h 에 대응하는 Body 를 만들어줍니다. 여기서는 HelloNDK.c 로 만들어 주고 위와 같은 코드를 채워줍니다.
AndroidManifest.xml 파일을 열어서 이제부터 NDK 를 사용할 것이라는 것을 지정해줘야 합니다. 딱히 해줄것은 없고 minSDKVersion 정보를 최소 14로 맞춰주는 것입니다.
Native Code를 컴파일 하기 위해서 필요한 Android 용 Makefile 입니다. 현재 지금 있는 것을 컴파일 하기 위해서는 단지 위와 같이 작성해주면 됩니다.
Android.mk 의 예제입니다.
$PROJECT_ROOT 나 jni 디렉토리에서 ndk-build 만 입력하면 컴파일 됩니다. 그리고 다시 $PROJECT_ROOT 에 가서 ant -e debug 를 입력하셔서 다시 컴파일 해주시면 됩니다.
여러가지 방법이 있겠지만 Command Line 을 이용하자면
$ ant -e installd