Android JNI學習08-AndroidStudio3.6 在JNI中創建java的實體類

鏈接: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方法

運行結果如下

Android JNI學習09-AndroidStudio3.6 在JNI中動態註冊java層的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章