zoukankan      html  css  js  c++  java
  • jni中c代码调用java代码

    原理是使用反射的机制

    java中反射的例子:

    Class<?> forName = Class.forName("com.example.ndkcallback.DataProvider"); //找到类
    Method declaredMethod = forName.getDeclaredMethod("helloFromJava", new Class[]{}); //找到类的方法
    declaredMethod.invoke(forName.newInstance(), new Object[]{}); //执行类的方法

    c语言也是一样的用反射的机制:

    ///jclass      (*FindClass)(JNIEnv*, const char*);
    jclass clazz=(*env)->FindClass(env,"com/example/ndkcallback/DataProvider");
    //  jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
    // 方法签名  参数和返回值
    jmethodID methodId=(*env)->GetMethodID(env,clazz,"helloFromJava","()V");
    // void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
    (*env)->CallVoidMethod(env,jobject,methodId);
    

      

    得到方法签名的方法:
    进入工厂classes目录下:
    C:UserszyDesktopworkspacejniTestinclasses>javap -s 类的全路径
    这样得到方法签名

  • 相关阅读:
    POJ 3253 Fence Repair
    POJ 2431 Expedition
    NYOJ 269 VF
    NYOJ 456 邮票分你一半
    划分数问题 DP
    HDU 1253 胜利大逃亡
    NYOJ 294 Bot Trust
    NYOJ 36 最长公共子序列
    HDU 1555 How many days?
    01背包 (大数据)
  • 原文地址:https://www.cnblogs.com/superPerfect/p/4264762.html
Copyright © 2011-2022 走看看