JNI 方法命名规则详解:为什么 C++ 方法名需要以 "Java_" 开头?
在使用 JNI 编写 C++ 的动态链接库时,方法名通常需要按照一定的规则命名。这是因为 JNI 需要通过方法名来映射到 Java 类中对应的方法。
对于 C++ 的方法,JNI 规定了以下命名规则:
- 方法名的前缀为'Java_'。
- 然后是 Java 类的全限定名,使用下划线替换包名中的点号。
- 接着是方法名,保持原样。
- 最后是方法的签名。
例如,对于 Java 类'com.inertialocal.MainActivity' 中的方法'init',其完整的 JNI 方法名应为'Java_com_inertialocal_MainActivity_init'。
因此,为了正确映射到 Java 类中的方法,C++ 的方法名需要遵循上述命名规则。
所以,你在编写 C++ 的 so 库时,需要按照'Java_包名_类名_方法名' 的形式命名方法名。直接使用'init' 这样的命名是不符合 JNI 的命名规则的,会导致无法正确映射到 Java 类中的方法。
原文地址: https://www.cveoy.top/t/topic/qx0H 著作权归作者所有。请勿转载和采集!