这在Java中不会有问题,但在Kotlin中,我们没有静态的。我们有用于相同目的的伴随对象,但是,作为额外的对象,它们在 JNI 调用 (Java_package_Type00024Companion_function( 中得到一个损坏的名称,这与 JNI 的期望不匹配。显然,从主类调用它会导致 JNI 错误 GetStaticMethodID
.
可以将
@JvmStatic
注释添加到在配套对象上定义的函数中,以生成可以在 jni 调用中引用的静态方法。
从链接的 kotlin 文档中:
class C { companion object { @JvmStatic fun callStatic() {} fun callNonStatic() {} } }
// java C.callStatic(); // works fine C.callNonStatic(); // error: not a static method
在 kotlin 中使用外部关键字。
external fun nativeKey1() : String?
键.c 类:
Java_com_mobile_application_MyApplication_00024Companion_nativeKey1(
JNIEnv *env, jobject thiz) {
static const char randomStr[] = "89!Q4q+x#f6~iOL9@&c>2JY!s!x@2Ai-SbHYA@EenokBTE#NoTiE6jl4-5zovso@2Ai-SbHYAEenokBNoTiE6jl4SbHYA@EenokBTE";
char key[17] = {0};
// Start garbage code
int i = 0;
float j = 0;
int loop_count = 0;
for (i=0; i < loop_count; i++) {
int n = (i / 2) + 29 + i + 17;
key[0] = randomStr[n];
}
解决方法是在 Java 中创建一个包装器并从 Kotlin 使用它。