안드로이드(Android) NDK 실행파일 프로젝트 예제

얼마 전에 안드로이드(Android) NDK로 실행파일을 만드는데 사용되는 BUILD_EXECUTABLE 이라는 변수를 소개 드렸습니다. 하지만 잘 되지 않는다고 말씀하시는 분들이 있어서 예제 파일을 제공해드립니다. 여기 있습니다.

hello.zip 파일을 NDK의 apps 디렉토리에 푸시면 됩니다. 디렉토리가 apps/hello/project 이런 식으로 되면 됩니다. 이제 Cygwin 에서 다음과 같은 명령을 통해 결과를 확인하실 수 있습니다. 저는 1.6 NDK를 사용했습니다. 생성되는 실행파일은 1.5 용입니다. 미리 1.5 버전의 에뮬레이터를 띄워두세요.

 
cd /your/ndk/root
make APP=hello
adb push apps/hello/project/libs/armeabi/hello /data
adb shell chmod 0775 /data/hello
adb shell /data/hello

 
hello 라는 글자가 인쇄되면 정상입니다.

 1.6 NDK로 만들어진 실행파일의 몇 가지 중요한 특성에 대해 부연 설명하겠습니다.

  •  1.5 버전의 API 를 사용합니다. 1.6 버전을 사용하시려면 옵션을 설정하셔야 합니다.
  • Release 모드로 빌드 되었습니다. 디버깅이 가능하기는 하지만 최적화 옵션이 동작 중이라 디버깅에는 적당하지 않습니다.
  • Thumb 코드가 생성되었고, Arm 코드와 혼용할 수 있도록 설정되어 있습니다.
  • 하드웨어 VFP를 사용하지 않습니다.

 참고로, 최근 릴리즈한 android-gcc 를 사용하면 좀 더 간단히 실행파일을 빌드 하실 수 있습니다. 다음 한 줄로 동일한 결과를 얻으실 수 있습니다.

android-gcc -DNDEBUG hello.c -o hello

관련 포스트:

4 comments to 안드로이드(Android) NDK 실행파일 프로젝트 예제

  • 대한민국토리

    질문인데요. 혹시 NDK에서 지원하지 않는 라이브러리는 어떻게 해야할지 조언을 구하고 싶습니다.
    말하자면 openssl을 지원하게 하고 싶은데요. 혹시 외부 라이브러리를 넣는 방법을 아시는지 궁금합니다.

  • NDK 예제들을 보면 모두 공유라이브러리를 포함하고 있습니다. 보통 이 라이브러리들은 JNI 연결을 위해 사용되지만, OpenSSL 과 같은 라이브러리를 더 포함하지 못할 이유는 없습니다. 다만 라이브러리의 이식은 직접 하셔야 하고, 때로 그리 쉬운 일이 아닐 수도 있습니다. 정적 라이브러리를 만들어 사용하시면 배포에 특별한 문제가 생기지는 않을 것이고, 동적 라이브러리를 사용하시는 경우도 경로 문제가 조금 까다로울 수 있으나 극복하기 힘들 정도의 문제는 아닐 것입니다.

  • 마이핑키

    안녕하십니까?
    C로 안드로이드 어플을 만들어보려고 이곳저곳 돌아다니면서 서핑을 하고 있는데 거의 대부분 hello 띄우는 것에서 멈추네요.
    혹시 실제 gui까지 적용하여 실제 apk 생성하는 것까지 힘들까요?
    실질적으로 apk를 생성해야 폰에 올려보고 뭘 할텐데 다들 콘솔에서까지만 정보를 주니 답답할 노릇이네요……

  • 점점 늘어나는 스팸 때문에 미처 보지 못해 답변이 늦었습니다. 간단하게 결론만 말씀드리자면, “Java없이 C만으로 apk 를 만드는 것은 불가능합니다. 둘을 혼용해야만 합니다.” 입니다.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>