JNI开发笔记(七)--aar库的生成和调用
aar库的生成和调用
- 引
- 前言
- 1. 新建一个空工程
- 2. 新建一个Module
- 3. 移植JNI工程到Module中
- 4. 生成aar库与so库
- 5. 在另一个工程中调用aar库
引
JNI开发笔记(一)–Android Studio安装与环境搭建
JNI开发笔记(二)–创建JNI基础工程并运行
JNI开发笔记(三)–JNI工程的框架分析
JNI开发笔记(四)–实现一个简单的JNI工程并生成so库
JNI开发笔记(五)–JNI语法总结
JNI开发笔记(六)–一种更规范的so库生成方法
前言
我们在之前的JNI开发笔记中生成的只有so库,但是So库并不能直接被Java端调用,需要做一些转化。作为一个算法工程师,最标准的做法是提供aar库给Java端,这样就可以直接调用aar库中的C函数。下面我们通过五个步骤来实现aar库的生成和调用。
1. 新建一个空工程
首先,我们File–>New–>New Project:
然后建立一个空工程:
对工程名字进行命名:
点击FInish之后创建工程完毕。
2. 新建一个Module
点击左上角“Android”将当前环境切换为“Project”:
右击 “aarBuildProject" ,在该工程目录下新建一个Module:
选择"Android Library",并点击Next:
根据自己的需求更改Module name和Pachage name:
然后点击Finish完成,可以看到我们的工程目录下出现了aarBuild这个Module:
3. 移植JNI工程到Module中
下面我们将JNI开发笔记(六)中的JNI工程移植到这个Module中。首先,我们可以看到,aarBuild的结构如下:
我们所有的工作就在这个main文件夹下完成。首先我们将JNI工程中的cpp文件加移植到Module中,我们在main文件夹下新建一个文件夹,命名为”cpp“,然后将JNI工程中的cpp文件直接复制粘贴到cpp文件夹的下面:
下面这一步很重要,将CMakeLists链接到所在的Module中,右击CMakeLists,选择”Link C++ Project with Gradle“:
会跳出一个挑选路径的框,我们点开选择aarBuildProject工程下的aarBuild中的CMakeLists.txt,点击OK然后等待工程同步完毕即可。
然后我们将JNI工程中Util包移植到Module中,在Module下的java文件夹下,新建一个和JNI工程同名的包,注意一定要是同名的,不然的话native-lib中函数引用的路径都是错误的。
然后将util包中的java类拷贝到下面:
到此为止,我们已经完成了JNI工程的移植,下一步就是生成aar库。
4. 生成aar库与so库
在Android Studio的右上角,点击"Gradle",在我们Module的名字下找到"Build"文件夹,然后点击里面的"assembel"选项,等待系统编译。
编译完毕之后,我们就可以在Module下看到"build"文件夹下:
里面的"outputs"文件夹下的"aar"就是我们生成的aar库:
生成aar的同时,我们也生成了对应的so库,路径在:
5. 在另一个工程中调用aar库
我们新建一个工程,将环境切换到"Project",然后将之前生成的aar库复制到libs文件夹里面:
然后我们找到工程中的”build.gradle“文件:
在其中增加两句话:
repositories {flatDir {dirs 'libs'}
}
implementation(name:'aarBuild-release',ext:'aar')
增加地位置如下图所示:
至此,我们就可以调用aar库中的函数。在MainActivity中,需要首先将aar库中的类加载进来:
然后可以正常调用了:
运行的结果显示为正常的运算结果:
JNI开发笔记(七)--aar库的生成和调用相关推荐
- JNI开发笔记(八)--Java读取txt文件进行JNI测试
Java读取txt文件进行JNI测试 引 前言 1. 新建assets文件夹 2. 载入测试文件 3. 建立文件读取方法 4. 在MainActivity中读取文件数据 引 JNI开发笔记(一)–An ...
- JNI开发笔记(六)--一种更规范的so库生成方法
一种更规范的JNI工程写法 引 前言 1. MainActivity中的两个重要的语句 2. 建立Util类来替代MainActivity 3. 在MainActivity中验证JNI工程并生成so库 ...
- JNI开发笔记(四)--实现一个简单的JNI工程并生成so库
实现一个简单的JNI工程并生成so库 引 前言 1. 编写C/h文件并添加到工程 2. 修改CmakeLists.txt文件 3. 编写native-lib.cpp文件 4. 在MainActivit ...
- JNI开发笔记(五)--JNI语法总结
JNI语法总结 引 前言 1. 传参类型为变量/变量指针 1.1 变量 1.2 变量指针 2. 传参类型为数组指针 3. 传参类型为结构体指针 引 JNI开发笔记(一)–Android Studio安 ...
- JNI开发笔记(三)--JNI工程的框架分析
JNI工程的框架分析 引 1. JNI工程的组成部分 2. 各个部分之间的关系 引 JNI开发笔记(一)–Android Studio安装与环境搭建 JNI开发笔记(二)–创建JNI基础工程并运行 1 ...
- JNI开发笔记(一)--Android Studio安装与环境搭建
Android Studio安装与环境搭建 1. 前言 1.1 什么是JNI 1.2 JNI从零开发流程 2. Java环境配置 3. Android Studio安装 参考链接 1. 前言 工作中需 ...
- qml开发笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- JNI开发笔记(二)--创建JNI基础工程并运行
创建JNI基础工程并运行 引 1. 创建JNI工程 2. 添加虚拟手机设备 3. 运行JNI基础工程 引 JNI开发笔记(一)–Android Studio安装与环境搭建 1. 创建JNI工程 And ...
- windows内核开发笔记七:内核开发OVERLAPPED结构体详解
windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHi ...
最新文章
- 【Ghost Blog】如何给Ghost Blog添加背景音乐
- How to Increase the Memory Limit for 32-bit Applications in Windows 64-bit OS
- 板邓:wordpress循环输出分类信息函数get_categories()
- java 基本类型 线程安全_java的基本类型和i++线程安全性的深入解析
- 【HDU - 3714 】Error Curves (三分)
- wegame一键蹲替换文件_如何在ps里批量替换姓名、编号等内容(变量和图像处理器)...
- 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形
- git pull的理解 以及 git conflict的解决
- 指数分布的定义形式及应用
- R语言二分类问题案例分析:以泰坦尼克号沉船为例
- IOS 杂笔-14(被人遗忘的owner)
- 学java用什么编译器_学习Java用什么编译软件好
- Python 统计分析--单因素方差分析
- P2619 [国家集训队]Tree I(wqs二分)
- watch蜂窝开通服务器中断,原因找到了!Apple Watch Series 3为何无法连接蜂窝网络...
- 数据结构——BF算法
- Planned Contrasts and Post hoc Tests 多重检验校正
- 大数据华而不实么?大数据的本质是什么?
- 【Java学习笔记】2023_03_10Java基础
- 最热门的十种编程语言,总有一种适合你
热门文章
- 计算机适配器有什么作用,例举适配器是什么
- 渗透测试入门11之一次完整的渗透测试实验
- 渗透测试入门7之权限维持
- mysql连接池 golang_Golang 你一定要懂的连接池
- 火狐浏览器表单不跳转_表单button的outline在firefox浏览器下的问题
- Springboot+Mybatis+PageHelper 分页、排序
- xftp实现本地与服务器的文件上传下载(windows)
- Android控件系列之XML静态资源
- centos6.5 安装hadoop1.2.1亲测版
- ReactiveCocoa详解