Android Studio 写一个Java调用c++ 的demo

前提条件:

  • 本地已经配置好了ndk环境,如果没有配置好,建议参考macos 配置ndk环境-CSDN博客 这篇链接。

新建一个Empty Project

Android Studio 写一个Java调用c++ 的demo_第1张图片

比如我这里的Project的名字是HelloJNI,包名是com.example.hellojni

然后在src目录下,右键选择Add C++ to Module

Android Studio 写一个Java调用c++ 的demo_第2张图片

然后展示的目录如下所示:

Android Studio 写一个Java调用c++ 的demo_第3张图片

在activity_main.xml里给TextView组件添加一个id,整体代码如下:




    

然后在MainActivity.java里添加调用cpp层的代码,调用cpp的库

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

写一个native方法

public native String stringFromJNI();

MainActivity.java代码整体如下:

package com.example.hellojni;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

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

    public native String stringFromJNI();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.text_view);
        textView.setText(stringFromJNI());
    }
}

然后需要在jnidemo.cpp里写stringFromJNI的实现方法

#include 
#include 
extern "C"
JNIEXPORT jstring  JNICALL
Java_com_example_hellojni_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject) {
    std::string hello = "Hello From C++";
    return env->NewStringUTF(hello.c_str());
}

其中cpp层这个方法的命名是Java_包名_类名_方法名

  • 包名 com.example.hellojni
  • 类名 MainActivity
  • 方法名 stringFromJNI

第八行是一个string对象,内容是“Hello From C++”,然后第九行是返回一个jni的string对象

这里的返回值就是给到了Java层的stringFromJNI的返回值。

Android Studio 写一个Java调用c++ 的demo_第4张图片

最后MainActivity里通过展示这个string显示在视图上,表示Java层调用cpp层的成功了。

看下运行结果:

Android Studio 写一个Java调用c++ 的demo_第5张图片

你可能感兴趣的:(android,studio,java,c++,JNI)