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) 키 바인딩을 지원한다는 것이겠지요. 이것 또한 아주 마음에 드는 부분이였습니다. 


  너무 거창한 이야기라고 생각합니다. 하지만 16여년 가까이 CS (Computer Science) 쪽에 있었고 또 그런 환경하에서 보고 듣고 생각한 것을 기반으로 해서 조금이라도 후배들에게 도움이 되는 방향으로 설명하고자 합니다. 더구나 이제 어떤 걸 공부해 볼 지 방향을 못잡으실 때 도움이 되실꺼라고 생각합니다. 

  '어떤 프로그래밍 언어를 공부해야 하는가?' 라는 질문은 '어떤 프로그래밍 언어가 좋은 것인가?' 라는 질문과 일맥상통하는 바가 있습니다. 그러나 '좋은' 이라는 중의적인 표현 때문에 참으로 결정하기 어렵습니다. 

  세상에 널리 퍼져서 취직하기 좋은 언어가 '좋은' 것인가? 아는 사람이 거의 없어서 특수한 목적에 꼭 필요한 언어가 '좋은' 것인가? 내가 익숙하게 쓰니까 '좋은' 것인가? 즉 자바나 C/C++ 이 과연 '좋은' 것인가? 하는 것에 관한 물음 입니다. 

  더구나 프로그래밍 언어 (Programming Language) 라는 것은 개발자들에게 있어서는 '종교'와도 같은 것이라서 함부로 이 언어가 저 언어보다 좋다고 단정적으로 말하기가 힘듭니다. 위에서도 언급 했듯이 '중의적인' 표현인 '좋음' 이라는 것이 여러가지 의미를 포함하기 때문입니다. 단적으로 단지 텍스트 에디터일 뿐인 이맥스 와 vim 사용자들의 그간 계속되어 온 전쟁(?)을 보더라도 단순한 논쟁을 넘어서 종교적인 영역과도 맞물려 있습니다. 

  그럼에도 불구하고 이렇게 글을 남기는 것은 비단 나만의 의견이 아니기 때문입니다. 비록 유명한 사람 (지금 그 분이 누군지는 잊어먹었지만..)의 뒤에 숨어서 그 분의 의견이 마치 제 의견인 양 남기는 것은 용기 없는 태도이긴 하지만 저 또한 그 분의 의견에 동감하기 때문에 이렇게 글을 남깁니다. 

  CS (Computer Science) 을 공부하고 앞으로 그 분야를 공부하거나 일을 하게될 사람이라면 적어도 5가지 종류의 언어를 익힐 필요가 있다고 합니다. 

  1. C 언어 
     C 언어는 어셈블리(Assembly) 언어가 잘 안쓰이게 됨에 따라서 가장 기계어에 가까운 시스템 언어입니다. 아시다 시피 C 언어는 온갖 유닉스의 커널을 만든 언어 이기도 합니다. 요즘 환경하에서는 컴퓨터 OS 의 기본을 이루는 근본 언어 이기 때문에 익혀야 합니다. 

  2. C++ 언어 
     C++ 언어는 C 에 가장 가까운 언어이면서 (심지어 라이브러리도 호환되게 쓸 수가 있습니다) OOP (Object Oriented Programming) 언어 입니다. 즉 쉽게 말해서 OOP (Object Oriented Programming) 언어이면서 시스템 관련된 프로그래밍을 할 수가 있는 언어입니다. 참고로 구글에서 많이 쓰는 언어기 때문에 구글에 도전하려는 분들은 익혀두셔야 할 것입니다. 

  3. Java 언어
     Java 언어는 세상에서 가장 많이 쓰이는 언어중에 하나입니다. 사실 그 이유만으로도 공부해야만 하는 가치를 지니고 있습니다. IT 에서는 가장 많이 쓰이는 (범용성이 가장 높은) 것들이 문제가 발생하더라도 해결하기 편합니다. 실례로 현존하는 거의 모든 라이브러리의 자바 버젼은 존재한다고 볼 수가 있습니다. 뭔가 만들고 싶은게 있으면 Java 쪽에서 찾아보면 이미 존재해 있을 가능성이 높습니다. 

  4. Script 언어 
     1-3 번이 알골(Algol) 계열의 언어였다면 이제부터는 그 영역에서 조금 다른 언어를 공부해야 합니다. 스크립트 언어를 공부해야 하는 이유는 어찌 보면 당연합니다. 그 놀라운 생산성은 겪어본 사람만 알 수 있습니다. 아이디어를 가지고 구체화 하는데 이보다 더 탁월한 수단이 없습니다. 너무나 많은 스크립트 언어가 있겠지만 Javascript, Python , Ruby 등을 추천합니다. 특히 파이썬은 구글쪽에 도전하시려면 익혀두시는 게 좋을 것입니다. 

  5. Functional 언어 
     예전에 OOP(Object Oriented Programming) 개념이 처음 나왔을 때 개발자들은 왜 OOP 를 공부해야 하는지 모르겠다는 이야기를 했습니다. C 만으로 모든것이 충분했는데 말이죠. 하지만 GUI 가 나오고 OOP 가 기본인 세상이 됐습니다. 그리고 Java 가 세상을 지배했습니다. 왜 Functional 언어를 공부해야 하는지 모르겠다는 분들이 많습니다. 이해합니다!! 그러나 이제 CPU 만 보더라도 코어 클락수가 수직적으로 상승하던 시대는 잠깐 주춤대고 있으며 이제 병렬적으로 양이 늘어나는 시대가 다가오고 있습니다. 이런 환경하에서 병렬 시스템 설계에 최적의 언어가 함수형(Functional) 언어인건 확실합니다. 그래서 Java 에도 이러한 개념이 추가되고 있습니다. 이러한 언어를 공부하실려면 단연코 저의 의견으로는 리습(LISP) 입니다. 리습(Lisp)이 가장 함수형 (Functional) 언어의 전형을 보여주며 가장 공부할 만한 가치가 있습니다. 최근 JVM 위에 올라가는 언어들이 인기라 클로져(Clojure) 를 공부하신다면 두마리 토끼를 잡으실 수가 있습니다. 

  이상이 공부해 볼만한 5가지 언어 또는 계열입니다. CS (Computer Science) 출신이라면 단순 개발을 잘하는 것 이상의 신기술에 대한 적합도도 중요할 것입니다. 이런 공부 기반을 바탕으로 한다면 적어도 언어 분야에서는 새로운 개념이라 어렵다는 말은 잘 안나올 것입니다.이런 목적을 위해서라도 공부해 볼것을 추천합니다. 

 Programming is not about typing... it's about thinking. -Rich Hickey



