在Android中从C++调用Java方法

15 浏览
0 Comments

在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)

显然,这意味着方法名错误,但在我看来它是正确的。

0