C代码调用Java代码
-
C代码调用Java代码应用场景
- 复用已经存在的java代码
- c语言需要给java一些通知
- c代码不方便实现的逻辑(界面)
-
反射
//1.加载类字节码 Class clazz = Demo.class.getClassLoader().loadClass("com.example.Dialog"); //2.获取方法 Method method = clazz.getDeclaredMethod("showDialog",String.class); //3.调用方法 method.invoke(clazz.newInstance(), "德玛西亚");
-
C代码调Java代码步骤
//1. 加载字节码 //jclass (*FindClass)(JNIEnv*, const char*); jclass clazz = (*env)->FindClass(env, "cn/loaderman/ccalljava/MainActivity"); //2. 获取方法id //方法签名:唯一确定一个方法 javap -s 包名.类名 //在bin/class目录中调用命令行 //jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*); jmethodID methodId = (*env)->GetMethodID(env, clazz, "showDialog", "(Ljava/lang/String;)V"); //3. 调用方法 //void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...); (*env)->CallVoidMethod(env, thiz, methodId, (*env)->NewStringUTF(env, "德玛西亚,人在塔在"));
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!