[Android]JNI的基础知识

目录

1.什么是JNI  

2.配置JNI开发环境NDK

3.创建Native C++类型的项目

4. 了解CMakeLists.txt 文件

5.了解native-lib.cpp 文件

6.在 Android 的 MainActivity 中调用 native-lib.cpp 中实现的本地方法


1.什么是JNI  

      JNI(Java Native Interface)是一种允许Java代码与本地代码(如C或C++)进行交互的技术。它提供了一种机制,使得Java应用程序可以调用本地方法或库,并允许本地代码访问Java应用程序中的对象和方法。

2.配置JNI开发环境NDK

打开Android Studio,点击“Tools”,转到“SDK Manager”,选择“SDK Tools”选项卡,并选中“NDK”和“CMake”进行安装。

3.创建Native C++类型的项目

      你可以创建一个 Android 的 Native C++ 项目,并在其中编写 C++ 代码,并使用 JNI 接口与 Java 代码进行交互。这样你就可以充分利用 C++ 的性能优势,并与 Android 平台进行无缝集成。

其中在 src/main/cpp 目录下

CMakeLists.txt 文件:该文件是用于配置和管理你的 C++ 代码构建过程的主要文件。

native-lib.cpp 文件:你可以在native-lib.cpp 文件里面来实现你的 C++ 代码逻辑。

MainActivity: 中调用 native-lib.cpp 中实现的本地方法

4. 了解CMakeLists.txt 文件

CMakeLists.txt 文件是一个文本文件,用于配置和管理 CMake 构建系统的行为。

