// 下面是動態註冊
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;
}