- My Reviews & etc

김진철
- 작성일
- 2019.8.30
안드로이드의 모든 것 NDK
- 글쓴이
- 고현철,전호철 공저
한빛미디어
모바일 세계의 두 축은 애플OS와 안드로이드입니다. 다만 안드로이드 생태계를 이끄는 구글은 자체 생산 시스템을 갖지 않다 보니 다른 업체에 물리적 제조를 대행시켜 소비자를 만납니다. 물론 안드로이드 OS가 해당 기기의 소프트웨어 전부는 아니며, 상당 비중으로 각 하드웨어 메이커들이 개별 제품에의 최적화를 위해 별도 펌웨어를 만들어 적용합니다. 그러나 안드로이드는 여전히 폰의 대뇌이자 척수 노릇을 수행하며 갤럭시를 비롯한 여러 스마트폰은 이 생태계 안에서만 생존이 가능하죠. 따라서 안드로이드를 이해하는 건 모바일이 주도하는 가상세계 질서의 절반을 파악하는 것과 같습니다.
p21을 보면 "구글은 자바 애플리케이션 개발을 위해 SDK(software development kit)을 제공하고, C나 C++로 작성된 네이티브 라이브러리를 사용할 수 있도록 NDK를 제공한다"고 쓰였습니다. 그 뒷부분에도 서술되었지만 원래 구글 안드로이드 소스는 모두에게 공개되며 이 점에서 애플 OS나 마이크로소프트 윈도와 다릅니다. 그런데 저 SDK나 NDK는 개발자에게 그 전체 소스 코드 중 필요한 부분만 잘 추려서 편의를 배려하여 제공한 것이죠. 아무튼 이렇게 해서 구글은 애플에 비해 후발주자인 점, fabless인 점을 만회하려는 의도이겠습니다.
저자들이 가장 높이 평가하는 건 특히 Ant를 이용한 컴파일인데, 저작권 문제도 있고 가능하면 자바 코드를 쓰지 않으려는 게 최근의 추세입니다. PC 윈도 프로그램 설치파일은 대개 .exe 포맷이었습니다만 안드로이드에서는 이게 .apk 형식입니다. 저자들이 강조하는 건, 안드로이드 앱에서 구태여 무겁게 이클립스를 쓸 필요가 있겠으며, 따라서 apk 파일도 Ant를 이용해서 한번 짜 보자는 겁니다. 이후의 모든 과정은 예제를 통해 p41 이후에 나옵니다. 물론 Ant도 책에 나오듯이 기본적으로 자바로 만든 컴파일 도구입니다.
특히 제가 도움을 받은 부분은 p73에서 자바와 네이티브에서 사용되는 타입에 대해 설명한 대목입니다. 예를 들어 자바에서 float인 게 네이비트에서는 jfloat이며 타입 시그니처는 F입니다. 저자는 특히, JNI를 사용할 때에는 메서드 서명이 중요하기 때문에, 혹 작성시에 글자 하나가 잘못되면 자바가 해당 메서드를 찾지 못하게 되므로 특히 조심하라고 합니다.
자바코드를 수정하려면 먼저 NDK를 이용하는 부분을 별도의 클래스로 분리하라고 합니다(p105). 이때 먼저 클래스 생성창을 열고, Name에 plusForJNI를 입력한 후 새 클래스 파일이 생성되게 합니다. 이 과정이 화면캡처와 함께 자세히 설명되므로 그냥 따라만 해 봐도 어렵지 않게 과정이 습득됩니다. 한빛미디어 교재들의 가장 큰 장점입니다.
또 많은 이들이 어려워하는 게 라이브러리 의존성 문제(p116)입니다. 저자들의 말에 따르면 라이브러리 로딩, 참조 순서가 약간만 차이가 나도 아예 애플리케이션이 그냥 죽어버리곤 했다고 합니다. 수정 과정에서 약간 저리 바꿨을 뿐인데도 시작 자체가 안 되었다는 게 사실 하드웨어 구조를 잘 모르는 개발자들로서는 디버깅 과정에서 당황할 만합니다. 이 교재는 이처럼 개발 과정에서 있을 수 있는 여러 시행 착오를 솔직하게 공유하며 독자 실력 향상에 결과적으로 기여하는 점도 좋았습니다.
- 좋아요
- 6
- 댓글
- 0
- 작성일
- 2023.04.26
댓글 0

댓글이 없습니다.
첫 번째 댓글을 남겨보세요.