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

关于安卓打包生成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-------------------------------------------------------------------------------

相关推荐
鲤籽鲲4 分钟前
C# Random 随机数 全面解析
android·java·c#
zquwei23 分钟前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
TT哇29 分钟前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
火烧屁屁啦1 小时前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
w_31234541 小时前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999061 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟2 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S2 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring