繁体   English   中英

JNI C ++ android app在调用函数时崩溃

[英]JNI C++ android app crashes when call function

我有一个.cpp文件用于android上的java:

#include<iostream>
#include<jni.h>

jint Java_com_example_gatsj_tutorjatek_MainActivity_Sum(JNIEnv* env, jobject obj)
{
    return 5;
}

我在这里用它:

package com.example.gatsj.tutorjatek;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity
{
    public native int Sum();

    static
    {
        System.loadLibrary("TestCPP");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        int x = Sum();//IF I REMOVE THIS LINE THE APP DOESN'T CRASH
    }
}

我使用Gradle和这个CMakeLists.txt在Android Studio中构建它:

cmake_minimum_required(VERSION 3.4.1)

add_library( # Specifies the name of the library.
             TestCPP

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/TestCPP.cpp )

当我在手机上启动应用程序时,它会崩溃。 但是如果我删除“int x = Sum();” 线,应用程序可以启动。

“loadLibrary”和“native”方法部分仍在代码中但没有“int x = Sum();” 线,该应用程序不会崩溃。

我如何使用Sum()方法? 是什么原因造成的?

由于使用的是C ++而不是C,因此您应该将您的本机方法的定义包含在cpp文件中的extern "C"中。

extern "C" {
    // your native method definations.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM