리눅스 & 안드로이드2014. 7. 11. 10:11

얼마전에 Eclipse에서 NDK를 지원한다는 사실을 알게 되었다.
(2014/06/30 - [Linux & Android] - Android NDK에서 C++11 사용하기)

 

그 방법을 이용하면, source가 NDK로 빌드되어 .apk 패키지에 자동으로 .so 라이브러리가 포함되고, system uid가 필요하다거나 하는 특수한 경우가 아니라면, 아무런 문제 없이 잘 실행이 된다.

 

그런데, source가 아닌 binary로 존재하는 .so 라이브러리의 경우에는 어떻게 해야 하는지 잘 몰랐다.

 

처음에는 직감적으로 libs/armeabi (or armeabi-v7a)에 .so 파일을 복사해 두면 될거라고 생각했었는데, 잘 안되어 고민을 했었는데, 결과적으로는 그 방법이 맞았다.

 

즉, .apk에 포함시키고자 하는 .so 라이브러리를 (project root)/libs/armeabi (or armeabi-v7a) 디렉토리를 생성하고 복사 한 후, 프로젝트를 다시 빌드하면 된다.

 

그럼, 이전에는 왜 안됐냐?

 

Android Native Support 옵션을 설정 해 둔게 화근이었다.

 

이것을 설정하면 .cproject라는 파일이 project root에 생성되고, project clean을 수행하면 libs/ 디렉토리에 있는 모든 .so 파일을 삭제하고 다시 빌드를 시도한다. (물론 자동빌드 옵션이 선택 된 경우)

 

그렇다보니 .apk를 새로 생성하려고 project clean을 수행하면 .so 파일이 날아가고, 빌드된 후 복사 해 봐야 아무런 영향이 없었던 것이었다.

 

그냥 bin, gen 폴더만 날리고 다시 빌드를 한다면 Android Native Support 옵션을 설정 해 두었더라도 문제없이 해결이 되지 않았을까 하는 추측을 해 본다. 나중에 확인되면 업데이트를... ; )

 

Posted by 세월의돌