在使用JNI编写C++的动态链接库时,方法名通常需要按照一定的规则命名。这是因为JNI需要通过方法名来映射到Java类中对应的方法。

对于C++的方法,JNI规定了以下命名规则:

  1. 方法名的前缀为"Java_"。
  2. 然后是Java类的全限定名,使用下划线替换包名中的点号。
  3. 接着是方法名,保持原样。
  4. 最后是方法的签名。

例如,对于Java类com.inertialocal.MainActivity中的方法init,其完整的JNI方法名应为Java_com_inertialocal_MainActivity_init

因此,为了正确映射到Java类中的方法,C++的方法名需要遵循上述命名规则。

所以,你在编写C++的so库时,需要按照Java_包名_类名_方法名的形式命名方法名。直接使用init这样的命名是不符合JNI的命名规则的,会导致无法正确映射到Java类中的方法。

extern CJNIEXPORT jstring JNICALLJava_com_inertialocal_MainActivity_initJNIEnv env jobject thiz jstring inputjstring configPath c++的so库 里面的方法名一定要Java_com_inertialocal_MainActivity_init这种形式吗可以直接init这样吗

原文地址: http://www.cveoy.top/t/topic/iR0W 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录