作者:物业美女_959 | 来源:互联网 | 2023-09-23 20:03
首先在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可以生成签名