JNI c代码回调java空方法

首先在class JNI中定义

public class JNI {
    static {
        System.loadLibrary("hello");//需要加载的so文件的名称
    }
    //传递两个int类型的变量给C
    public native void callbackvoidmethod();
    public void helloFromJava(){
        System.out.println("hello from Java");
    }
}
然后在c代码中写

JNIEXPORT void JNICALL Java_com_example_feisou_a02_1helloworld_JNI_callbackvoidmethod
        (JNIEnv *env, jobject thiz){
    jclass claz = (*env)->FindClass(env, "com/example/feisou/a02_helloworld/JNI");
    jmethodID methodID = (*env)->GetMethodID(env, claz, "helloFromJava", "()V");
    (*env)->CallVoidMethod(env, thiz, methodID);


}
1、获取字节码对象 jclass (*FindClass)(JNIEnv*, const char*);
2、获取Method对象 jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
3、通过字节码对象创建一个Object(即是claz)
4、通过对象调用方法
Android Studio的文件在工程目录app\build\intermediates\classes中,使用javap -s com.example.feisou.a02_helloworld.JNI可以生成签名


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值