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

在Android上搭建一个NDK项目

首先New Project,选择Native C++,点击Next。

填入项目名称和包名,点击Next。

这里我们选择Cmake默认的C++版本。

创建好的项目目录,里面比我们正常的Android项目多了一个cpp目录

打开MainActivity。里面定义了一个jni方法stringFromJNI()

在init方法里面load了一个firstndkdemo的native lib。

打开cpp目录里面有一个Cmakelists.txt, 这里面cmake_minimum_required指定了cmake的版本。

project方法指定了native lib的名字,也就是MainActivity中init方法load的lib。

add_library方法指定了一个c++文件:native-lib.cpp

target_link_libraries方法是用来指定一个目标文件(可执行文件或者库文件)需要链接的库文件的。这个方法可以让你在编译和链接阶段,正确地解析和链接依赖的库文件。你可以指定库文件的名称,也可以指定库文件的路径。你还可以指定链接的范围,比如PUBLIC、PRIVATE或者INTERFACE,来控制库文件的传递性。


cmake_minimum_required(VERSION 3.22.1)project("firstndkdemo")add_library(${CMAKE_PROJECT_NAME} SHARED# List C/C++ source files with relative paths to this CMakeLists.txt.native-lib.cpp)target_link_libraries(${CMAKE_PROJECT_NAME}# List libraries link to the target libraryandroidlog)

再来看一下native-lib.cpp,毫无疑问这里面就是stringFromJNI方法的具体底层的实现。

#include <jni.h>
#include <string>extern "C" JNIEXPORT jstring JNICALL
Java_com_example_firstndkdemo_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */) {std::string hello = "Hello from C++";return env->NewStringUTF(hello.c_str());
}

这个方法给java层返回了一句话”Hello from C++“

直接运行程序,可以看到MainActivity中的textview获取到了c++方法返回的问候语。

忽略了一个事情,CMakeLists.txt的配置文件还需要在gradle里面指定一下

    externalNativeBuild {cmake {path = file("src/main/cpp/CMakeLists.txt")version = "3.22.1"}}

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

相关文章:

  • TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析
  • 3、服务器性能剖析
  • xxl-job 分布式任务调度框架
  • 软件使用-stm32入门
  • 使用MAT分析内存泄漏(mac)
  • 【Vue】Linux 运行 npm run serve 报错 vue-cli-service: Permission denied
  • LeetCode的几道题
  • NLP/Natural Language Processing
  • 【教学类-06-12】20231202 0-9数字分合-房屋样式(一)-下右空-升序-抽7题
  • uni-app 微信小程序 电子签名及签名图片翻转显示功能
  • MySQL 8.0关键字和保留字
  • PyLMKit(3):基于角色扮演的应用案例
  • JAVA全栈开发 集合详解(day14+day15汇总)
  • Linux Spug自动化运维平台本地部署与公网远程访问
  • zookeeper集群和kafka集群
  • Java——》JSONObjet 数据顺序
  • 【个人记录】NGINX反向代理grpc服务
  • 【小白推荐】安装OpenCV4.8 系统 Ubuntu 22.04LST Linux.
  • 使用Docker Compose搭建CIG监控平台
  • 前端文本省略号后面添加复制文字
  • 【算法】动态规划中的路径问题
  • 代数学笔记9: 群的直积,可解群,自由群,群表示
  • kali学习
  • 《论文阅读》DualGATs:用于对话中情绪识别的双图注意力网络
  • 【算法】单调栈题单——字典序最小⭐(一种类型的模板题)
  • DockerCompose修改某个服务的配置(添加或编辑端口号映射)后如何重启单个服务使其生效
  • DOM 事件的传播机制
  • (数据结构)顺序表的查找
  • vue 解决响应大数据表格渲染崩溃问题
  • Hdoop学习笔记(HDP)-Part.13 安装Ranger