아 리치 히키가 한 말이니 전적으로 동감을 하지만 서도.. 생각만 한다고 잘 되는 것도 아니고, 일단은 키보드를 가지고 뭔가 쓰기 시작해야지 뭔가 되기도 하는데, 리치 히키가 한 말은 단순히 치기보다는 생각을 좀 하라는 뜻으로 받아들이는 게 나을 것 같습니다.
 
아래와 같이 파일을 열어서

$ emacs ~/.Xresources


다음과 같은 내용을 추가해 줍니다.

Emacs.font: Consolas-12
emacs.FontBackend: xft


그리고 다음과 같이 터미널에서 입력해 줍니다.

$ xrdb -merge ~/.Xresources


우분투에 Consolas 폰트를 설치하는 방법은 예전 포스트 에서 참조하세요.


EDIT: 2014-02-04

위 방법은 민트 리눅스 (Mint Linux) 마야 (Maya) 버젼에서도 동일하게 동작합니다.  

 
정말 예전 포스트 에서 민트 리눅스 (Mint Linux) 를 추천한 적이 있었습니다. 간만에 그 노트북이 생각나서 꺼내서 사용하니 OS 설치한지 오래되서 지원이 끊겼습니다. 민트 리눅스도 기반이 우분투(Ubuntu) 인지라 우분투의 지원주기랑 같습니다. 즉 우분투가 LTS (Long Term Support) 버젼이면 민트도 LTS 가 되는 것이지요. 따라서 우분투 LTS 버젼의 최근 것이 12.04 니까 민트도 거기에 해당하는 버젼이 민트 13 마야 (Mint Linux 13 Maya) 가 되는 것이지요. 

http://www.linuxmint.com/release.php?id=18

위 링크를 클릭하시면 민트 리눅스를 받을 수 있습니다.  저사양 노트북에는 씨나몬 (Cinnamon) 보다는 메이트 (Mate) 가 낫다고 하더군요. 기능성은 조금 떨어지지만 더 가볍다고 합니다. 그리고 제 빌어먹을 소니 노트북은 32비트 CPU 기 때문에 32 비트 버젼 Mate 를 설치해줍니다. 

다운로드 받은 iso 파일이 있다면 이제 이것을 USB 스틱에다 넣어서 부팅이 가능하도록 만들어 줘야 하는데 몇가지 방법이 있습니다. 그러나 제 경험으로는 몇가지 방법이 있다고는 하지만 되는 방법은 별로 없었습니다.

제 추천은 Universal-USB-Installer 를 이용하는 것을 추천드립니다.  


만약 윈도우에서 Linux 계열의 부팅이 가능한 USB 스틱을 만드는 경우라면 위의 프로그램을 이용하는 것이 가장 편했습니다.

그후에 시키는대로 대충 누르시면 설치가 됩니다. (민트 리눅스를 설치하는 방법은 여러군데서 찾을 수 있을 뿐더라 설치 자체도 쉽습니다)

설치후에 해야 할 일

사실은 이 부분이 더 중요합니다.  먼저 민트 리눅스 마야 (Maya) 는 LTS 인 12.04를 기반으로 하긴 하지만 이 버젼 자체가 옛날에 나온 것이기 때문에 소프트웨어 업데이트를 해줘야 합니다. 하지만 소프트웨어를 가져오는 소스 기반이 해외로 되어 있기 때문에 안그래도 시간이 걸리는 업데이트가 하루종일이 걸릴 수가 있습니다. 

1. 소스 레파지토리 (Source Repository) 한국으로 변경해주기 

$ 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 



를 커맨드 라인에 입력하셔서 업데이트 해 줍니다.

그리고 왼쪽 하단의 'Menu' 버튼을 클릭하시고 '패키지 관리자'를 실행해 줍니다. (아마 한글이 안 깔린 상태라면 'Package Manager' 란 이름일 것입니다) 

 
이런게 뜨면  '설정' - '저장소' 를 눌러서 화면을 띄웁니다. 그러면 나오는 화면에서 



 위처럼 클릭하시고 나온 화면에서 



이렇게 선택하시고 '서버 선택' 버튼을 클릭하시면 됩니다. 그리고 다시 '소프트웨어 소스' 화면에서 두번째 '기타 소프트웨어'탭을 클릭하셔서 http://packages.medibuntu.org 항목을 체크 해제 하거나 지워주세요. 


위 그림처럼 해주면 되지만 실은 이 부분은 커맨드 라인에서 해주는 작업하고 동일합니다. 만약 커맨드 라인 작업을 먼저 하셨다면 이 부분은 필요 없을  수도 있습니다. 

여기까지 마치셨으면 오른쪽 하단의 방패 마크를 클릭하셔서 나오는 화면에서 


 '새로 고침'을 눌러서 저장소 업데이트 해주고 위 그림처럼 '업데이트 설치' 를 눌러서 긴 시간동안 설치해주시면 최신 소프트웨어로 업데이트 됩니다. 

2. 한글 설정

아직 한글이 제대로 설정이 안되는 경향이 있습니다. 이것은 1번 작업을 했다면 손 쉽게 해결할 수가 있습니다.  왼쪽 하단의 'Menu' 버튼을 클릭하시고 '제어판'을 클릭하시면 (한글 디스플레이 표기 전이라면 Control Pannel 일 것입니다. 아마도..) 


에서 위 그림과 같이 'Language Support' 를 클릭하셔서 나오는 화면에서 무엇인가를 설치하겠냐고 물어보면 설치한다고 대답하시고 나오는 화면에서 

 


위 그림 처럼  저 버튼 (다시 말씀드리지만 한글 디스플레이가 안되는 상황이면 영어 일 수가 있습니다) 을 클릭하셔서 나온 화면에서 

 
위 그림처럼 선택해서 (제 경우에는 영어 표시였고 Korean 을 선택해 줬습니다) '바뀐 내용 적용' 을 클릭해서 적용하면 됩니다.

여기까지면 한글 언어 팩이 설정된 것이고 이제 한글 입력기를 설치할 차례 입니다. 한글 입력기는 우분투에서 쓰이는 기본인 iBus 가 민트에서는 제대로 동작 안됐던 기억이 있습니다. 아마 소소한 버그였는데 고쳐졌을 지도 모르지만 한번 디인 상태라 모험하긴 싫더군요. 따라서 나비 (nabi) 를 설치해 주기로 합니다.

$ sudo apt-get install nabi



라는 마법의 키워드 한번만 입력해 주면 설치 완료 입니다.  한글이 적용되는 것을 확인하기 위해서 'Log out' 했다가 다시 'Log in' 하면 적용 된 모습을 확인 하실 수 있습니다. 

참고로 이 포스트는 그 설치된 민트 리눅스 마야 버젼에서 작성되었습니다. (화면 캡쳐도 물론 입니다. 이 버젼에 포함된 화면 캡쳐  프로그램 정말 쓸만하군요. @.@ )  


 위 그림은 '죠죠의 기묘한 모험'에 나오는 악역인 디오 브란도 입니다. 이 디오는 죠죠라는 만화에서 특이한 위치를 차지하는 악역입니다. 심지어 죠죠가문 3대째에 이르는 악역이기도 합니다. (혈통으로는 4대째이지만) 잔혹하고 무자비하지만 부하들에게는 공포로 또는 위엄으로 군림하고 상당한 힘을 가지고 있는데도 불구하고 힘으로만 밀어 붙이는 타입도 아니고 상당히 간교합니다. 뭐 자세한 건 직접 보시면 되고 '죠죠 3부'에 나오는 디오는 특이한 능력을 가지고 있습니다. 시간을 멈추는 능력을 가지고 있는 스탠드 (더 월드 라고 합니다)를 활용해서 기술을 쓰는데, 주인공 파티가 그 능력을 파악하지 못하고 속수무책으로 당합니다. 그러다 한 파티원이 혹시 시간을 멈추는 것이 아닐까 라는 내용을 주인공한테 전달하고 주인공(쿠죠 죠타로)은 시간을 멈춘다는 능력을 '인식'하는 순간 '더 월드'의 능력은 더 이상 속수 무책의 능력이 아니게 됩니다. (사실 그 연유는 길고도 긴 사연이지만..) 

  길게 사설을 늘어 놓은 이유는 바로 '인식'에 관한 이야기를 하고 싶어서 입니다. 길고 긴 세월동안 프로젝트를 진행하며 수 많은 프로그램을 만들어오면서 만들어야 하는 것이 어떤 것인지 인식하지도 못하고 만들었던 적도 많습니다. 재밌는 것은 그러한 인식없이 만들기 시작하다 보면 만들면서도 뭐를 어떻게 해야 하는지 전혀 감이 안온다는 것입니다. 그렇지만 그런 상태에서 조금 더 이해하기 위해서 노력을 기울이다 보면 어느덧 만들어야 하는 것이 어떠한 원리로 돌아가는 것이고 왜 그런 방식으로 만들어야 하는지 명확하고 '단순'하게 인식될 때가 있습니다. 그런 그 순간이 복잡했던 프로젝트가 단순해지며 오픈소스를 쓰고 있더라도 어떤식으로 응용해야 할지 명확하게 드러나는 순간입니다. 안타깝게도 이러한 '인식'의 순간을 빨리 맞이하는 것은 연차가 짧을 때는 잘 되지 않았습니다. 이런 저런 전산적인 경험을 쌓고 나서야 (그럼에도 불구하고 순식간에 인식을 맛보는 것은 아직까지 가능하지가 않더군요..) 가능해 지더군요. 이러한 인식의 순간이 경험과 상관없이 빠르게 맞이하는 존재들을 세상에서는 천재라고 부르는 것이겠지요. 

  어렵고도 잘 이해가 안되는 프로젝트를 진행하고 있거나, 역시 비슷한 정도로 어려운 오픈소스를 파고 있다면, 아직 인식의 순간이 오지 않았기 때문에 어렵다고 생각하시면 될 것입니다. 그래도 조금씩 힘내서 이거 저거 '단순화' 시키려고 노력하시다 보면 갑자기 전체적인 형태가 파악되고 결국 간단한 구동 원리를 구현하기 위해서 여러가지 살을 붙이다 보니 지금 처럼 복잡하게 됐다는 것을 깨달으시게 될 것입니다. 


