Android JNI動態註冊

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

// 下面是動態註冊
JavaVM * jvm;
void register01(JNIEnv * env, jobject instance, jstring text) {
    const char * textValue = env->GetStringUTFChars(text, NULL);
    __android_log_print(ANDROID_LOG_DEBUG, "Hongx", "動態註冊的函數1執行了 %s", textValue);
    env->ReleaseStringUTFChars(text, textValue);
}
int register02(JNIEnv * env, jobject instance, jstring text) {
    const char * textValue = env->GetStringUTFChars(text, NULL);
    __android_log_print(ANDROID_LOG_DEBUG, "Hongx", "動態註冊的函數2執行了 %s", textValue);
    env->ReleaseStringUTFChars(text, textValue);
}
/*
 * typedef struct {
    const char* name;
    const char* signature;
    void*       fnPtr;
    } JNINativeMethod;
 */
static const JNINativeMethod jniNativeMethod[] = {
        {"registerJava01", "(Ljava/lang/String;)V", (void *)(register01)},
        {"registerJava02", "(Ljava/lang/String;)V", (int *)(register02)}
};

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * javaVm, void * pVoid) {
    jvm = javaVm;
    // 通過虛擬機 創建全新的 evn
    JNIEnv * jniEnv = nullptr;
    jint result = javaVm->GetEnv(reinterpret_cast<void **>(&jniEnv), JNI_VERSION_1_6); // 參數2:是JNI的版本 NDK 1.6   JavaJni 1.8
    if (result != JNI_OK) {
        return -1; // 主動報錯
    }
    const char * mainActivityClassStr = "com/hongx/jni/MainActivity";
    jclass mainActivityClass = jniEnv->FindClass(mainActivityClassStr);
    jniEnv->RegisterNatives(mainActivityClass, jniNativeMethod, sizeof(jniNativeMethod) / sizeof(JNINativeMethod)); // 參數三:到底要動態註冊幾個
    return JNI_VERSION_1_6;
}

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