在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"}}
相关文章:
在Android上搭建一个NDK项目
首先New Project,选择Native C,点击Next。 填入项目名称和包名,点击Next。 这里我们选择Cmake默认的C版本。 创建好的项目目录,里面比我们正常的Android项目多了一个cpp目录 打开MainActivity。里面定义了一个jni方法stringFromJN…...
TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析
TOP-K问题 TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大 比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等 对于Top-K问题,能想到的最简单直接的方式就是排序,但是…...
3、服务器性能剖析
性能优化简介 **我们将性能定义为完成某件任务所需要的时间度量,换句话说,性能即响应时间,这是一个非常重要的原则。**我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行sql语句,所以他关注的任务是查询或者语句…...
xxl-job 分布式任务调度框架
文章目录 分布式任务调度XXL-Job 简介XXL-Job 环境搭建XXL-Job (源码说明)配置部署调度中心docker安装 Bean模式任务(方法形式)-入门案例任务详解任务详解-执行器任务详解-基础配置任务详解-调度配置任务详解-基础配置任务详解-阻塞处理策略任务详解-路由策略 路由策略路由策略…...
软件使用-stm32入门
这节主要是介绍大家使用两个软件。这两个软件也是比较常用的,里面也有很多有意思的功能,可以给大家介绍一下。 1. FlyMcu 软件 这个软件可以通过串口给 STM32 下载程序,如果你没有 STLINK,就可以用这个软件通过串口下载程序。 …...
使用MAT分析内存泄漏(mac)
前言 今天主要简单分享下Eclipse的Memory Analyzer在mac下的使用。 一、Mat(简称)干什么的? 就是分析java内存泄漏的工具。 二、使用步骤 1.下载 mac版的现在也分芯片,别下错了。我这里是M2芯片的,下载的Arch64的。 …...
【Vue】Linux 运行 npm run serve 报错 vue-cli-service: Permission denied
问题描述 在Linux系统上运行npm run serve命令时,控制台报错: sudo npm run serve project50.1.0 serve vue-cli-service serve sh: 1: vue-cli-service: Permission denied错误截图如下: 原因分析 该错误是由于vue-cli-service文件权限不…...
LeetCode的几道题
一、捡石头 292 思路就是: 谁面对4块石头的时候,谁就输(因为每次就是1-3块石头,如果剩下4块石头,你怎么拿,我都能把剩下的拿走,所以你就要想尽办法让对面面对4块石头的倍数, 比如有…...
NLP/Natural Language Processing
一、NLP是什么 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向,也就是人们常说的「自然语言处理」,就是研究如何让计算机读懂人类语言,即将人的自然语言转换为计算机可以阅读的指令。它研…...
【教学类-06-12】20231202 0-9数字分合-房屋样式(一)-下右空-升序-抽7题
作品展示-屋顶分合(0-9之间随机抽取7个不重复分合) 背景需求: 大班幼儿学分合题,通常区角里会设计一个“房屋分合”的样式 根据这种房屋样式,设计0-9内的升序分合题模板 素材准备 WORD样式 代码展示: 2-9…...
uni-app 微信小程序 电子签名及签名图片翻转显示功能
文章目录 1. 需求背景2. 开始撸2.1 点击 重写 进入签名页面(上图一)2.2 书写签名,点击确认返回,及图片翻转显示(上图二,三) 3. 图片进行翻转,返回翻转后的图片 1. 需求背景 接的一个…...
MySQL 8.0关键字和保留字
官网地址: https://dev.mysql.com/doc/refman/8.0/en/keywords.html 可以粘贴出去自己排版整理 {accessible} {account} {action} {active} {add} {admin} {after} {against} {aggregate} {algorithm} {all} {alter} {always} {analyse} {analyze} …...
PyLMKit(3):基于角色扮演的应用案例
角色扮演应用案例RolePlay 0.项目信息 日期: 2023-12-2作者:小知课题: 通过设置角色模板并结合在线搜索、记忆和知识库功能,实现典型的对话应用功能。这个功能是大模型应用的基础功能,在后续其它RAG等功能中都会用到这个功能。功…...
JAVA全栈开发 集合详解(day14+day15汇总)
一、数组 数组是一个容器,可以存入相同类型的多个数据元素。 数组局限性: 长度固定:(添加–扩容, 删除-缩容) 类型是一致的 对象数组 : int[] arr new int[5]; … Student[] arr …...
Linux Spug自动化运维平台本地部署与公网远程访问
文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件…...
zookeeper集群和kafka集群
(一)kafka 1、kafka3.0之前依赖于zookeeper 2、kafka3.0之后不依赖zookeeper,元数据由kafka节点自己管理 (二)zookeeper 1、zookeeper是一个开源的、分布式的架构,提供协调服务(Apache项目&…...
Java——》JSONObjet 数据顺序
推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...
【个人记录】NGINX反向代理grpc服务
最开始使用proxy_pass去代理了grpc服务,结果请求时候报错提示: rpc error: code Unavailable desc connection error: desc "error reading server preface: http2: frame too large"后来才知道代理grpc服务需要使用grpc_pass,…...
【小白推荐】安装OpenCV4.8 系统 Ubuntu 22.04LST Linux.
先看一下目录,知道大致的流程! 文章目录 安装OpenCV安装依赖下载源码配置与构建安装 测试编写CMakeListx.txt编写测试代码 安装OpenCV 安装依赖 sudo apt update && sudo apt upgrade sudo apt install cmake ninja-build build-essential lib…...
使用Docker Compose搭建CIG监控平台
CIG简介 CIG监控平台是基于CAdvisor、InfluxDB和Granfana构建的一个容器重量级监控系统,用于监控容器的各项性能指标。其中,CAdvisor是一个容器资源监控工具,用于监控容器的内存、CPU、网络IO和磁盘IO等。InfluxDB是一个开源的分布式时序、时…...
3种突破Cursor Pro限制的创新方案:解锁AI编程全功能体验
3种突破Cursor Pro限制的创新方案:解锁AI编程全功能体验 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…...
华硕笔记本性能调校新纪元:GHelper如何重塑硬件控制体验
华硕笔记本性能调校新纪元:GHelper如何重塑硬件控制体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...
Kando代码贡献终极指南:7个步骤提交高质量的Pull Request
Kando代码贡献终极指南:7个步骤提交高质量的Pull Request 【免费下载链接】kando 🌸 Do things with utmost efficiency. 项目地址: https://gitcode.com/gh_mirrors/ka/kando Kando是一款跨平台的饼图菜单桌面应用程序,它提供了一种非…...
OmenSuperHub深度解析:惠普游戏本硬件控制的纯净解决方案
OmenSuperHub深度解析:惠普游戏本硬件控制的纯净解决方案 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 对于追求极致性能与系统纯净度的惠普…...
SpringBoot+Vue 学科竞赛管理管理平台源码【适合毕设/课设/学习】Java+MySQL
💡实话实说:有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着教育信息化的快速发展,学科竞赛作为培养学生创新能力和实践能力的重要途径,其管理效率的提升成为高校关注的焦点。传统…...
从概念到应用:基于openclaw101.dev功能构思在快马平台构建实战项目
今天想和大家分享一个实战项目经验——如何快速将openclaw101.dev这类技术理念转化为可交互的实际应用。最近我在InsCode(快马)平台上尝试构建了一个任务管理中心SPA,整个过程意外地顺畅,特别适合想快速验证产品原型的开发者。 项目构思 我选择了任务管理…...
Loop:5分钟打造优雅Mac窗口管理,告别鼠标拖拽的烦恼
Loop:5分钟打造优雅Mac窗口管理,告别鼠标拖拽的烦恼 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否也经历过这样的场景:正在专注写代码,却要频繁拖…...
如何快速解决Places.js地址自动补全的5个常见错误:终极处理技巧指南
如何快速解决Places.js地址自动补全的5个常见错误:终极处理技巧指南 【免费下载链接】places :globe_with_meridians: Turn any into an address autocomplete 项目地址: https://gitcode.com/gh_mirrors/pl/places Places.js是一个强大的地址自动补全JavaS…...
Windows 11 家庭版安装 WSL + Docker 踩坑记:从 Store 地狱到 --web-download 救赎
一句话总结当你发现 wsl --update 和 wsl --install 永远卡住、报权限错误或连接重置时,不要挣扎,直接用 --web-download 绕过 Microsoft Store。 这 99% 能解决 Windows 11 家庭版上的 WSL 安装/更新问题。一、问题现象:一切看起来都很正常&…...
提升代码可读性的可视化注释工具推荐
1. 代码注释的艺术化工具推荐作为一名嵌入式开发者,我深知良好的代码注释对于项目维护和团队协作的重要性。但传统的纯文本注释往往枯燥乏味,缺乏直观性。今天我要分享几款能让你的代码注释"活起来"的神器,它们不仅能提升代码可读性…...
