java本机接口方法和模块名称的命名约定是什么?

java本机接口方法和模块名称的命名约定是什么?,java,android,java-native-interface,Java,Android,Java Native Interface,我能够很好地学习jni教程。但是当我更改方法名称时,我遇到了麻烦。我是否需要遵循命名约定?本教程使用HelloJNI作为模块名和库名。我使用了“UseAacom”。来自: 动态链接器根据条目的名称解析条目。本机方法名称由以下组件连接而成: 前缀Java 损坏的完全限定类名 下划线()分隔符 损坏的方法名 对于重载的本机方法,两个下划线(\uu)后跟损坏的参数签名 因此,如果您有以下情况: package com.foo.bar; class Baz { public native

我能够很好地学习jni教程。但是当我更改方法名称时,我遇到了麻烦。我是否需要遵循命名约定?本教程使用HelloJNI作为模块名和库名。我使用了“UseAacom”。

来自:

动态链接器根据条目的名称解析条目。本机方法名称由以下组件连接而成:

  • 前缀
    Java
  • 损坏的完全限定类名
  • 下划线(
    )分隔符
  • 损坏的方法名
  • 对于重载的本机方法,两个下划线(
    \uu
    )后跟损坏的参数签名
因此,如果您有以下情况:

package com.foo.bar;

class Baz {
    public native void Grill(int i);
}
那么相应的C函数应该是:

JNIEXPORT void JNICALL Java_com_foo_bar_Baz_Grill(JNIEnv*env,jobject thiz,jint i);
如果Java方法名称中有下划线:

public native void A_Grill(inti);
那么C函数将是:

JNIEXPORT void JNICALL Java_com_foo_bar_Baz_A_1Grill(JNIEnv*env,jobject thiz,jint i);

\u 1
转义序列与
A\u Grill
中的
\ucode>匹配,您可以根据语言规则在Java级别随意调用包、类和方法,但C级别的命名约定完全由
javah
工具的输出定义


您可以根据文件名规则和“System.load()/loadLibrary()”规则调用共享库。方法名必须与JNI函数名匹配。