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