Android jni引用第三方so动态库和.a静态库并且调用(c)方法

最近花了一周时间来入门学习 Android JNI方面的知识,因为后续的工作很多需要用到c c++库,我需要用jni来包装一下c函数,来提供给上次java调用。总之多学点知识对自己有好处。

案例效果:
在这里插入图片描述
上文我们讲解了
android studio cmake生成.a文件(静态库)及调用(c c++)静态库.a

本文接着上文,这次我们利用JNI 来引用第三方动态库so文件,并且让Java调用它的函数。

第一步:生成.so动态库文件

编写C文件和头文件

DynamicLibraryTest.h

//
// Created by Administrator on 2023/9/5/005.
//#ifndef ANDROIDCMAKE_DYNAMICLIBRARYTEST_H
#define ANDROIDCMAKE_DYNAMICLIBRARYTEST_H#endif //ANDROIDCMAKE_DYNAMICLIBRARYTEST_Hint dynamicAdd(int a,int b,int c);char * getDynamicName(char * firstName,char * lastName);

DynaminLibraryTest.cpp

//
// Created by Administrator on 2023/9/5/005.
//#include "../include/static/DynamicLibraryTest.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int dynamicAdd(int a,int b,int c){return a+b+c;
}char * getDynamicName(char * firstName,char * lastName){char *name = (char *) malloc(strlen(firstName) + strlen(lastName));strcpy(name, firstName); // 把firstName复制到name中strcat(name, lastName); // 把lastName追加到name中return name;
}

编写CmakeLists文件

    add_library(${CMAKE_PROJECT_NAME} SHARED   src/DynaminLibraryTest.cpp   )

make project之后,生成了.so动态库文件。
在这里插入图片描述

生成动态库之后,我把文件复制到了jni目录下面.
在这里插入图片描述

第二步:JNI动态注册.so动态库中的函数

编写cmakeList文件


