Android上so库的函数加载顺序验证

加载执行顺序: _init->xxx_init->JNI_OnLoad,记在这里,备忘。

验证代码:

#include 
#include 
#include 
#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()");
}

你可能感兴趣的:(Android,Android,so,函数加载顺序)