关于安卓打包生成aar,jar实现(一)

news2025/2/10 22:14:29

关于安卓打包生成aar,jar方式

背景

在开发的过程中,主项目引入三方功能的方式有很多,主要是以下几个方面:
(1)直接引入源代码module(优点:方便修改源码,易于维护,迭代。缺点:对于新手不友好,可能会遇到依赖兼容问题,需要排除并且适配)
(2)远程依赖,目前主要是用maven依赖。(优点:几行代码即可依赖完成。缺点,库存在问题的话,修改很麻烦)
(3)直接引入jar或者aar。(module编译后的产物,优点:可增加混淆之类的规则,使代码更安全,隐蔽。缺点:本地修改会有难度,编译有一定的难度)

本文,就是讲述,如何使用androidstudio打包生成aar,jar。

环境

win10
jdk 11
jdk 8
as 4.0+
gradle 7.0+

编码

首要要搞懂,aar包和jar包有什么区别?很简单来说,aar包是在jar包上,增加了资源,例如layout,res。
如果你开发的是一个纯业务类型的库,可以打jar包。如果涉及到界面等逻辑,就需要打aar包了。

(一)生成aar包
首先,要有个androidstudio中的module。然后clean project,build project即可生成。具体目录,就是在module对于的build项目下查找,即可看到,结构如下图:
在这里插入图片描述
那么,又是如何生成release的aar包呢?
只需要点击右侧边栏的gradle->对应模块->other->assembleRelease,等待编译完成即可,编译后内容如下图:
在这里插入图片描述
上述就是一些关于model如何生成一个aar包的操作。

(二)生成jar包
对于生成一个jar包,比aar包要复杂一点。需要在模块目录的build.gradle文件,加入以下代码:

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

其中,函数from中的路径,是随着gradle的版本不一样二变化的。需要在build目录下进行查找。
上述代码的意思,仅仅是把jar包复制出来,其实原jar包的目录是在比较深的层级的。

(三)代码混淆
对于完成了(一)(二)两步的朋友,现在已经接近尾声了。最后就是一个代码混淆的问题。如果不涉及混淆,请忽略该步骤。
对于module中的打包aar/jar代码混淆,需要在build.gradle文件中,buildTypes路径下,加入以下代码即可:

    buildTypes {
        release {
            minifyEnabled true
            /*模块混淆*/
            consumerProguardFiles 'proguard-rules-libxui-queue.pro'
            /*打包aar,jar混淆*/
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules-libxui-queue.pro'
        }
        debug {
            minifyEnabled false
            /*模块混淆*/
            consumerProguardFiles 'proguard-rules-libxui-queue.pro'
            /*打包aar,jar混淆*/
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules-libxui-queue.pro'
        }
    }

其中,很清晰明了的一句,就是 /打包aar,jar混淆/

            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules-libxui-queue.pro'

而“proguard-rules-libxui-queue.pro”请替换成你开发module的具体混淆文件名字即可。
上述代码的意思就是,如果是正式包,则开启混淆,测试包则不开启。当然,主项目的混淆状态也会直接影响子module的混淆状态。

注意

混淆的过程中,需要遵循对应的混淆原则。否则会出现无法识别的情况。
还有,对外的输出的jar包,aar包,也应该附带对应的混淆规则说明。

that‘s all-------------------------------------------------------------------------------

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

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

相关文章

ChatGLM2-6B在Windows下的微调

ChatGLM2-6B在Windows下的微调 零、重要参考资料 1、ChatGLM2-6B! 我跑通啦!本地部署微调(windows系统):这是最关键的一篇文章,提供了Windows下的脚本 2、LangChain ChatGLM2-6B 搭建个人专属知识库:提供…

Linux命令200例:tree用于以树状结构显示文件和目录

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

非计算机科班如何丝滑转码?

近年来,很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码? 如何规划才能实现转码? 对于非计算机科班的人来说,想要顺利转码成为计算机相关岗位的从业者,需要经过以下几个步骤: 规划转码…

Linux如何开启指定端口号

本文已收录于专栏 《运维》 目录 概念说明防火墙端口号 提供服务具体分类具体操作防火墙操作端口号操作 总结提升 概念说明 防火墙 防火墙是一种网络安全设备或软件,用于监控和控制网络流量,保护网络免受恶意攻击和未经授权的访问。防火墙可以根据预定义…

Idea的基本使用带案例---详细易懂

一.idea是什么 有专业人士说,idea是天生适合做微软,当时我还想肯定是夸大其词了,但当你用起来的时候确实很爽,😊😊 ntelliJ IDEA是一种集成开发环境(IDE),由JetBrains开发…

游戏弱网测试之测试用例

首先来看下网络差会对游戏造成什么影响: 1、延迟大,PING值高,游戏画面不同步,各种飞天遁地 2、画面卡住。(卡住后,下场往往一言难尽) 3、显示不全 还有一些跟金钱挂钩的,充值不到账…

802.11K/V/R协议介绍

