L. *_*ter 2 android android-ndk kotlin kotlin-android-extensions
我有一个 Kotlin 类,它只声明了一些用于 Kotlin 和 C/C++ 交互的方法:
class JNILib {
companion object {
external fun getAppId(): String
init {
System.loadLibrary("native-code")
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我在声明本机方法时遇到了问题。我试过
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
}
Run Code Online (Sandbox Code Playgroud)
伴随对象被实现为内部类的实例JNILib$Companion。这$必须出现在 C++ 函数的签名中,而您实现这一点的方法是使用转义序列_0XXXX,其中 XXXX 是 unicode 字符代码。的字符代码$是十六进制24,即转义序列是_00024,这意味着你的C++函数名变成了Java_com_package_JNILib_00024Companion_getAppId。
或者,你可以做getAppId的静态方法JNILib通过注释它@JvmStatic。你的 C++ 函数名应该是Java_com_package_JNILib_getAppId, 带参数JNIEnv *, jclass(注意jclass而不是jobject因为getAppIdnow 是一个类方法而不是一个实例方法)。
| 归档时间: |
|
| 查看次数: |
834 次 |
| 最近记录: |