-- 오늘도 밤늦게 까지 개발하시는 개발자 여러분 파이팅 -- 

NDK (Native Development Kit Environment) 입니다. 구글은 Java 환경의 SDK 만 가지고 모든 것이 가능할 것이라고 주장했었으나, 몇 버젼 지나지 않아 자신들의 주장을 철회하고 Native C/C++ 프로그램이 가능한 NDK 를 공개했습니다. 

 왜 NDK 를 사용하는가에 관해서는 몇가지 이유가 있겠지만 

 - 빠른 연산을 위해서 (아무래도 C/C++ 이 자바 보다 속도가 빠른것은 주지의 사실입니다) 
 - 수많은 Open Source 들이 아직도 C/C++ 로 되어 있기 때문에


일단 이 두개를 크게 들 수가 있겠습니다. 그렇다고 해서 윈도우 다루는 부분까지 전부 NDK 로 하는 것을 추천하지는 않습니다. 속도가 필요한 부분이나 위에서 언급된 오픈 소스로 만들어진 라이브러리를 응용하는 부분에 사용할 것을 추천합니다. 

 NDK 를 컴파일 하기 위해서 알아야 할 구글에서 만들어둔 Makefile 입니다. Makefile 의 문법을 쓰고 있지만 세세하게 다 작성할 필요 없이 형태에만 맞춰주면 나머지는 빌드스크립트가 알아서 처리를 해 줍니다. 물론 이 방법 말고 OpenSource 를 컴파일하기 위해서는 방법이 따로 필요하지만 그 건 다른 포스트에서 다루기로 하겠습니다. 

 실제로 예제를 따라 만들어 보면 쉽게 이해가 될 것 같습니다. 
 

 NDK 를 개발하기 위한 준비 과정입니다. SDK 와 NDK 를 받아서 적당한 곳에 풀고 SDK 에 관련된 명령을 어디서든 실행할 수 있게 PATH 에 걸어주고, NDK 또한 어디서건 실행이 가능하게 PATH 에 걸어줍니다. 

안드로이드 프로젝트를 만들어줍니다. Eclipse (ADT) 에서도 만들어 줄 수 있지만 저는 기본적으로 Command Line 을 선호하므로 Terminal 에서 만들어 줍니다. 

필수로 입력해야할 내용들입니다. -n 은 프로젝트의 이름 (위에서는 HelloNDK) -t 은 현재 자신의 개발 머신에 설치되어 있는 SDK 버젼의 id 입니다. -k 는 패키지 명입니다. (위에서는 com.comjuck) -a 는 Activity 의 이름입니다. 

 디자인 부분을 손봐줍니다. 그냥 간단하게 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 


Android 부분이 에러 없이 컴파일 된다고 해도 실제로 Native Code 부분이 없기 때문에 실행하면 에러가 발생합니다. 따라서 Native 부분을 작성해 주는 과정입니다.  javah 명령을 이용해서 header 를 자동으로 생성해 주기로 합니다. javah 는 native 키워드가 붙은 부분에 대해서 자동으로 선언을 만들어 줍니다. (JNI 가 기본으로 제공해 주는 기능입니다) 