#cmake最低版本要求
cmake_minimum_required(VERSION 3.22.1)project("jni_test")# 配置so库编译信息
add_library(# 输出so库的名称jni_test# 设置生成库的方式,默认为SHARE动态库SHARED# 列出参与编译的所有源文件native-lib.cpp)# 查找代码中使用到的系统库
find_library(log-liblog)# 指定编译目标库时,cmake要链接的库
target_link_libraries(# 指定目标库,native-lib 是在上面 add_library 中配置的目标库jni_test# 列出所有需要链接的库${log-lib})

常用的命令有:

1.指定 CMake 的最低版本要求。

#cmake最低版本要求
cmake_minimum_required(VERSION 3.22.1)

2.使用 project 命令来指定项目的名称和版本。

project("jni_test")

3. 通过 set 方法定义了 so 头文件 所在目录。

其中 CMAKE_SOURCE_DIR 为系统变量,指向 CMakeLists.txt 所在目录。
set(OPENCV_LIBS_DIR ${CMAKE_SOURCE_DIR}/../opencv_include)

4.引入其他模块。

include_directories(${OPENCV_LIBS_DIR})

5.添加源文件。

#opencv
add_library(libopencv_java3SHAREDIMPORTED )

6.set_target_properties 命令可以指定构建结果的输出路径、名称等。

其中ANDROID_ABI 是系统变量,指 向 so 对应的 CPU 框架目录:armeabiarmeabi-v7a、x86 ...

set_target_properties(libopencv_java3PROPERTIES IMPORTED_LOCATION${OPENCV_LIBS}/${ANDROID_ABI}/libopencv_java3.so )

7.  target_link_libraries 命令,你可以指定要链接到项目中的静态库或动态库。

target_link_libraries( jni_testlibopencv_java3${log-lib})

5.了解native-lib.cpp 文件

native-lib.cpp 文件中的内容可以根据你的需求具体编写,但通常会包含以下部分:

  1. 包含头文件。

    #include <jni.h>
    #include <string>
  2. 实现本地方法:在 native-lib.cpp 文件中,你需要实现在 JNI 接口文件中声明过的本地方法。这些方法将从 Java 代码中调用。

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

    在上述例子中,我们实现了一个名为stringFromJNI 的本地方法,它返回一个字符串给调用方。

6.在 Android 的 MainActivity 中调用 native-lib.cpp 中实现的本地方法


public class MainActivity extends AppCompatActivity {static {System.loadLibrary("jni_test");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//省略}public native String stringFromJNI();
}

native-lib.cpp 中的本地方法stringFromJNI () 在 Java 中以相同的方法名进行调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620438.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

vue项目打包后出现页面布局异常、图片显示不出来等问题

通常我们写完vue项目后&#xff0c;会执行 npm run serve 对项目进行打包。执行完后&#xff0c;就在项目的目录中生成dist文件夹。一开始&#xff0c;我以为双击dist文件夹里index.html会把打包后的项目运行起来&#xff0c;结果在浏览器看到的页面布局异常以及许多图片没有加…

word无法显示图像计算机可能没有足够的,Word图片显示不出来怎么办 Word图片显空白的解决办法-电脑教程...

最近百事网小编钢琴下的旋律发来了一些Word投稿文档&#xff0c;不过奇怪的是Word里边的很多图片都显示不出来&#xff0c;原先以为可能是图片过多&#xff0c;可能一下子没载入完&#xff0c;不过等待很长一段时间后&#xff0c;很多Word里边的图片依旧显示不出现&#xff0c;…

java 选择图片 显示不出来的_java图片显示不出来怎么办

java图片显示不出来怎么办&#xff1f; 解决javaweb项目使用Tomcat服务在网页中的某些页面中的图片无法显示问题。 最近写了一个web项目&#xff0c;但在浏览器中测试&#xff0c;发现某些页面中的图片无法显示。 推荐教程&#xff1a;《java学习》 原因是在加载页面时一些img标…

html显示网上图片不显示不出来,网页图片显示不出来,教您网页不显示图片怎么办...

在使用电脑浏览网页的时候是不是有碰到过网页不显示图片的时候&#xff1f;可能因为是网速慢&#xff0c;所以造成加载图片失败;当然也有其他的原因&#xff0c;像有些地方设置错误的话也会导致网页图片显示不出来的。下面&#xff0c;小编跟大伙一同探讨一下网页不显示图片的解…

java界面怎么加图片不显示不出来_java图片显示不出来怎么办,

详细内容 java图片显示不出来怎么办&#xff1f; 解决javaweb项目使用Tomcat服务在网页中的某些页面中的图片无法显示问题。 最近写了一个web项目&#xff0c;但在浏览器中测试&#xff0c;发现某些页面中的图片无法显示。 推荐教程&#xff1a;《java学习》 原因是在加载页面时…

html背景图片为什么找不到,css中背景图片显示不出来

css中背景图片显示不出来 css添加背景图片无法显示&#xff0c;有以下几方面原因&#xff1a; 1、css没有被调用&#xff1b;请检查css调用是否成功。 2、css图片地址不对&#xff1b;请检查css图片地址是否正确。 3、div的高度没有固定&#xff0c;是auto或者没有设值&#xf…

python中html图片显示不出来,jupyter notebook中图片显示不出来的解决

报错&#xff1a; d:\program files\anaconda3\lib\site-packages\matplotlib\figure.py:445: userwarning: matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-gui backend, so...... 解决方法&#xff1a; import matplotlib matplotl…

图片路径带有blob的图片显示不出来

做项目写个人信息页面时&#xff0c;后端返回的数据中&#xff0c;图片的路径带有blob&#xff08;如下图&#xff09; 前端展示的时候渲染不出来&#xff0c;重新上传后&#xff0c;图片正常&#xff0c;但是刷新后还是不显示。图片上传用的element ui的图片上传组件&#xff…

解决上传 Gitee 后图片显示不出来

上传后图片总是显示不出来&#xff0c;例如 可以直接把路径替换成 Gitee 项目上传后的网络路径 点开上传 Gitee 后的图片所在的路径&#xff0c;随便点开一张图片&#xff0c;点击原始数据 点开后图片所在路径如下 在然后直接全部替换图片的文件夹路径 替换的时候替换 图片…

如何解决上传到github上的图片显示不出来的问题

你有没有遇到上传github仓库的图片&#xff0c;显示不出来的情况&#xff0c;或者是仓库的README.md文件&#xff0c;插入的图片总是莫名其妙的无法显示&#xff0c;而且重新编辑也没什么卵用。 于是我们可以使用chrome或是edge浏览器,F12打开开发者工具&#xff0c;你会发现获…

【C++】C++ 引用详解 ⑦ ( 指针的引用 )

文章目录 一、二级指针可实现的效果二、指针的引用1、指针的引用 等同于 二级指针 ( 重点概念 )2、引用本质 - 函数间接赋值简化版本3、代码示例 - 指针的引用 一、二级指针可实现的效果 指针的引用 效果 等同于 二级指针 , 因此这里先介绍 二级指针 ; 使用 二级指针 作为参数 …

Arduino驱动TEMT6000传感器(光照传感器篇)

目录 1、传感器特性 2、硬件原理图 3、驱动程序 TEMT6000是一个三极管类型的光敏传感器,其光照强度和基极的电流成正比。用起来也相当简单,可以简单的连接该传感器的基极到模拟电压输入,通过简单的检测电压值就可以判断当前的光照强度。 1、

python增强现实

1&#xff0c;在一平面上放一个立方体 实现代码&#xff1a; from pylab import * from PIL import Image# If you have PCV installed, these imports should work from PCV.geometry import homography, camera # from PCV.localdescriptors import sift"""…

Python+OpenCV实现增强现实!快来召唤你的库洛牌!!!

相信大家都看过或者听过《摩卡少女樱》这部动漫&#xff0c;是不是非常羡慕小樱能够从库洛牌中召唤出各种各样会有魔法的人呀&#xff1f;&#xff01; 今天&#xff0c;博主就来教教大家如何实现召唤吧&#xff01;&#xff01;&#xff01;学会以后相信你一定可以召唤神龙滴&…

Logstash【从无到有从有到无】【简介】【L2】Logstash入门

目录 1.Logstash入门 1.1.安装Logstash 1.1.1.从下载的二进制安装 1.1.2.从包存储库安装 1.1.3.使用Homebrew在Mac上安装Logstash 1.1.4.使用Homebrew启动Logstash 1.1.5.Docker 1.2.简单使用 1.3.用Logstash解析日志 1.3.1.配置Filebeat以将日志行发送到Logstash 1…

dojo框架笔记

一、模块定义 1、定义只含值对&#xff0c;没有任何依赖的模块&#xff08;moudle1.js&#xff09; define({ color: "black", size: "unisize" }); 2、定义没有任何依赖&#xff0c;但是需要一个准备活动的函数&#xff08;moudle2.js&#xff09; define…

Flutter技术与实战(5)

Flutter进阶 文章目录 Flutter进阶如何构造炫酷的动画效果Animation、AnimationController与ListenerAnimationWidget与AnimationBuilderhero动画 单线程模型怎么保证UI运行流畅Event Loop机制异步任务异步函数Isolate HTTP网络编程与JSON解析HTTP网络编程HttpClienthttpdioJSO…

Styling FX Buttons with CSS

http://fxexperience.com/2011/12/styling-fx-buttons-with-css/ ———————————————————————————————————————————————————————— Styling FX Buttons with CSS December 20, 2011 By Jasper Potts A number of people h…

使用机器学习模型对大盘指数进行预测

作者&#xff1a;子楠 链接&#xff1a;https://zhuanlan.zhihu.com/p/24417597 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 用数学模型分析策略&#xff0c;可以避免由于情绪波动的造成的影响&#xff0c;避免一些…

大盘趋势图强弱分析 通达信大盘多空指标公式 副图不加密

判断大盘走势图的四大技巧有哪些&#xff1f; 答&#xff1a;1.消息面、政策面、经济面。2.技术面。技术面上最重要的是成交量。3.利用领涨股。一般一波行情的发展都会由一只或几只领涨股引领&#xff0c;对他们本身进行分析进而了解市场主力所盯紧的热点&#xff0c;然后判断…