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

 東東1959 发布于 2022-10-28 18:03

我想跟着《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/...
有没有高手遇到过这种情况呢?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有