마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ndk 함수 사용 관련 질문입니다.

0 추천

java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String com.example.kiyoony.nwq.DecryptPassWord.DecryptPW(java.lang.String) (tried Java_com_example_kiyoony_nwq_DecryptPassWord_DecryptPW and Java_com_example_kiyoony_nwq_DecryptPassWord_DecryptPW__Ljava_lang_String_2)
            at com.example.kiyoony.nwq.DecryptPassWord.DecryptPW(Native Method)

라는 에러가 발생합니다.

java 클래스에서 선언부분 , h 부분 , cpp 구현 부분입니다.  뭐가 잘못된걸까요 .. 도저히 못찾겠습니다 ㅠㅠ 

public native String DecryptPW(String Data);
JNIEXPORT jstring JNICALL Java_com_example_kiyoony_nwq_DecryptPassWord_DecryptPW
        (JNIEnv *, jobject, jstring);
JNIEXPORT jstring JNICALL Java_com_example_kiyoony_nwq_DecryptPassWord_DecryptPW
        (JNIEnv * env, jobject obj, jstring msg) {}
Kiyoony (140 포인트) 님이 2015년 10월 2일 질문

1개의 답변

0 추천
음...

우선

c++이시내요. extern "C" { } 으로 JNIEXPORT 하실 함수는 묵여 있는지요?

다음으론 실함수 이름앞까지 패키기명 클래스명까지 정확하게 되어 있는지 확인해보세요.

현제로선 여기정도까지만 이야기해드릴수 있겠내요.
컴러기 (22,230 포인트) 님이 2015년 10월 2일 답변
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_kiyoony_nwq_DecryptPassWord */

#ifndef _Included_com_example_kiyoony_nwq_DecryptPassWord
#define _Included_com_example_kiyoony_nwq_DecryptPassWord
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_kiyoony_nwq_DecryptPassWord
 * Method:    DecryptPW
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_kiyoony_nwq_DecryptPassWord_DecryptPW
        (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

까지 h파일 부분이구요

JNIEXPORT jstring JNICALL Java_com_example_kiyoony_nwq_DecryptPassWord_DecryptPW
        (JNIEnv * env, jobject obj, jstring msg) {}
이게 cpp파일에 함수 부분입니다
extern 으로도 묶여있고 이름도 전부 다 비교해봐서 맞는거같은데 왜 안되는지 잘모르겠습니다...필요하면 소스전체부분 올리겠습니다ㅠㅠ
일단 다시 살펴보니 h에서 정의된 함수랑 cpp에서 정의된 함수가 별개로 인식되어지는 것이 아닌지 의심되어집니다.
왜 이런현상이 생겼는지는 소스의 다른부분들도 차분히 살펴보셔야할 것
같습니다.
이상하게 cpp 에서 h파일을 include 한건 인식을 하는데 함수 정의를 하면 자꾸 안먹히더라구요. 현재 JNI라는 폴더에 저 파일들이 모두 들어있는데 h에 선언되어있는 변수는 cpp파일에서 인지를 하는데 h에 선언되어 있는 함수는 cpp에서 정의를 해서 쓰더라도 말씀하신것처럼 별개로 인식되어지는거 같아요. 혹시나 해서 아주 간단하게 함수를 h 에 선언하고 cpp에 정의하더라도 이게 h와 cpp를 자꾸 다르게 인식을 하니 대체 무슨이유인지.. 버전문제일수도있나요이런게
...