Java调用C++,并在C++中回调Java
MainActivity.java文件:
package com.mytest.j2c;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
call2cpp();
}
public void callfromcpp(String str) {
TextView tv = findViewById(R.id.sample_text);
tv.setText(str);
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native void call2cpp();
}
native-lib.cpp文件:
#include <jni.h>
#include <string>
class myCpp
{
public:
myCpp() {
}
~myCpp() {
}
public:
void callfromjava(JNIEnv* jenv, jobject jobj) {
static jclass j_cla_MainActivity = jenv->GetObjectClass(jobj);
static jmethodID j_mID_callfromcpp = jenv->GetMethodID(j_cla_MainActivity, "callfromcpp", "(Ljava/lang/String;)V");
if(0 != j_cla_MainActivity && 0 != j_mID_callfromcpp) {
std::string str("Hello, java!");
jstring jstr = jenv->NewStringUTF(str.c_str());
jenv->CallVoidMethod(jobj, j_mID_callfromcpp, jstr);
jenv->ReleaseStringUTFChars(jstr, str.c_str());
}
}
};
myCpp cpp;
extern "C"
JNIEXPORT void JNICALL Java_com_mytest_j2c_MainActivity_call2cpp(JNIEnv* jenv, jobject jobj) {
cpp.callfromjava(jenv, jobj);
}
724

被折叠的 条评论
为什么被折叠?



