Java调用C++,并在C++中回调Java

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);
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值