热修复系列文章:
深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
深入探索Android热修复技术原理读书笔记 —— 代码热修复技术
深入探索Android热修复技术原理读书笔记 —— 资源热修复技术
1. SO库加载原理Java Api 提供以下两个接口加载一个 so 库
System. loadLibrary (String libName):传进去的参数:so 库名称, 表示的 so 库文件,位于apk压缩文件中的 libs 目录,最后复制到 apk 安装目录下。
System, load (String pathName):传进去的参数: so 库在磁盘中的完整 路径。加载一个自定义外部 so 库文件。
上述两种方式加载一个 so 库,实际上最后都调用 nativeLoad 这个 native 方法去加载 so 库,这个方法的 fileName:so 库在磁盘中的完整路径名。
代码+图文的方式简述 so 库加载原理,下面的代码示例,stringFromJNI -> Java_com_taobao_jni_MainActivity_stringFromJNI 静态注册的 native 方 法,test->test 动态注册的 native 方法。
我们知道 JNI 编程中,动态注册的 native 方法必须实现 JNI_OnLoad 方法,同时实现一个 JNINativeMethod [] 数组,静态注册的 native 方法必须是 Java+类完整路径+方法名的格式。
总结下:
动态注册的 native 方法映射通过加载 so 库过程中调用 JNI_onLoad 方法调用完成。