그래서 생성된 파일(이름에 주목하면 package 명 + Class 명이 합쳐진 형태)을 $PROJECT_PATH/jni 디렉토리로 복사해줍니다. 

Native 코드들이 위치하는 곳은 $PROJECT_PATH/jni 입니다. 

 Native Code 가 위치해야 하는 $PROJECT_ROOT/jni 에 javah 를 이용해서 생성해준 com_comjuck_MainActivity.h 에 대응하는 Body 를 만들어줍니다. 여기서는 HelloNDK.c 로 만들어 주고 위와 같은 코드를 채워줍니다. 

AndroidManifest.xml 파일을 열어서 이제부터 NDK 를 사용할 것이라는 것을 지정해줘야 합니다. 딱히 해줄것은 없고 minSDKVersion 정보를 최소 14로 맞춰주는 것입니다. 

Native Code를 컴파일 하기 위해서 필요한 Android 용 Makefile 입니다. 현재 지금 있는 것을 컴파일 하기 위해서는 단지 위와 같이 작성해주면 됩니다. 

Android.mk 의 예제입니다. 

LOCAL_PATH 는 ndk-build 가 실행될 때의 위치에 따라서 정보가 다르게 저장되긴 하지만 기본적으로 $PROJECT_ROOT/jni 을 지정하게 되어 있습니다. 

include $(CLEAR_VARS) 는 LOCAL_PATH 를 제외한 모든 LOCAL_ 로 시작되는 변수들이 초기화 됩니다. 왜 필요한가 의문을 가질 수 있지만 여러개의 프로젝트를 컴파일할 때 꼭 필요한 명령입니다. 

LOCAL_CFLAGS 는 추가해줄 컴파일 옵션에 관한 세팅입니다. 

LOCAL_MODULE 은 만들고자 하는 모듈의 이름입니다. 

LOCAL_LDLIBS 는 연결하고자 하는 링크옵션입니다. 

LOCAL_SRC_FILES 는 컴파일 될 대상인 소스파일들의 리스트입니다. 여기에 나열만 해주는 것으로 알아서 처리가 됩니다. 

include $(BUILD_SHARED_LIBRARY) 는 shared object (so 파일) 을 생성하기 위한 명령입니다. BUILD_STATIC_LIBRARY 는 static object (a 파일)을 만들어주기 위한 명령입니다. 

$PROJECT_ROOT 나 jni 디렉토리에서 ndk-build 만 입력하면 컴파일 됩니다. 그리고 다시 $PROJECT_ROOT 에 가서 ant -e debug 를 입력하셔서 다시 컴파일 해주시면 됩니다. 

여러가지 방법이 있겠지만 Command Line 을 이용하자면 

$ ant -e installd


를 이용하면 Device 에 인스톨 됩니다. 
 



기회가 닿아서 구글 크롬캐스트를 사용해보았습니다. 총체적인 평가를 해 보자면 

신기하다 + 아직 2% 부족하다. 

라는 점입니다. 

 

1. 광고와는 달리 보조전원이 꼭 필요하더군요. (어찌보면 당연하겠지만!! 광고에는 그런 언급 없었잖아!!)
2. 무엇이 문제인지 모르지만 초반에 공유기에 (wi-fi 공유기) 부하가 걸려서 공유기를 재부팅하고 난 뒤에 제대로 셋업이 됐습니다. 
3. 세팅이 되고나면 Android 앱에서든, Notebook 에서든 Wi-fi 로 공유되는 기계들에서는 영상+음성을 전송할 수가 있었습니다.   

 

세팅도 쉽고 편하게 전송이 되지만, 안드로이드에서는 지원되는 앱자체가 많지가 않고, 노트북에서는 크롬 브라우져에서 동작하는 것들만 화면+음성이 전송됩니다. 즉 앞으로 크롬캐스트가 활성화가 될려면 하드웨어 보다는 소프트웨어 면에서 발전이 있어야 할것 같다는 것입니다. 

+ Recent posts