별빛의 낙하지 :: [리뷰] 안드로이드의 모든 것 NDK:C/C++을 이용한 안드로이드 앱 개발 방법

  지난 3년간 안드로이드와 관련된 부분들은 주로 앱을 만드는 것부터 시작해서 안드로이드 프레임웍까지 관심을 가져왔다.  이 책은 '안드로이드의 모든 것 분석과 포팅' 이후 버전으로 나온 책으로 서문에 따르면, 원래 이전 책에서 다루고 싶었지만, 시간 관계상 미뤄졌던게 드디어 책으로 나왔다고 한다.

  국내에서 안드로이드의 구조를 분석한 책은 몇권 되지 않아서, 개인적으로 다 보았었는데(저자의 이전 책 포함), 편집이나 흐름 자체가 이전 책과 비슷한 맥락이다.

  책은 전반적으로 NDK를 다루고 있고, 현재 나와 있는 NDK로 지원안되는 부분들에 대한 방법(PDK)도 제시하고 있다.  (어차피 NDK나 SDK나 PDK에 포함되는 관계이므로 라는 설명으로)

  책 전반적인 구성은 JNI와 같은 C/C++와 자바를 이어주는 가교부터 시작해서, 빌드하는 방법, NDK 관련해서는 주로 지원되는 라이브러리(OpenGL, Neon 등)와 관련된 예제에 대한 설명이 주를 이룬다.  Makefile 관련해서는 필요한 설명만 되어 있어서,  실습할 때 발생하는 예외적인 경우는 구글링으로 찾아봐야 될 것이다. 

  책을 읽으면서 좋았던 부분중에 하나는 저자가 이전에 실제 삽질한 결과나 고생했던 것에 대한 케이스에 대한 설명이 있다는 것이고(ex) 라이브러리를 불러 오는 과정에 있어서 순서가 꼬인 경우), 전반적으로 학습하기에 정리가 잘 되어 있다는 점이다.(처음 부터 예제를 설명하지 않는다. 필요한 기본 선수 지식에 대한 설명이 되어 있다.)

  책을 읽으면서 인상깊었던 부분은 예전에 과제를 진행하면서 불편하지만, 있는지 조차 몰라서 쓰지 못했던 것들이다.  나같은 경우 JNI쪽의 SWIG을 비롯해서 디버깅쪽에 addr2line, ndk-gdb 등이다.

  또한 중반 이후로 순수(?) NDK를 지나서 PDK로 넘어가게 되면 직접적으로 binder 의 개념자체가 필수불가결하게 되는데, 이러한 설명이 구조와 연관된 부분이라 이 책에서는 많이 다루지 않아서 이 부분은 이책만 봐서는 이해하기 힘들것이다.

  그리고 Appendix 에서 안드로이드와 관련해서 대략적인 설명을 하고 있는데, NDK와 관련해서 큰 그림을 먼저 알고 싶다면, 먼저 봐도 괜찮을 것 같다.

  아쉬운점으로 IT 전공서적의 특징상 책의 소스코드가 사실 그렇게 보기 좋게 나열된 것은 아니다.  소스코드가 끝난 다음에서야 설명이 등장하는 식인데,  주석처럼은 아니지만 중간중간에 설명을 인라인화 시키는 것이 가독성 측면에서 어떨까 생각한다.


<덧붙여>

혹시나 NDK를 모르는 사람들을 위해서 한가지 이야기를 하자면, 기존의 안드로이드 앱 개발방식이 SDK를 통한 자바 개발환경이었다면, NDK는 C/C++ 환경을 제공한다는 것이다. 여기서 NDK에 대해서 자바 코드가 전혀 없이 순수하게 C/C++로 작성하는 방법이라고 잘못 알고 있는 경우도 있는데 그렇지 않다.  java 코드에서 jni 인터페이스를 통해서 C/C++ 라이브러리를 호출하는 것이 NDK이다. 심지어 액티비티를 네이티브 수준으로 끌어 내리는 NativeActivity 예제만 봐도 java 코드에서 C/C++로 작성된 so library를 로드하여 콜백 하는 형태로 되어 있다.