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

JNI整理总结

JNI

  • JNI基础

JNI基础

JNI,java native interface,即java本地接口,是java调用本地化方法的接口,是为java编写本地方法,为jvm嵌入本地应用程序的标准化接口。首要目标是在给定的平台上采用java通过JNI调用本地化方法,而本地化方法是二进制库文件的形式存放,Windows上本地化方法是dll库形式,Unix上是so形式。通过调用本地的库文件的内部的方法,使java可以实现和本地机器的紧密联系,调用系统级的各接口方法,JNI可以实现java与本地化方法的相互调用,即java与C/C++实现相互的调用,双向的调用。

native开发目前有两种编译方式,一种是传统的,比较早的gcc的编译方式,一种是近几年推出的cmake编译方式。只是管理代码的编译方式的区别,其他的差别不大。作为开发者,语法和调试功底才是关键。

步骤:
·java类中声明native修饰的方法;
·使用javac编译java文件,会生成一个class文件;
·使用javah class完整名,会生成一个h的头文件;
·使用C/C++实现h头文件里的本地方法,并生成动态链接库;
·将库文件拷贝到java工程目录下,运行java;

在java程序中,
首先要在类中声明所调用的库名称,如下的static代码块内loadLibrary。库的扩展名不用写,由系统自动判断。
其次,对要调用的方法做本地化声明,只声明不实现。
第三,编译java程序文件生成class文件,使用javah命令生成h头文件。
第四,对于这个头文件,C/C++需要做的,就是把各个方法具体实现,编译生成链接库文件。生成动态链接库。

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {// Used to load the 'native-lib' library on application startup.static {System.loadLibrary("native-lib");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// Example of a call to a native methodTextView tv = findViewById(R.id.sample_text);tv.setText(stringFromJNI());}/*** A native method that is implemented by the 'native-lib' native library,* which is packaged with this application.*/public native String stringFromJNI();public native String setStr(String str);public static native void getV();
}

native-lib.cpp

#include <jni.h>
#include <string>extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplicationdemo_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */) {std::string hello = "Hello from C++";return env->NewStringUTF(hello.c_str());
}extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplicationdemo_MainActivity_setStr(JNIEnv *env, jobject thiz, jstring str) {// TODO: implement setStr()
}extern "C"
JNIEXPORT void JNICALL
Java_com_example_myapplicationdemo_MainActivity_getV(JNIEnv *env, jclass clazz) {// TODO: implement getV()
}

JNIEXPORT,JNICALL是JNI关键字,表示该方法是要被JNI调用的。

相关文章:

JNI整理总结

JNI JNI基础 JNI基础 JNI&#xff0c;java native interface&#xff0c;即java本地接口&#xff0c;是java调用本地化方法的接口&#xff0c;是为java编写本地方法&#xff0c;为jvm嵌入本地应用程序的标准化接口。首要目标是在给定的平台上采用java通过JNI调用本地化方法&am…...

aws中AcmClient.describeCertificate返回值中没有ResourceRecord

我有一个需求&#xff0c;就是让用户自己把自己的域名绑定我们的提供的AWS服务器。 AWS需要验证证书 上一篇文章中我用php的AcmClient中的requestCertificate方法申请到了证书。 $acmClient new AcmClient([region > us-east-1,version > 2015-12-08,credentials>[/…...

Spring Task详细讲解

✨Spring Task简介 Spring Task 是 Spring 提供的轻量级定时任务工具&#xff0c;也就意味着不需要再添加第三方依赖了&#xff0c;相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。 使用场景&#xff1a; 信用卡每月还款提醒银行贷款每月还款提醒…...

C++初阶 --- 类和对象(1)

类和对象&#xff08;1&#xff09; 一、类的相关内容1.访问限定符2.class关键字与struct关键字的区别3.类域 二、this指针三、成员函数存放在哪里&#xff1f;1. 函数的存放位置2. 练习题 一、类的相关内容 1.访问限定符 &#xff08;1&#xff09;C⼀种实现封装的⽅式&…...

《TCP/IP网络编程》学习笔记 | Chapter 7:优雅地断开套接字连接

《TCP/IP网络编程》学习笔记 | Chapter 7&#xff1a;优雅地断开套接字连接 《TCP/IP网络编程》学习笔记 | Chapter 7&#xff1a;优雅地断开套接字连接基于 TCP 的半关闭单方面断开连接带来的问题套接字和流针对优雅断开的 shutdown 函数为何需要半关闭&#xff1f;基于半关闭…...

Anaconda 和 conda 是什么关系?就像 pip 和 python 一样吗

Anaconda 和 conda是 Anaconda Distribution 还是 Miniconda Anaconda 和 conda Anaconda 和 conda 之间的关系有点类似于 pip 和 Python&#xff0c;但又有所不同。 Anaconda 是一个数据科学和机器学习的发行版&#xff0c;它包含了 Python、conda 以及许多预装的库和工具&am…...

「数据治理」核心专业术语解释!

​数据治理就是指在一定的组织范围内&#xff0c;依托制度法规、标准规范、应用实践和支撑技术对数据进行全生命周期的数据确权、质量管理、安全控制、隐私保护、开放共享、交易流通和分析处理。数据治理的目标是为了提高数据的可用性、安全性、流通性&#xff0c;激活数据资源…...

Mac Nginx 前端打包部署

安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装Nginx brew install nginx nginx相关命令 nginx启动命令&#xff1a;nginx nginx -s reload #重新加载配置 nginx -s reopen #重启 nginx -s stop #…...

乳腺癌诊断分析——基于聚类分析实现

一、研究背景 乳腺癌属于恶性肿瘤&#xff0c;在早期发现后需要及早将病变组织切除&#xff0c;而且术后还要化疗和放射等辅助治疗&#xff0c;能够抑制癌细胞的扩散和增长。 二、研究目的 研究乳腺癌病人的患病特征通过聚类分析方法对特征进行分类通过上述聚类结果对乳腺诊…...

Ubuntu 22.04 安装配置opencv

​ OpenCV下载:https://opencv.org/releases/ ​编译与安装 安装cmake OpenCV需要使用cmake进行编译 sudo apt-get install cmake安装依赖 sudo apt-get install build-essential pkg-config libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev lib…...

【软考】系统架构设计师-计算机系统基础(3):嵌入式系统

嵌入式系统&#xff1a;嵌入式处理器、相关支撑硬件、嵌入式OS、支撑软件以及应用软件 嵌入式系统特征&#xff1a;专用性强、技术融合、软硬一体软件为主、通用计算机资源少,... 分层&#xff08;5层&#xff09;&#xff1a;硬件层 → 抽象层 → 操作系统层 → 中间件层 →…...

实测运行容器化Tomcat服务器

文章目录 前言一、拉取Tomcat 9.0镜像二、运行容器化Tomcat服务器三、访问Tomcat官网首页测试 总结 前言 运行容器化Tomcat服务器&#xff0c;首先确保正确安装docker&#xff0c;并且已启动运行&#xff0c;具体安装docker方法见笔者前面的博文《OpenEuler 下 Docker 安装、配…...

致敬苹果的国产手机,只会失去更多市场,iPhone一骑绝尘!

近期诸多国产手机品牌纷纷发布旗舰手机&#xff0c;随着这些旗舰手机的发布&#xff0c;可以看出他们在进一步致敬苹果--实质就是模仿苹果的设计&#xff0c;如此做的结果恐怕是得不偿失&#xff0c;将导致国产手机损失更多市场。 致敬苹果最为直接的当属手机外壳了&#xff0c…...

《MYSQL45讲》kill不掉的线程

kill query 线程id :终止这个线程正在执行的语句 kill connection 线程id :关闭这个线程的连接&#xff0c;也会先停止这个线程正在执行的语句。这个connection可以缺省。 本文讨论的情况是&#xff1a;使用了kill命令&#xff0c;却没有断开连接&#xff0c;show processli…...

单体架构 IM 系统之 Server 节点状态化分析

基于 http 短轮询模式的单体架构的 IM 系统见下图&#xff0c;即客户端通过 http 周期性地轮询访问 server 实现消息的即时通讯&#xff0c;也就是我们前面提到的 “信箱模型”。“信箱模型” 虽然实现非常容易&#xff0c;但是消息的实时性不高。 我们在上一篇文章&#xff08…...

java xml 文本解析

示例文本 <Message><MessageName>time_request</MessageName><Timestamp>20220217165432906359</Timestamp><Body><EQPID>CMMAB01-DTP01</EQPID></Body> </Message>示例代码 import org.w3c.dom.Document; impo…...

Docker占用空间太大磁盘空间不足清理妙招

docker占用空间太大了&#xff0c;磁盘空间不足&#xff0c;清理3妙招 清除所有已停止的容器&#xff08;container&#xff09;、未被任何容器所使用的卷&#xff08;volume&#xff09;、未被任何容器所关联的网络&#xff08;network&#xff09;、所有悬空镜像&#xff08…...

编程之路,从0开始:字符函数和字符串函数

Hello大家好&#xff01;很高兴我们又见面了&#xff01; 给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 目录 1、字符分类函数 2、字符转换函数 3、字符串函数 1、 strcpy 2、 strcat 3、 strcmp 4、strlen(s) 5、strstr(s1, s2) 6、 strtok(s1, s2…...

