我有一个Kotlin类,它声明了一些Kotlin和C/C++交互的方法:
class JNILib {
companion object {
external fun getAppId(): String
init {
System.loadLibrary("native-code")
}
}
}但是,在声明本机方法时,我遇到了问题。我试过了
extern "C"
JNIEXPORT jstring JNICALL
Java_com_package_JNILib_getAppId(
JNIEnv *env, jobject /* this */){
// wrong
}
extern "C"
JNIEXPORT jstring JNICALL
Java_com_package_JNILib_Companion_getAppId(
JNIEnv *env, jobject /* this */){
// wrong
}发布于 2018-03-29 16:15:54
同伴对象被实现为内部类JNILib$Companion的实例。$必须存在于C++函数的签名中,而你做到这一点的方式则使用转义序列_0XXXX,其中XXXX是unicode字符代码。$的字符代码是十六进制24,即转义序列是_00024,这意味着您的C++函数名变成了Java_com_package_JNILib_00024Companion_getAppId。
或者,您可以通过用getAppId对JNILib进行注释,使其成为JNILib的静态方法。然后,您的C++函数名应该是Java_com_package_JNILib_getAppId,带有参数JNIEnv *, jclass (注意jclass而不是jobject,因为getAppId现在是类方法而不是实例方法)。
https://stackoverflow.com/questions/49554430
复制相似问题