背景知识
bug
函数重载和内部类类型作为某个重载函数的参数时,会触发javah生成的函数名不正确。
关键条件有2个:
- 函数重载
- 内部类类型作为重载函数参数
具体例子参考https://stackoverflow.com/questions/37230570/jni-javah-mangles-arguments-that-are-inner-classes
bug的现象简单说就是,javah的确会按照JNI的名称解析规则生成jni函数名,但是JVM在运行时确不会按照这个名字找,因此会出现运行时找不到函数的情况。
解决方案
- 有内部类类型作为参数的重载函数就别写成native
- 或者运行时的报错信息,手动把函数名改了
网友评论