调用jniRegisterNativeMethods(…)函数注册JNI后,emulator总是停在启动界面,进不了系统。

我想跟着《Android系统源代码情景分析》第2章,把从驱动到HAL到应用层做一遍,可是做到JNI层,只要调用了jniRegisterNativeMethods(…)函数注册接口列表,编译Android源码,启动emulator就停在启动界面,再也进不了系统了。代码如下:

// JAVA本地接口方法表
static const JNINativeMethod method_table[] = {
   {"init_native",  "()I",    (void*)ha_init},
   {"setValue_native", "(II)V",   (void*)ha_setValue},
   {"getValue_native", "(I)I",  (void*)ha_getValue},
};
// 注册Java本地接口方法
int register_android_server_HAService(JNIEnv *env)
{
    return jniRegisterNativeMethods(env, "com/android/server/HAService",
            method_table, NELEM(method_table));
}

register_android_server_HAService(JNIEnv *env)函数在frameworks/base/services/core/jni/onload.cpp中被添加到JNI_OnLoad()函数的尾部。
如果我把return jniRegisterNativeMethods(...)这一行注掉,就能正常跑通,加上这一行,哪怕我把method_table[]中的元素全都删掉,emulator也总是走到启动界面,再也进不了系统了。
我的Android源码是6.0.1_r11,具体的步骤可参见:http://palanceli.com/2016/08/…
有没有高手遇到过这种情况呢?