Android Studio如何打jar包和aar包并使用

news2024/12/25 9:21:28

Android Studio如何打jar包和使用

    • 生成jar包方式
    • module方式生成jar方式
        • 第一类修改主app的方式
        • 第二类:通过新建module方式生成jar包
        • 如何使用jar包
    • aar生成并使用
      • aar生成
      • aar使用

之前有篇文章介绍了so库的生成和使用,看这里,但是,如果我们想把我们写的so库,通过java接口的方式提供出去,一般我们是打成jar包或者aar的形式提供,这篇文章介绍下如何打成jar包的,我们提供给使用方的是jar包和so库;

生成jar包方式

总的来说,AS打包生成jar包可以分成两类:

第一类是将应用模块application转换成库模块library后生成jar包
第二类是通过新建module库模块的方式生成jar包

module方式生成jar方式

今天我们主要讲解第二种方式;

第一类修改主app的方式

简单写下将应用模块application转换成库模块library后生成jar包步骤:

  • build.gradle 将com.android.application改成com.android.library
  • 注释掉applicationId
  • AndroidManifest.xml中application配置的属性去掉
  • 去掉Activity入口

后边的步骤和自建个module基本一致;

第二类:通过新建module方式生成jar包

新建module,File->New->New Module…

选择Android Library,
修改名称等配置,finish;

这个时候就可以在module中写代码了;

  1. 编写build文件

如图所示,我们暴露了一个getStrFromNative()的测试方法,这个方法是从so中获取了一个字符串,方法名和包名一定要跟so生成的时候一致;这样调用方调用native方法的时候才不会报错;
在这里插入图片描述
真正生成jar包的方法在build.gradle文件下修改;

    task makeJar(type: Copy) {
        //删除存在的
        delete 'build/libs/jarsdk.jar'
        //设置拷贝的文件
        // from('build/intermediates/bundles/release/')
        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)

将如上代码写到module模块下的build.gradle文件下的android闭包内;

2. 生成jar
添加完后就可以生成啦,这里也有两种方式:

(1)通过cmd命令行方式
在AndroidStudio->Terminal中输入命令:

gradlew makeJar

(2)
通过Android Studio右边的Gradle的makeJar task;
在这里插入图片描述
在module下的other目录里寻找到makejar,双击执行;
在这里插入图片描述
如图所示就是成功了;
在这里插入图片描述
如上图所示,在build->libs目录下,jarsdk就是生成的jar包;

如何使用jar包

将jar包拷贝到要使用的工程中,app->libs目录下;
在app->src->main目录下新建jniLibs,将so库拷贝过来,如图:
在这里插入图片描述
如果生成so库请参见这篇:Android JNI编程并生成so库

build.gradle中,android闭包下添加

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

dependencies闭包下添加

 implementation files('libs/jarsdk.jar')

或者

implementation fileTree(dir: 'libs', include: ['*.jar'])

然后代码里就可以使用我们暴露的getStrFromNative()方法了;

case R.id.btn_test:
                Toast.makeText(getApplicationContext(), NdkTools.getStrFromNative(), Toast.LENGTH_LONG).show();
                break;

在这里插入图片描述
说明成功了;

aar生成并使用

aar生成

aar的生成比较简单,参考第二步创建的module,新创建一个module,然后编写自己需要的代码;
还是编写暴露的代码,如第二步中的getStrFromNative()方法;
引入需要的so库,新建jniLibs文件夹,把so库拷贝进来
在这里插入图片描述
然后就可以makeproject
在这里插入图片描述
然后就在build-outputs-aar文件下就可以看到生成的aar文件;
在这里插入图片描述

aar使用

在使用的工程中,把aar拷贝到libs目录下:
在这里插入图片描述
并且在build.gradle文件中引入

implementation files('libs/tts-debug.aar')

同步一下,就可以使用了getStrFromNative()方法了;

总结一下:
aar的生成和使用比较简单,也是google为了方便大家并推荐的方式;而且aar里面可以包含资源和so;
jar包的方式稍微麻烦一点,并且如果是提供sdk的话还得提供两部分代码,一个jar包和一个so库;

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

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

相关文章

