鏈接:https://pan.baidu.com/s/1zB9r5WwuTMIPNMlYl5HlvA
提取碼:5ndl
先創建實體類Bean
public class Bean {
public String info;
public Bean(String info){
this.info = info;
}
public void jniCall(){
System.out.println(info);
}
}
創建native
創建對應的native實現函數
extern "C"
JNIEXPORT void JNICALL
Java_com_example_jnistudy_MainActivity_createBean(JNIEnv *env, jobject thiz) {
}
開始編寫對象的創建代碼
先找到Bean的class
jclass cls = env->FindClass("com/example/jnistudy/Bean");
獲取構造函數的MethodId
jmethodID constuct = env->GetMethodID(cls,"<init>", "(Ljava/lang/String;)V");
利用class 和 MethodId 創建java對象
jstring nameStr = env->NewStringUTF("JNI 創建了 Bean 對象");
jobject bean = env->NewObject(cls,constuct,nameStr);
創建對象成功後,調用對象的jniCall()
jmethodID jniCall = env->GetMethodID(cls, "jniCall", "()V");
env->CallVoidMethod(bean,jniCall);
完整代碼如下
extern "C"
JNIEXPORT void JNICALL
Java_com_example_jnistudy_MainActivity_createBean(JNIEnv *env, jobject thiz) {
jclass cls = env->FindClass("com/example/jnistudy/Bean");
jmethodID constuct = env->GetMethodID(cls,"<init>", "(Ljava/lang/String;)V");
jstring nameStr = env->NewStringUTF("JNI 創建了 Bean 對象");
jobject bean = env->NewObject(cls,constuct,nameStr);
jmethodID jniCall = env->GetMethodID(cls, "jniCall", "()V");
env->CallVoidMethod(bean,jniCall);
}
在MainActivity中調用native方法
運行結果如下