android studio 将含有jni c++ 的library项目封装成jar并调用

请参考博客:android studio 4.1.1 将library项目封装成aar 并调用_android studio 4.1 aar release-CSDN博客

一 . 简单叙述 android studio 中可以创建Module 的两种属性,可以在build.gradle 中查看:

1. application属性:可以独立运行的app项目;

 apply plugin: ‘com.android.application’

2. library属性:程序运行时依赖的库文件项目;

 apply plugin: ‘com.android.library’

封装成jar包的项目就是需要 library属性,常用两种方式使得项目变成library 属性:

1)新建项目时,直接选择lib module(每个版本的android studio 不一样,有的模板中没有该选项);

2)直接在项目的build.gradle 中将

plugins {id 'com.android.application'
}
改成
plugins {id 'com.android.library'
}

二. 以 libTerawins为例子,打包成 jar 包:

1. 将 build.gradle 中的id 'com.android.application' 改成id 'com.android.library' ;

2. 将 build.gradle 中添加 makeJar task;

    task makeJar(type: Copy) {//删除存在的delete 'build/libs/jarsdk.jar'//设置拷贝的文件from('build/intermediates/aar_main_jar/release/')//打进jar包后的文件目录into('build/libs/')//将classes.jar放入build/libs/目录下//include ,exclude参数来设置过滤//(我们只关心classes.jar这个文件)include('classes.jar')//重命名rename ('classes.jar', 'jarsdk.jar')}makeJar.dependsOn(build)

 3. 点击小乌龟,sync 后将在左侧gradle 中的Tasks--->other 下生成makeJar。双击makeJar 将会在右侧的build--->intermediates--->aar_main_jar 中产生jar 包;

三. 以SendMessage 为例调用jar 包:

1. 在 SendMessage 项目下创建libs ,并将jar 包复制进去,然后右击jar包,选中Add As Library,将会在该项目的build.gradle 的dependencies 中添加依赖链接;

2. 由于jar 包中需要调用jni so库,所以需要在项目中添加so库;

1)在 SendMessage 项目中的main 下面创建jniLibs--->armeabi-v7a 文件夹,并将xxx.so 放入其中(so库的名字要与jni 中的一致);

2)该so库可以在 libTerawins 项目中的build--->intermediates--->cmake 中获取;

3. 在SendMessage 的build.gradle中添加库路径;

	sourceSets {main {jniLibs.srcDirs = ['src/main/jniLibs', 'libs']}}

4. 测试jar 包,需要将libTerawins 项目屏蔽。在settings.gradle 中屏蔽libTerawins,然后点击run运行程序;

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

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

相关文章

前后端分离nodejs+vue医院预约挂号系统6nrhh

医院预约挂号系统主要有管理员、用户和医生三个功能模块。以下将对这三个功能的作用进行详细的剖析。 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架:Express/koa 前端:Vue.js 数据库:mysql 开发软件:VScode/webstorm/hbuiderx均…

计算机视觉技术-锚框

目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。 不同的模型使用的区域采样方法可能不同。 这里我们介…

图像分割实战-系列教程1:语义分割与实例分割概述

1、图像分割任务概述 1.1 图像分割 分割任务就是在原始图像中逐像素的找到你需要的轮廓 如图分别是(物体检测)与(图像分割)两个任务的效果对比,实际上会比检测任务要稍微麻烦一些,将图像会分为几个区域把…

学习笔记:R语言基础

