본문 바로가기

나의 플랫폼/안드로이드

[Android NDK] NDK Hello 실행하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
출처 : http://micropilot.tistory.com/1522

 링크로 가시면 문자열 값을 출력하는 것 까지 자세한 정보가 있습니다.
그대로 따라하시면 되는데요.
사이사이에 제가 겪은 문제점들을 적어 놀까 합니다.

1.  ../ndk-build 명령어를 쳤더니 

 
위와 같은 에러가 났을 경우.
혹시, android ndk 가 Program files 밑이나 띄어쓰기가 있는 이름 폴더의 하위 폴더 일 경우 인지 확인해보세요.
절대!  cygwin 설치에 문제가 아닙니다.

가장 안전한 방법!
c:\android-ndk-xxxx로 해놓으시는게 가장 좋을 듯!

2. cygwin 설치 시, ftp://ftp.kaist.ac.kr이 안보일 경우

그냥 아무거나 하셔도 됩니다. 한국 사이트라 다운로드 속도가 빠른 것 뿐! ㅋ

3.  .so파일까지 만들어지고 실행을 했는데!!!

05-11 15:57:23.210: ERROR/AndroidRuntime(4166): java.lang.UnsatisfiedLinkError: getMsgFromJni

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at com.motiveflux.ndk.hello.NdkHello.getMsgFromJni(Native Method)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at com.motiveflux.ndk.hello.NdkHelloActivity.onCreate(NdkHelloActivity.java:18)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at android.os.Handler.dispatchMessage(Handler.java:99)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at android.os.Looper.loop(Looper.java:123)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at android.app.ActivityThread.main(ActivityThread.java:3683)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at java.lang.reflect.Method.invokeNative(Native Method)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at java.lang.reflect.Method.invoke(Method.java:507)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

05-11 15:57:23.210: ERROR/AndroidRuntime(4166):     at dalvik.system.NativeStart.main(Native Method)



 위와 같은 에러가 발생하고 실행이 안될 경우!!!!

1. 함수에 패키지 명을 제대로 되어 있는지 확인해 보세요!
 package : android.test.ndk.hello 

NdkHello.c 파일 :

 jstring Java_android_test_ndk_hello_NdkHello_getMsgFromJni(JNIEnv *env, jobject thiz)

{
    return (*env)->NewStringUTF(env, "This message is from Native module");



NdkHello.h 파일 :

JNIEXPORT jstring JNICALL Java_android_test_ndk_hello_NdkHello_getMsgFromJni
  (JNIEnv *, jobject); 


2. Android.mk파일 확인

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := HelloLibrary

LOCAL_SRC_FILES := NdkHello.c

include $(BUILD_SHARED_LIBRARY)

 

그럼 제 경험담을 써 놓았습니다.
좋은 참고사항이 됐으면 좋겠습니다.^^