化工防爆巡检机器人:在挑战中成长,为化工安全保驾护航

随着全球能源需求的不断攀升&#xff0c;化工行业的安全性与高效性愈发受到关注。化工设施规模巨大&#xff0c;而且其中多数存在高风险因素&#xff0c;像是易燃易爆化学物质、高温环境、有毒有害物质以及高压设备等。仅2023年&#xff0c;国内危化品事故就多达652起&#xff…...

音频采样数据格式

音频信号在模拟到数字转换时&#xff0c;会涉及到多个关键参数&#xff0c;如采样率、位深度、通道数等。下面是常见的音频采样数据格式及其相关概念&#xff1a; 1. 采样率 (Sample Rate) 采样率指的是每秒钟对音频信号进行采样的次数&#xff0c;单位为赫兹 (Hz)。常见的值…...

SABIC原GE塑料原料全面解析与市场应用

SABIC原GE塑料原料凭借其卓越的性能稳定性与广泛的应用适配性&#xff0c;成为众多制造企业的优选材料。作为国际一线工程塑料品牌&#xff0c;其产品涵盖PETG、PCTGG、PC、PA66等全品类&#xff0c;通过源头直采模式可为下游企业降低15%-18%采购成本&#xff0c;并提供全流程技…...

效率直接起飞 2026 最新!降AIGC工具测评与推荐

2026年真正好用的AI论文降重与改写工具&#xff0c;核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

LLM、Agent与Multi-Agent全面对比:优势、劣势与应用场景分析

引言大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;的出现&#xff0c;让机器具备了前所未有的语言理解和生成能力。然而&#xff0c;单纯的LLM就像一个博学但困在图书馆里的学者——它能回答问题、撰写文章&#xff0c;却无法主动采取行动。于是&…...

Perseus补丁:碧蓝航线全皮肤解锁完整指南与快速配置教程

Perseus补丁&#xff1a;碧蓝航线全皮肤解锁完整指南与快速配置教程 【免费下载链接】Perseus Azur Lane scripts patcher. 项目地址: https://gitcode.com/gh_mirrors/pers/Perseus 还在为碧蓝航线中那些精美皮肤需要付费而烦恼吗&#xff1f;想要免费体验所有舰娘的不…...

2026 AI 培训机构怎么选?6 类人群精准匹配 + 避坑指南

随着大模型、多模态、RAG、Agent 技术持续迭代&#xff0c;企业对于 AI 算法开发、计算机视觉、自然语言处理、工程落地类人才的需求持续上涨。目前国内主流AI学习平台包含咕泡科技、科大讯飞AI大学堂、腾讯云智学堂、深兰科技人工智能教育等&#xff0c;各家平台技术侧重点、课…...

MSTP+VRRP+链路聚合简单配置

实验需求&#xff1a;1.存在两个用户业务网&#xff0c;分布为VLAN 10和VLAN 20&#xff0c;需要SW1作为VLAN 10根桥和VRRP-master设备2.SW2作为VLAN 20根桥和VRRP-master设备3.网段自行规划&#xff0c;全网可达配置思路&#xff1a;两条实例&#xff1a;需要在 MSTP 域中配置…...

编程入门必存 100 个经典代码 自学提升一站式合集

前言 我记得刚开始接触编程的时候&#xff0c;觉得太难了。 也很好奇&#xff0c;写代码的那些人也太厉害了吧&#xff1f;全是英文的&#xff0c;他们的英文水平一定很好吧&#xff1f; 他们是怎么记住这么多代码格式的&#xff1f;而且错了一个标点符号&#xff0c;整个程…...

别再手动调字体了!用iSlide的「一键优化」5分钟搞定PPT排版(附主题色设置技巧)

职场效率革命&#xff1a;用iSlide「一键优化」实现PPT排版自动化 凌晨两点的办公室&#xff0c;咖啡杯见底&#xff0c;李婷盯着屏幕上第37页格式混乱的PPT&#xff0c;光标在字号不一的标题间来回切换——这是她本周第三次为团队修改汇报材料。这种场景对职场人来说再熟悉不过…...

AI Agent Runtime 重构:会话即事件日志的工程实践

1. 这不是新赛道&#xff0c;是 runtime 层的“操作系统时刻”来了 你有没有试过让一个 AI 代理连续工作四十分钟&#xff1f;不是闲聊&#xff0c;而是真正在查资料、调 API、写代码、汇总报告——一个接一个步骤往下走。我去年就搭过这么一套系统&#xff0c;用的是当时最火的…...

个人开发者如何利用Taotoken统一管理多个AI项目API调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 个人开发者如何利用Taotoken统一管理多个AI项目API调用 作为一名独立开发者&#xff0c;你可能同时维护着多个小产品&#xff0c;例…...