[NOI Online #1 入门组] 文具订购

题目描述: 小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品: 圆规,每个 7 元。笔,每支 4 元。笔记本,每本 3 元。 小明负责订购文具,设圆规,笔,笔记本的订购数量分别…

Linux 下安装 JDK 和 Maven 环境

目录 1. 进入 maven 官网下载安装包 2. 安装 maven 3. 添加 Maven 环境变量 4. 配置 Maven 本地仓库 5. 配置镜像 6. 配置 JDK 7. 测试 操作系统:Centos 7.6 安装 maven 环境前,需要先安装 java 环境,笔者这里已经成功安装 java 环境&…

PHP基础知识 - PHP面向对象OOP

目录 一. 面向对象基本知识 1.1 面向对象概念 1.2 什么是类 1.3 什么是对象 1.4 类与对象的关系 1.5 PHP创建类的示例 二、类、属性、方法的修饰符 2.1 类的修饰符 2.2 成员方法的修饰符 2.3 成员属性修饰符 2.4 访问控制修饰符 2.5 static 静态修饰符 2.6 final…

多模块项目中,SpringBoot项目下启动失败-无法加载主类com.xch.XxxApplication

错误:项目启动时,无法找到主类(启动类)XxxApplication由于,主类需要先被编译,再被JVM找到编译后的文件运行如:XxxApplication.java-(编译)-XxxApplication.class-(运行)所以,原因:1、未编译情况…

基于微信小程序的校运会管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端框架:VUE 数据库:MySQL5.7以上 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录 一、项目简介…

Erlik 2:一个基于Flask开发的包含大量安全漏洞的研究平台

关于Erlik 2 Erlik 2,也被称为Vulnerable-Flask- App,该工具是一个基于Flask开发的包含大量安全漏洞的研究平台。本质上来说,它是一个包含了大量漏洞的Flask Web应用程序。有了这个实验环境,广大研究人员可以轻松在Web渗透测试领…

【算法题解】14. 有效的括号

文章目录题目解法:使用栈的特性Java 代码实现Go 代码实现复杂度分析这是一道 简单 题。 来自:leetcode 题目 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字…

哈工大操作系统学习笔记(二)进程与线程

文章目录CPU管理的直观想法多进程图像用户级线程内核级线程内核级线程实现操作系统之树CPU 调度策略一个实际的schedule 函数进程同步与信号量信号量临界区保护信号量的代码实现死锁处理CPU管理的直观想法 CPU的工作原理: 自动的取值执行,给了初始地址&…

Swift 周报 第二十一期

前言 本期是 Swift 编辑组自主整理周报的第十二期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。 Swift 周报在 GitHub 开源,欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的…

永久删除的照片怎么找回来?教你三招恢复方法

如果文件被永久删除了,想要恢复就没有这么简单了,永久删除的文件可能是已经从回收站清空的文件,或者是我们按住快捷键“shiftdelete”快捷键删除的文件,这样的话,我们无法在电脑上面查找到文件,潜意识里面认…

SAP ABAP SY-REPID 变化「Note」

6.10 前(知悉) SY-CPROG The name of the calling program in an external routine, otherwise the name of the current program. 外部例程中调用程序的名称,否则为当前程序的名称 SY-REPID Name of the current ABAP program. For externa…

第一章-操作系统引论

🌞欢迎来到操作系统的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 🙏作者水平很有限,如果发现错误&#xff…

解决数据兼容性问题

数据兼容性问题解决 问题说明 最近经常遇到新老数据兼容性的问题:某些新同事更改代码后,没有兼容旧数据,已有用户的数据显示不全或者错误,很麻烦。 技术层面,就是某个数据或者字段,存储在服务器上&#…

java后端工程师面试题(笔试):2022-11-04 经历(一)

java后端工程师面试题(笔试):2022-11-04: 面试题:总分100 1、关于盒子模型(5分) 1)盒子模型的种类有几种?分别是什么?(1分) 2种,分别是1、W3C标准盒子模型 2、IE盒子模型2) 容器中使用di…

射频已调波同步广播技术在山区高速公路同步广播建设中的应用

北京恒星科通发布于2023-2-2 我国高速公路建设速度的加快,目前我国已经建成通车的高速公路总里程已经达到14万公里,高速公路的安全与信息化建也达到了快速发展,高速公路调频广播覆盖一直是困扰高速公路管理方的一个重要问题,我国…

实时分析全面赋能金融业务,马上消费基于 Apache Doris 构建实时数仓的实践

导读: 近年来,马上消费的业务体量呈飞跃式增长,每天产生数据可达上千亿条,如何更高效挖掘这些数据的价值,成为了其必须要面临的挑战。随着各业务对实时数据分析的需求越来越强烈,马上消费于 2021 年引入 Ap…

点云处理指南介绍

目录 一、点云处理介绍: 二、Open3D文章目录: Open3D几何部分(Geometry) 点云处理(点云IO/可视化/数据结构/下采样/凸包计算/裁减/法向量估计/聚类/隐藏点移除/平面分割/最小外接矩形/外点移除) 面片&…

HTML5+CSS3(三)-全面详解(学习总结---从入门到深化)

目录 Form表单 表单元素 学习效果反馈 表单元素一 文本框 密码框 单选按钮 学习效果反馈 表单元素二 复选框 文件 提交按钮 重置按钮 学习效果反馈 表单元素三 下拉列表 多行文本框 label 学习效果反馈 HTML5新增type类型一 url search tel color 学习效果反馈 HTML5新增…

「Python|网页开发」如何使用Django快速开始进行网页开发:写个Hello World!

本文主要介绍如何从零开始借助django框架快速启动一个网页服务器然后进入编写HTML页面的阶段。 文章目录安装django创建并启动网页项目在网页项目中创建一个应用创建页面并设置好对应关系安装django Django是Python的一个第三方库,里面已经将编写网页需要的代码结构…

如何更改报表控件 Stimulsoft BI 服务器中的地址和端口?

在本文中,我们将主要讨论如何在 Stimulsoft BI Server 中设置基本参数,具体来说,也就是如何更改服务器的地址和端口? 为什么需要更改服务器地址和端口? 在部署报表服务器时,需要指定其地址,实…