文章目录 一、R语言简介二、选择R的原因三、R基本数据对象(一)向量(二)矩阵(三)数组(四)因子(五)列表(六)数据框(七&#…

uni-app condition启动模式配置

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

DM、Oracle、GaussDB、Kingbase8(人大金仓数据库)和HIVE给列增加注释

DM数据库给列增加注释 1、创建表 CREATE TABLE test222 ( id int NOT NULL PRIMARY KEY, name varchar(1000) DEFAULT NULL, email varchar(1000) DEFAULT NULL, phone varchar(1000) DEFAULT NULL ) 2、给列添加注释 comment on column TEST222.NAME is 这是一个列注释; 例如…

数字身份验证:跨境电商如何应对账户安全挑战?

在数字化时代,随着跨境电商的蓬勃发展,账户安全问题逐渐成为行业和消费者关注的焦点。随着网络犯罪日益猖獗,用户的数字身份安全面临着更加复杂的威胁。本文将深入探讨数字身份验证在跨境电商中的重要性,并探讨各种创新技术和策略…

Android MVC 写法

前言 Model:负责数据逻辑 View:负责视图逻辑 Controller:负责业务逻辑 持有关系: 1、View 持有 Controller 2、Controller 持有 Model 3、Model 持有 View 辅助工具:ViewBinding 执行流程:View >…

Windows系统配置pytorch环境,Jupyter notebook编辑器安装使用(深度学习本地篇)

如今现在好一点的笔记本都自带英伟达独立显卡,对于一些简单的深度学习项目,是不需要连接服务器的,甚至数据量不大的话,cpu也足够进行训练学习。我把电脑上一些以前的笔记整理一下,记录起来,方便自己35岁事业…

python/selenium/jenkins整合

1、新建python项目,专门写selenium代码,建议用pytest框架写。 2、把代码上传到代码库中。 3、环境配置: 3.1 在跑jenkins的机器上配置好python环境,需要python --version能在任何地方运行(配置好系统环境变量&#…

Idea配置热部署

Idea配置热部署 一、概念 热部署就是正在运行状态的应用,修改了他的源码之后,在不重新启动的情况下能够自动把增量内容编译并部署到服务器上,使得修改立即生效。热部署为了解决的问题有两个, 一是在开发的时候,修改代…

【Python排序算法系列】—— 选择排序

​ 🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 选择排序 过程演示: 选择排序实现代码: 分析选择排序&#xff1a…

nodejs+vue+微信小程序+python+PHP的林业信息管理系统的设计与实现-计算机毕业设计推荐

本文先充分调查林业信息管理系统的需求分析,深入剖析系统应该具有的功能,并设计完善的数据库。利用成熟的开发技术完成编码工作,林业信息管理系统可以为林业局领导提供业务管理功能,林业局领导也就是系统的管理员,具有…

深入ArkUI:深入实战组件text和text input

文章目录 Text组件介绍Text组件的属性方法Text:文本显示组件4.3TextInput组件实战案例:图片宽度控制页面本文总结要点回顾在今天的课程中,我们将深入学习ArkUI提供的基础组件,着重探讨text和text input两个组件。 Text组件介绍 Text组件是一个用于显示文本的组件,其主要作…

重新认识Word——自动目录

重新认识Word——自动目录 自动插入目录要点大纲级别 自定义目录格式给图表插入目录致谢和参考文献没有在目录之中一些目录的问题目录中有“目录”二字一份文档,两份目录 之前我们对文本内容的编辑有了一个大概的了解,接下来我们来了解一下,W…

【算法与数据结构】435、LeetCode无重叠区间

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:思路和【算法与数据结构】452、LeetCode用最少数量的箭引爆气球类似,也是排序找重叠区间。…

(已解决)(pytorch指定了gpu但还是占用了一点0号gpu)以及错误(cuDNN error: CUDNN_STATUS_INTERNAL_ERROR)

文章目录 错误原因解决问题 错误原因 出现错误cuDNN error: CUDNN_STATUS_INTERNAL_ERROR,从这个名字就可以看出,出错原因其实有可能有很多种,我这里说一种比较常见的,就是:显存不足。 一个困惑点在于,在…

archiver error. Connect internal only, until freed.

[64000][257] ORA-00257: archiver error. Connect internal only, until freed.原因 归档日志写满了、闪回日志写满了(根本原因是服务器磁盘写满了) # 切换到oracle服务 su - oracle# 使用sysdba用户登录 解决方案:(https://blog.csdn.net/qq_37635373/article/details/933282…

一体化、一站式!智能视频客服加码全媒体云呼叫中心能力

凭借对电话、短信、邮件、社交媒体、视频等数种沟通渠道强大的统一集成能力,全媒体云呼叫中心已跃升成为现代企业客户服务的核心工具,高效便捷地为企业提供客户服务。而随着消费者需求愈加多元化和个性化,传统的语音通话方式已无法满足部分消…

WPF 显示气泡提示框

气泡提示框应用举例 有时候在我们开发的软件经常会遇到需要提示用户的地方,为了让用户更直观,快速了解提示信息,使用简洁、好看又方便的气泡提示框显得更加方便,更具人性化。如下面例子:(当用户未输入账号时&#xff0…