| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> JNI开发笔记(四)--实现一个简单的JNI工程并生成so库 -> 正文阅读 |
|
[移动开发]JNI开发笔记(四)--实现一个简单的JNI工程并生成so库 |
实现一个简单的JNI工程并生成so库引JNI开发笔记(一)–Android Studio安装与环境搭建 前言本篇文章根据Android Studio自带的JNI工程模板,添加一些简单的C/H函数来实现一个简单的JNI工程。以简单的两数相加为例,将C语言实现的sum函数通过JNI由Java来调用。 1. 编写C/h文件并添加到工程首先我们实现两数相加,由于比较简单,直接上代码就好:
然后我们将sum.c和sum.h添加到工程中,具体的步骤是:
2. 修改CmakeLists.txt文件根据JNI开发笔记(三),我们针对CmakeLists.txt只需要修改三个地方就可以了,代码如下:
3. 编写native-lib.cpp文件native-lib.cpp文件的作用是将C文件中的sum函数封装成Java可以识别的函数。首先我们需要在MainActivity.java中声明一个Java的函数名,
如下图所示,我们在红色矩形框的地方声明该函数:
其中函数参数的意义如下:
我们需要在这个函数下完成对C文件中sum函数的封装,首先需要引入sum.c所依赖的头文件sum.h,我们在native-lib.cpp中添加sum.h, 添加“extern "C"表示以C语言的方式引用头文件:
4. 在MainActivity.java文件调用C函数在Java中怎么实现传参数给我们的JNI函数呢?我们通过MainActivity.java来实现。打开MainActivity.java,我们需要修改两个地方,第一个是将导入的库名字改成我们在CMakeLists中的名字“JniTest-lib”, 第二个地方是在tv.setText()中直接引用我们的函数:
因为sumfunc返回时int型变量,所以需要使用String.valueof()来变成字符型才能显示出来。
5. 运行JNI工程我们点击左上角的三角形“run”按钮,可以运行这个简单的JNI工程了。
这样一个简单的JNI工程就运行成功了,它实现了通过Java来调用C文件中的sum函数并返回到Java中的功能。 6. 生成so库如果我们要给其他java程序调用我们的sum函数,但是不想暴漏sum里面的实现细节,我们需要把我们的JNI工程打包成一个so库,操作非常简单,点开右侧的“Gradle”,找到路径“JniTestProject–Tasks–build”,双击“assemble”进行so库的生成。 assemble完毕之后,点击左上角的“Android”图标,切换当前工程环境为“Project”
多说一句我们在平时开发中会遇到比这个复杂的多的场景,比如我们C语言接口函数的参数是变量指针的时候该怎么转化,是数组指针该怎么转化,结构体指针呢?这些场景就需要使用特定的JNI语法来进行转化。针对这样复杂的问题我在下一篇文章JNI开发笔记(五)中会专门讲解。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:41:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |