Android의 C에서 Java 메서드 호출: 자세한 안내
C에서 Java 메서드를 호출하는 것은 Android 개발의 일반적인 작업입니다. 이 글의 목적은 Java 및 C 코드를 자세히 살펴보고 이 프로세스 중에 발생할 수 있는 일반적인 오류를 해결하여 이 문제에 대한 포괄적인 솔루션을 제공하는 것입니다.
Java 코드 설정
제공된 Java 코드는 C에서 문자열을 반환하는 getJniString() 메서드를 사용하여 MainActivity라는 클래스를 정의합니다. C에서 호출하려는 messageMe() 메소드는 수신된 텍스트를 간단히 인쇄합니다.
<code class="java">public class MainActivity extends Activity { ... public void messageMe(String text) { System.out.println(text); } ... }</code>
C 코드
native.cpp의 C 코드 MainActivity 클래스를 찾고, messageMe() 메서드를 검색하고, jstr 문자열 개체에서 호출하려고 시도합니다. 그러나 오류 메시지 "java.lang.NoSuchMethodError: messageMe"는 messageMe() 메서드를 찾을 수 없음을 나타냅니다.
<code class="cpp">jstring Java_the_package_MainActivity_getJniString( JNIEnv* env, jobject obj, jint depth ){ jstring jstr = env->NewStringUTF("This string comes from JNI"); jclass clazz = env->FindClass("the/package/MainActivity"); jmethodID messageMe = env->GetMethodID(clazz, "messageMe", "(Ljava/lang/String;)V"); env->CallObjectMethod(jstr, messageMe); ... }</code>
수정
오류 두 가지 문제로 인해 발생합니다:
<code class="cpp">jstring Java_the_package_MainActivity_getJniString( JNIEnv* env, jobject obj, jint depth ){ jstring jstr = env->NewStringUTF("This string comes from JNI"); ... jstring result = env->CallObjectMethod(obj, messageMe, jstr); ... }</code>
업데이트된 C 메서드
<code class="cpp">jstring Java_the_package_MainActivity_getJniString( JNIEnv* env, jobject obj, jint depth ){ jstring jstr = env->NewStringUTF("This string comes from JNI"); ... jstring result = env->CallObjectMethod(obj, messageMe, jstr); const char* str = env->GetStringUTFChars(result, NULL); printf("%s\n", str); ... }</code>
결론
객체 호출 및 JNI 서명 불일치 문제를 해결함으로써 C 코드에서 messageMe() 메서드를 성공적으로 호출할 수 있습니다.
위 내용은 Android에서 C에서 Java 메소드를 호출할 때 \'java.lang.NoSuchMethodError: messageMe\'를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!