加载执行顺序: _init->xxx_init->JNI_OnLoad,记在这里,备忘。
验证代码:
#include <jni.h>
#include <stdlib.h>
#include <pthread.h>
#define LOG_TAG "DexHelper"
#include "Log.h"
/*** 加载执行顺序: _init->xxx_init->JNI_OnLoad ***/
extern "C"
void _init() {
// 编译生成后在.init段
LOGV("_init()");
}
extern "C"
void _fini() {
// 编译生成后在.fini段
LOGV("_fini()");
}
extern "C" __attribute__((constructor))
void DexHelper_init() {
// 编译生成后在.init_array段
LOGV("DexHelper_init()");
}
extern "C" __attribute__((destructor))
void DexHelper_exit() {
// 编译生成后在.fini_array段
LOGV("DexHelper_exit()");
}
extern "C"
JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
LOGV("JNI_OnLoad()");
JNIEnv *env = NULL;
if (vm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK) {
return -1;
}
return JNI_VERSION_1_4;
}
extern "C"
JNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved) {
LOGV("JNI_OnUnload()");
}
|