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库的生成和调用相关推荐

  1. JNI开发笔记(八)--Java读取txt文件进行JNI测试

    Java读取txt文件进行JNI测试 引 前言 1. 新建assets文件夹 2. 载入测试文件 3. 建立文件读取方法 4. 在MainActivity中读取文件数据 引 JNI开发笔记(一)–An ...

  2. JNI开发笔记(六)--一种更规范的so库生成方法

    一种更规范的JNI工程写法 引 前言 1. MainActivity中的两个重要的语句 2. 建立Util类来替代MainActivity 3. 在MainActivity中验证JNI工程并生成so库 ...

  3. JNI开发笔记(四)--实现一个简单的JNI工程并生成so库

    实现一个简单的JNI工程并生成so库 引 前言 1. 编写C/h文件并添加到工程 2. 修改CmakeLists.txt文件 3. 编写native-lib.cpp文件 4. 在MainActivit ...

  4. JNI开发笔记(五)--JNI语法总结

    JNI语法总结 引 前言 1. 传参类型为变量/变量指针 1.1 变量 1.2 变量指针 2. 传参类型为数组指针 3. 传参类型为结构体指针 引 JNI开发笔记(一)–Android Studio安 ...

  5. JNI开发笔记(三)--JNI工程的框架分析

    JNI工程的框架分析 引 1. JNI工程的组成部分 2. 各个部分之间的关系 引 JNI开发笔记(一)–Android Studio安装与环境搭建 JNI开发笔记(二)–创建JNI基础工程并运行 1 ...

  6. JNI开发笔记(一)--Android Studio安装与环境搭建

    Android Studio安装与环境搭建 1. 前言 1.1 什么是JNI 1.2 JNI从零开发流程 2. Java环境配置 3. Android Studio安装 参考链接 1. 前言 工作中需 ...

  7. qml开发笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  8. JNI开发笔记(二)--创建JNI基础工程并运行

    创建JNI基础工程并运行 引 1. 创建JNI工程 2. 添加虚拟手机设备 3. 运行JNI基础工程 引 JNI开发笔记(一)–Android Studio安装与环境搭建 1. 创建JNI工程 And ...

  9. windows内核开发笔记七:内核开发OVERLAPPED结构体详解

    windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED {   DWORD Internal;   DWORD InternalHi ...

最新文章

  1. 【Ghost Blog】如何给Ghost Blog添加背景音乐
  2. How to Increase the Memory Limit for 32-bit Applications in Windows 64-bit OS
  3. 板邓:wordpress循环输出分类信息函数get_categories()
  4. java 基本类型 线程安全_java的基本类型和i++线程安全性的深入解析
  5. 【HDU - 3714 】Error Curves (三分)
  6. wegame一键蹲替换文件_如何在ps里批量替换姓名、编号等内容(变量和图像处理器)...
  7. 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形
  8. git pull的理解 以及 git conflict的解决
  9. 指数分布的定义形式及应用
  10. R语言二分类问题案例分析:以泰坦尼克号沉船为例
  11. IOS 杂笔-14(被人遗忘的owner)
  12. 学java用什么编译器_学习Java用什么编译软件好
  13. Python 统计分析--单因素方差分析
  14. P2619 [国家集训队]Tree I(wqs二分)
  15. watch蜂窝开通服务器中断,原因找到了!Apple Watch Series 3为何无法连接蜂窝网络...
  16. 数据结构——BF算法
  17. Planned Contrasts and Post hoc Tests 多重检验校正
  18. 大数据华而不实么?大数据的本质是什么?
  19. 【Java学习笔记】2023_03_10Java基础
  20. 最热门的十种编程语言,总有一种适合你

热门文章

  1. 计算机适配器有什么作用,例举适配器是什么
  2. 渗透测试入门11之一次完整的渗透测试实验
  3. 渗透测试入门7之权限维持
  4. mysql连接池 golang_Golang 你一定要懂的连接池
  5. 火狐浏览器表单不跳转_表单button的outline在firefox浏览器下的问题
  6. Springboot+Mybatis+PageHelper 分页、排序
  7. xftp实现本地与服务器的文件上传下载(windows)
  8. Android控件系列之XML静态资源
  9. centos6.5 安装hadoop1.2.1亲测版
  10. ReactiveCocoa详解