802.11K/V/R协议介绍 1.传统无线漫游介绍 1.1 什么是无线漫游 一台无线终端备(STA)通过连接Wi-Fi获取上网体验,Wi-Fi名称(又称为SSID)是由无线接入网(AP)提供的,因为一台AP设备的覆…

Pads输出器件坐标文件时,如何更改器件坐标精度

相信对于用pads软件的工程师么,在完成PCB设计的时候都需要输出生产文件给板厂和贴片厂,今天我们需要给大家介绍的是如何在在pads软件上面输出器件坐标文件以及如何更改器件坐标文件的精度。 首先我们需要点击工具-基本脚本-基本脚本接下来会跳到下面这个…

手游测试之新功能的通用测试点

当我们测试手游的一个新功能的时候,除了具体的功能需求外,也需要考虑测试点,这篇文章的目的就是为了提高测试点的覆盖率,总结的一些手游测试的通用测试点,可以拿来直接用。 一、UI 1、按钮不可拖动 按钮除了有按压效…

纯前端 -- html转pdf插件总结

一、html2canvasjsPDF(文字会被截断): 将HTML元素呈现给添加到PDF中的画布对象,不能仅使用jsPDF,需要html2canvas或rasterizeHTML html2canvasjsPDF的具体使用链接 二、html2pdf(内容显示不全文字会被截断…

【立创EDA】【1】原理图绘制常用操作

总线使用 作用:总线可以方便多个元件的连接总线必须配合总线分支使用原理图上的总线只是视觉上的效果,欲使网络完整,还需添加网络标签(如下图,未添加网络标签时,即使总线连接完成,网络依旧不完…

【踩坑日记】【FreeRTOS】KEIL5 仿真调试时卡在 HardFault_Handler() 或者 UsageFault_Handler() 异常中断中

问题描述 使用 KEIL5 进行软件仿真调试时,进不去 main() 函数,按下 STOP 后再按下 RUN,发现有时候卡在 HardFault_Handler(),有时候却又卡在 UsageFault_Handler()。 解决历程 一般来说,如果程序真的有问题&#x…

08-2_Qt 5.9 C++开发指南_坐标系统和坐标变换

文章目录 1. 坐标变换函数2. 视口和窗口 1. 坐标变换函数 QPainter 在窗口上绘图的默认坐标系统如下图所示,这是绘图设备的物理坐标。 为了绘图的方便,QPainter 提供了一些坐标变换的功能,通过平移、旋转等坐标变换,得到一个逻辑…

Django框架-使用celery(一):django使用celery的通用配置,不受版本影响

目录 一、依赖包情况 二、项目目录结构 2.1、怎么将django的应用创建到apps包 三、celery的配置 2.1、celery_task/celery.py 2.2、celery_task/async_task.py 2.3、celery_task/scheduler_task.py 2.4、utils/check_task.py 四、apps/user中配置相关处理视图 4.1、基本…

Transformer(一)简述(注意力机制,NLP,CV通用模型)

目录 1.Encoder 1.1简单理解Attention 1.2.什么是self-attention 1.3.怎么计算self-attention 1.4.multi-headed 1.5.位置信息表达 2.decorder(待补充) 参考文献 1.Encoder 1.1简单理解Attention 比方说,下图中的热度图中我们希望专注于…

【Windows API】获取卷标、卷名

1、卷->卷标 使用FindFirstVolume()和FindNextVolume()函数体系,枚举系统所有卷(Volume)的例子,然后获取卷标、卷类型。这个方式可以枚举出没有驱动器号(卷标)的卷。 int TestMode1() {HANDLE hVolume…

DAY19

题目一 空间尝试模型 一个样本做行一个样本做列 范围尝试模型 以....做分隔 dp[i][j] 为以i为左界限 以j为右界限 求这个范围内的计算值(不对 是方法数) 这& | ^ 都是双目运算符 观察一下规律 整体字符数量一定为奇数(包括运算符和数字) 对应到数组中 数组的位一定是偶数…

CosmosAI欧盟数字超算新时代战略合作签约仪式在伦敦举行

据英国权威媒体获悉,由分布式超算网络服务商CosmosAI主办的欧盟数字超算新时代战略合作签约仪式将于8月14日英国伦敦历史悠久的莱福士OWO酒店隆重举办,该酒店曾作为爱德华七世国王加冕仪式以及丘吉尔二战办公室享誉盛名。 本次活动CosmosAI基金会联合创…

海思ss928部署手写数字识别模型

大致流程--------------------------------------------------------------------------------------------------------------------- 模型转换---------------------------------------------------------------------------------------------------- 1:准备MNI…

QPainter - 八卦时钟

QPainter - 八卦时钟 上一篇我们在画时钟的时候,已经把基本的钟表指针和刻度都绘制过了 想要完成八卦时钟,就要绘制这个里面的八卦了。 先上个图: 有人和我说八卦不能转 再来一张图: 背景的绘制 我们需要删除之前所绘制的白色…