gpt4 book ai didi

android - 如何声明在 kotlin 伴随对象中声明的 native cpp 方法?

转载 作者:行者123 更新时间:2023-11-29 15:36:11 25 4
gpt4 key购买 nike

我有一个 Kotlin 类,它只声明了一些用于 Kotlin 和 C/C++ 交互的方法:

class JNILib {

companion object {

external fun getAppId(): String

init {
System.loadLibrary("native-code")
}
}
}

但是我在声明 native 方法时遇到了问题。我试过了

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
}

最佳答案

伴随对象被实现为内部类 JNILib$Companion 的实例。 $ 必须出现在 C++ 函数的签名中,并且 the way you accomplish that是通过使用转义序列 _0XXXX,其中 XXXX 是 unicode 字符代码。 $ 的字符代码为十六进制 24,即转义序列为 _00024,这意味着您的 C++ 函数名称变为 Java_com_package_JNILib_00024Companion_getAppId

或者,您可以通过使用 @JvmStatic 注释使 getAppId 成为 JNILib 的静态方法.你的 C++ 函数名称应该是 Java_com_package_JNILib_getAppId,带有参数 JNIEnv *, jclass(注意 jclass 而不是 jobject 因为 getAppId 现在是类方法而不是实例方法)。

关于android - 如何声明在 kotlin 伴随对象中声明的 native cpp 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49554430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com