jni
出现No implementation found for...
是因为在so
运行的时候,找不到与头文件对应的方法实现,记录下我碰到的出现这种问题的原因以及处理方式:
一、java包路径与jni头文件中的签名包路径不一致
这点是jni
的规则,一般jni
头文件是通过命令生成,不建议手动修改。
二、c或cpp文件未引入 (include) jni头文件
这种是属于粗心大意引起的问题
三、未加载so 或 so加载失败 或 加载的so与java代码不匹配
1、在so
加载失败的时候,及时抛出异常或警告信息
2、若新增java native
方法,然而加载成功的so
仍然是旧版本so
,调用也会抛出异常。针对这种情况,在so
中增加读取版本号方法,确保加载成功的so
版本号与java
代码版本号一致