Android studio 在android studio的C代码中输入JNI函数时出现art_sigsegv_错误

Android studio 在android studio的C代码中输入JNI函数时出现art_sigsegv_错误,android-studio,kotlin,java-native-interface,Android Studio,Kotlin,Java Native Interface,我正在使用Kotlin和JNI,因为我想把一个C程序移植到Android上,我想知道为什么我现在一碰到JNI函数的断点就会出现art_sigsegv_故障 科特林代码: import com.root.Main class SettingsScreenActivity : AppCompatActivity() { private val MainC = Main() fun startButton(view: View) MainC.callMainFro

我正在使用Kotlin和JNI,因为我想把一个C程序移植到Android上,我想知道为什么我现在一碰到JNI函数的断点就会出现art_sigsegv_故障

科特林代码:

import com.root.Main

class SettingsScreenActivity : AppCompatActivity() {

    private val MainC = Main()

    fun startButton(view: View)
        MainC.callMainFromJNI("test")
    }
}
美因茨

JNIEXPORT void JNICALL Java_com_root_hping2_Main_callMainFromJNI(JNIEnv *env, jobject pThis, jstring argument){

    printf("Size of char: %ld byte\n",sizeof(char));
    return;
}
断点在printf上,但是,当我去调试时,我得到art_sigsegv_fault错误,并且我无法看到任何参数的值。这是在Android Studio中

编辑: 当我删除jstring参数并且不将字符串传递到函数中时,它工作正常。原因是什么

答案在以下范围内:

这看起来是一个关于API仿真器和使用哪个版本的错误。如果版本降级为API 25,则没有问题。同样,如果应用程序构建在设备上而不是仿真器上,将有助于解决此问题。

答案在:


这看起来是一个关于API仿真器和使用哪个版本的错误。如果版本降级为API 25,则没有问题。同样,如果应用程序是在设备而不是仿真器上构建的,则有助于解决此问题。

无法使用仿真器进行复制。请提供一个最小的、完整的、可验证的例子。我遇到了同样的问题,只有java,不是KoTLN,JNI文件是直C,不是C++。如果我去掉所有的jstring参数,它就会工作,调试器允许我单步执行JNI代码,并成功返回。但是,如果我重新添加jstring参数,并调整类声明以提供一个字符串作为参数,我会得到与art_sigsegv_错误报告相同的崩溃。该函数接受前面的jint参数,这是在没有第二个jstring参数的情况下工作的。似乎与添加的jstring参数明显相关,但可能不相关。无法使用仿真器复制。请提供一个最小的、完整的、可验证的例子。我遇到了同样的问题,只有java,不是KoTLN,JNI文件是直C,不是C++。如果我去掉所有的jstring参数,它就会工作,调试器允许我单步执行JNI代码,并成功返回。但是,如果我重新添加jstring参数,并调整类声明以提供一个字符串作为参数,我会得到与art_sigsegv_错误报告相同的崩溃。该函数接受前面的jint参数,这是在没有第二个jstring参数的情况下工作的。看起来显然与添加的jstring参数有关,尽管可能不是。