2
回答
关于深入理解JNI疑惑
华为云实践训练营,热门技术免费实践!>>>   

@邓凡平 你好,想跟你请教个问题:最近在看您的《深入理解Android:卷一》,在第二章讲JNI处您写道JNI层和Native层各有一个库,即libmedia_jni.so和libmedia.so,其中libmedia.so完成实际的功能,而libmedia_jni.so主要完成java层的交互,我的理解是java调用jni层的so,而jni层so调用native层的so,但是您书中就介绍了java层加载JNI库,和JNI层相关函数的注册,并没有涉及到Native层的具体实现,也没有提到Native层的so文件,我在网上也找了些资料,基本上所有的都只涉及到一个so文件,直接就是一个java加载一个so文件实现相应功能,所以我比较疑惑,我很想知道完整的调用流程是什么,希望您能解答,谢谢!

举报
peng_cc
发帖于4年前 2回/366阅
共有2个答案 最后回答: 4年前

java 调用 libmedia_jni.so, libmedia_jni.so起来的时候,如果有调用其他动态链接库,会在系统配置的动态链接库的目录下面去查找所需要的动态链接库,如果找不到则失败,会导致java调用JNI的动态链接库也失败。 这些东西是C、C++里面的。

至于libmedia_jni.so 调用 libmedia.so应该是作者为了分层而设计的,理论上合并到同一个so也是可以的。

--- 共有 1 条评论 ---
邓凡平兄弟,你的回答是正解 呵呵 4年前 回复

引用来自“newzai”的评论

java 调用 libmedia_jni.so, libmedia_jni.so起来的时候,如果有调用其他动态链接库,会在系统配置的动态链接库的目录下面去查找所需要的动态链接库,如果找不到则失败,会导致java调用JNI的动态链接库也失败。 这些东西是C、C++里面的。

至于libmedia_jni.so 调用 libmedia.so应该是作者为了分层而设计的,理论上合并到同一个so也是可以的。

谢谢!还在学习中。。
顶部