zoukankan      html  css  js  c++  java
  • Android NDK学习(四):C/C++层调用JAVA

    一、从C/C++层调用JAVA层代码(无参数调用)

        //在c代码里面调用java代码里面的方法
        // java 反射
        // 1 . 找到java代码的 class文件
        // jclass (*FindClass)(JNIEnv*, const char*);
        jclass dpclazz = (*env)->FindClass(env, "com/renhui/sffmpegandroidstreamer/MainActivity");
        if(dpclazz==0) {
            LOGI("find class error");
            return;
        }
        LOGI("find class ");
    
        //2. 寻找class里面的方法
        // jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
        jmethodID method1 = (*env)->GetMethodID(env,dpclazz,"helloFromJava","()V");
        if(method1==0){
            LOGI("find method1 error");
            return;
        }
        LOGI("find method1 ");
        //3. 调用这个方法
        // void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
        (*env)->CallVoidMethod(env,obj,method1);
    

    二、从C/C++层调用JAVA层代码(传参——字符串)

        //在c代码里面调用java代码里面的方法
        // java 反射
        //1 . 找到java代码的 class文件
        // jclass (*FindClass)(JNIEnv*, const char*);
        jclass dpclazz = (*env)->FindClass(env,"com/renhui/sffmpegandroidstreamer/MainActivity");
        if(dpclazz==0){
            LOGI("find class error");
            return;
        }
        LOGI("find class ");
    
        //2 寻找class里面的方法
        // jmethodID  (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
        jmethodID method1 = (*env)->GetMethodID(env,dpclazz,"helloFromJava","(Ljava/lang/String;)V");
        if(method1==0){
            LOGI("find method1 error");
            return;
        }
        LOGI("find method1 ");
        //3 .调用这个方法
        // void  (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
        (*env)->CallVoidMethod(env,obj,method1, (*env)-> NewStringUTF(env, "这是c反射调用java方法" ));
    
  • 相关阅读:
    【报错】ES报错找不到Gson类
    【报错】Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    【JUC】AtomicInteger源码
    【Netty】Netty服务启动源码
    【Netty】Netty实现简单RPC
    【Netty】心跳机制
    【Netty】Netty模型
    【Netty】Reactor模型
    C# 好狂的多线程呀
    select使用
  • 原文地址:https://www.cnblogs.com/renhui/p/8491762.html
Copyright © 2011-2022 走看看