提兵百万西湖上,立马吴山第一峰!这篇文章主要讲述JNI C ++ android app在调用函数时崩溃相关的知识,希望能为你提供帮助。
我有一个.cpp文件用于android上的java:
#include<
iostream>
#include<
jni.h>
jint Java_com_example_gatsj_tutorjatek_MainActivity_Sum(JNIEnv* env, jobject obj)
{
return 5;
}
【JNI C ++ android app在调用函数时崩溃】我在这里用它:
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文件中将本机方法的定义包含在qazxsw poi中。
extern "C"
推荐阅读
- Android Room持久性库@Update无效
- 如何更改Android中的汉堡包图标(导航抽屉)
- 如何从android API 23和更高版本的操作栏中删除阴影
- 在动作栏android中显示徽标和应用程序名称
- Android棒棒糖中的透明actionBar和statusBar
- Xamarin - 取代操作栏(Android 7.1 - API 25)
- android中的pidstat命令()
- 如何在android中实现视图滑动
- java.lang.NoClassDefFoundError(解析失败:Lcom / google / android / gms / common / internal / zzbp)