在Android中从C++调用Java方法
在Android中从C++调用Java方法
我正在尝试在Java调用本地方法时从C++中调用一个简单的Java方法。以下是Java代码:
public class MainActivity extends Activity { private static String LIB_NAME = "name"; static { System.loadLibrary(LIB_NAME); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.textview); tv.setText(this.getJniString()); } public void messageMe(String text) { System.out.println(text); } public native String getJniString(); }
我尝试在Java调用本地方法的过程中从本地代码调用`messageMe`方法。
native.cpp:
#include#include #include 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(obj, messageMe, jstr); const char* str = env->GetStringUTFChars((jstring) jstr, NULL); printf("%s\n", str); env->ReleaseStringUTFChars(jstr, str); return env->NewStringUTF("Hello from JNI!"); }
在清理编译之后,应用程序停止,并显示以下错误消息:
ERROR/AndroidRuntime(742): FATAL EXCEPTION: main java.lang.NoSuchMethodError: messageMe at *.android.t3d.MainActivity.getJniString(Native Method) at *.android.t3d.MainActivity.onCreate(MainActivity.java:22)
显然,这意味着方法名错误,但在我看来它是正确的。