cmake_minimum_required(VERSION 3.22.1)project("cmake")add_library(${CMAKE_PROJECT_NAME} SHAREDnative-lib.cppsrc/libtest.c# 编写动态库用到的文件,已经生成了deynaminLibraryTest.so文件就注释掉这个代码
#        src/DynaminLibraryTest.cpp   )#导入已经编译好的第三方静态库 或者 动态库  本例导入的静态库
add_library(calStatic STATIC IMPORTED)
#设置静态库(.a)导入的路径
set_target_properties(calStatic PROPERTIES IMPORTED_LOCATION${CMAKE_CURRENT_SOURCE_DIR}/jni/${CMAKE_ANDROID_ARCH_ABI}/libcalStatic.a
)#添加第三方 动态库
add_library(dynamicLibraryTest SHARED IMPORTED)
#设置动态库(.so)导入的路径
set_target_properties(dynamicLibraryTest PROPERTIES IMPORTED_LOCATION${CMAKE_CURRENT_SOURCE_DIR}/jni/${CMAKE_ANDROID_ARCH_ABI}/libdynamicLibraryTest.so)#通过target_link_libraries命令指明库文件,且通过target_include_directories命令指明相应的库头文件
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/include/static/)
#需要链接或者编译的库
target_link_libraries(${CMAKE_PROJECT_NAME}# List libraries link to the target libraryandroid# 第三方静态库。calStatic# 第三方动态库dynamicLibraryTestlog)

JNI动态注册函数

#include <jni.h>
<

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java网络编程,套接字socket

目录 一 网络概述 二 网络的类型分类 三 网络体系结构 四 网络通信协议概述 五 网络通信协议种类 六 Socket简介 七 Socket路径 八 java网络编程三要素 九 基于UDP协议的Socket编程 十 基于TCP协议的Socket编程 十一 基于TCP协议和UDP的区别 一 网络概述 多台相互连…

Python网络编程详解

概要 Python作为一种强大的编程语言&#xff0c;拥有丰富的网络编程库和框架&#xff0c;能够方便地进行各种网络编程任务。本文将介绍Python网络编程的基础知识&#xff0c;包括socket编程和HTTP协议&#xff0c;然后深入探讨一些流行的Python Web框架&#xff0c;包括Flask和…

安卓绘制原理概览

绘制原理 Android 程序员都知道 Android 的绘制流程分为 Measure、Layout、Draw 三步骤&#xff0c;其中 Measure 负责测量 View 的大小Layout 负责确定 View 的位置Draw 负责将 View 画在屏幕上 由 ViewRootImpl 实现的 performTraversal 方法是 Measure、layout、draw 的真正…

漏洞复现【目录集合】

Apache Apache_HTTPD_换行解析漏洞(CVE-2017-15715) Apache_HTTPD_多后缀解析漏洞 Apache HTTPD-未知后缀名解析 Apache_HTTP_2.4.50_路径穿越漏洞(CVE-2021-42013) Apache_HTTP_2.4.49_路径穿越漏洞(CVE-2021-41773) Aapache_Tomcat_AJP协议_文件包含漏洞(CVE-2020-1938)…

2023高教社杯数学建模C题思路代码 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

Matplotlib:Python数据可视化的全面指南

数据可视化是数据分析的一个重要方面&#xff0c;可以帮助我们有效地传达数据中的洞察和模式。Python提供了几个用于数据可视化的库&#xff0c;其中最突出和广泛使用的是Matplotlib。在本文中&#xff0c;我们将探索Matplotlib的基本概念和功能&#xff0c;并学习如何创建各种…

jemalloc 5.3.0源码总结

注意&#xff1a;jemalloc 的最新版本里没有所谓的 huge class&#xff0c;bin 中slab外面也不再套一个run的概念了&#xff0c;看其它人分享的文章时需要注意。 简述 用户侧通过 tcache 来访问&#xff0c;tcache 是一个线程的申请又释放的对象的缓存&#xff0c;它绑定了一…

JavaScript 中的 every() 方法和some() 方法

1.every()方法的定义与用法 every()方法用于检测数组中的所有元素是否都满足指定条件every()方法会遍历数组中的每一项&#xff0c;如果有一项不满足条件&#xff0c;则表达式返回false&#xff0c;剩余的项将不会进行检测&#xff1b;如果遍历完数组后&#xff0c;每一项都符…

Maven 的其它插件

文章目录 Maven 的其它插件dockerfile 插件Apache Maven Checkstyle Pluginp3c-pmd Maven 的其它插件 dockerfile 插件 dockerfile-maven-plugin 是 spotify 公司新提供的、用以替代 docker-maven-plugin 的插件&#xff0c;它同样是用于在 maven 中将当前项目打成一个 docke…

Jenkins 持续集成:Linux 系统 两台机器互相免密登录

背景知识 我们把public key放在远程系统合适的位置&#xff0c;然后从本地开始进行ssh连接。 此时&#xff0c;远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地&#xff0c;本地会用private key进行解密并把这个随机数发回给远程系统。 最后&#xf…

RHCA之路---EX280(6)

RHCA之路—EX280(6) 1. 题目 Create an application greeter in the project samples which uses the Docker image registry.lab.example.com/openshift/hello-openshift so that it is reachable at the following address only: https://greeter.apps.lab.example.com (Not…

分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay

文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程&#xff1a;客户端通过网络接口向服务端发送请求&#xff0c;操作系统将这些客户端的请求传递给服务器端应用程序&#xff0c;服务器端应用程序会处理这些请求&#xff…

PaddleOCR训练部署文档

Cuda安装 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run sh cuda_11.6.0_510.39.01_linux.run#可能会报错&#xff0c;查看/var/log/nvidia-installer.log &#xff0c;kill -9 [ID]可以解决vim ~/.bash…

Linux:tomcat (源码包安装)(官网下载-安装-启动-配置-等等等-----从入门到入土)

介绍 Apache Tomcat软件是一个开源实现 Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication 规范。 这些规范是Jakarta EE平台的一部分。 Apache Tomcat软件是在开放和参与式中开发的。 …

基于SSM的学校运动会信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

网络协议从入门到底层原理学习(一)—— 简介及基本概念

文章目录 网络协议从入门到底层原理学习&#xff08;一&#xff09;—— 简介及基本概念一、简介1、网络协议的定义2、网络协议组成要素3、广泛的网络协议类型网络通信协议网络安全协议网络管理协议 4、网络协议模型对比图 二、基本概念1、网络互连模型2、计算机之间的通信基础…

Mac根据端口查询进程id的命令

目录 一、netstat -anp tcp -v | grep 80 二、lsof -P -n -i:8080 一、netstat -anp tcp -v | grep 80 ➜ Downloads netstat -anp tcp -v | grep 80 tcp46 0 0 *.8080 *.* LISTEN 131072 131072 25252 0 0x0000…

独立站黑科技解读:斗篷技术你了解多少?

说到独立站&#xff0c;就不得不说一下独立站领域的一些灰色地带产品。首先大家会想到的仿牌产品、保健品、电子烟、成人用品等都是在facebook\google等上推广的。这些产品做独立站会遇到很多问题&#xff0c;比如收钱不像经营正品一般货那么容易和简单&#xff0c;且这些产品的…

洞察商机,驱动创新:智能数据分析引领企业发展

“五度易链”产业大数据解决方案由产业经济、智慧招商、企业服务、数据服务四大应用解决方案组成&#xff0c;囊括了产业经济监测、产业诊断分析、企业监测预警、企业综合评估、大数据精准招商、招商智能管理、企业管理、企业培育、企业市场服务、企业金融服务、产业数据开放服…

智慧工地可视化解决方案-智慧工地源码

智慧工地是指运用信息化手段&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生态圈&#xff0c;并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析&#xff0c;提供过程趋势预测及专家预案&#xff0c;实现工程…