当前位置: 首页 > news >正文

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

前提条件:

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

新建一个Empty Project

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

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

然后在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();@Overrideprotected 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 <jni.h>
#include <string>
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的返回值。

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

看下运行结果:

http://www.lryc.cn/news/235131.html

相关文章:

  • Pandas数据操作_Python数据分析与可视化
  • 【Debug】查询的数据量比数据库中的数据量还要多
  • nodejs微信小程序-慢性胃炎健康管理系统的设计与实现-安卓-python-PHP-计算机毕业设计
  • 二十一、数组(1)
  • react hook 获取setState的新值
  • JVM判断对象是否存活之引用计数法、可达性分析
  • 报道 | 2023年12月-2024年2月国际运筹优化会议汇总
  • 【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷C
  • “升级图片管理,优化工作流程——轻松将JPG转为PNG“
  • 基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。
  • 助力水泥基建裂痕自动化巡检,基于yolov5融合ASPP开发构建多尺度融合目标检测识别系统
  • rk3588使用vscode远程debug 配置文件
  • 隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态
  • Milvus Standalone安装
  • 二分查找算法合集
  • SELinux零知识学习十八、SELinux策略语言之类型强制(3)
  • 人工智能引领环境保护的新浪潮:技术应用及其影响
  • 第三十四节——组合式API使用路由
  • 文件隐藏 [极客大挑战 2019]Secret File1
  • Linux CentOS 8(MariaDB的数据类型)
  • 云端援手:智能枢纽应对数字资产挑战 ——华为云11.11应用集成管理与创新专区优惠限时购
  • Azure的AI使用-(语言检测、图像分析、图像文本识别)
  • QDateEdit开发详解
  • 3.6 Windows驱动开发:内核进程汇编与反汇编
  • zsh和ohmyzsh安装指南+插件推荐
  • VS中修改解决方案名称和项目名称
  • iOS UITableView获取到的contentSize不正确
  • C++二分查找算法:查找和最小的 K 对数字
  • 开源WIFI继电器之方案介绍
  • html使用天地图写一个地图列表