美文网首页
Android aar中增加独立的混淆配置

Android aar中增加独立的混淆配置

作者: 郭某人1 | 来源:发表于2019-06-19 17:43 被阅读0次

1、为什么要在AAR中独立配置混淆文件

我们的工程中有很多的aar,我们希望别人在使用我们的aar的时候不用像使用jar包一样还要再进行相应的混淆配置。同时为了使每个aar库自己维护自己的混淆配置,不再主工程中统一配置,方便代码的维护和修改。

2、在AAR中独立配置混淆文件的方法

2.1、Android 对aar独立配置自己混淆文件的支持

Android 在构建apk的时候,会把每一个aar中的混淆配置文件读取出来,作为总的混淆配置文件,然后以这个总的混淆配置表对全部的Java代码进行混淆。因此只要我们的aar中包含了混淆配置文件,那么这个aar在打包到apk的时候,其自带的混淆配置就会对全部的Java代码生效。因此Android是支持aar独立配置自己混淆文件的,只要aar中包含混淆配置文件即可。

2.2、gradle 中的将混淆文件打包到aar中的方法

默认情况下,我们使用Android studio 的gradle 打包方式生成的aar文件中是不包含混淆配置的,因此我们需要使用gradle的consumerProguardFiles方法将混淆文件打包到aar中。这个方法一般在defaultConfig中进行配置:

image

consumerProguardFiles方法接收打参数是一个文件(混淆文件)的数组,因此我们在使用consumerProguardFiles方法的时候,可以有如下几种写法:

a、单一的混淆配置文件:

consumerProguardFiles 'proguard.pro'

b、多个混淆配置文件:

consumerProguardFiles 'proguard-a.pro','proguard-b.pro'

consumerProguardFiles fileTree(dir: projectDir, include: 'proguard*')

2.3、consumerProguardFiles方法原理

默认我们打的aar中是没有混淆配置文件的,但是使用consumerProguardFiles方法后我们解压我们的aar会发现其中多了一个proguard.txt文件:

image

打开这个proguard.txt你会发现里面的内容和我们写的混淆配置是一样的。

如果consumerProguardFiles 后面传入了多个混淆配置文件,最终生成的aar中也仅仅只有一个proguard.txt文件,多个proguard*文件是内容merge到这个proguard.txt文件中的。比如

我导入了两个.pro文件,分别是(两个文件中的配置内容相同,都是“-keep class .model. { *; }”):

consumerProguardFiles'proguard-rules.pro','proguard-new-rules.txt'

那么最终的proguard.txt文件内容如下:

image

3、混淆文件拆分后注意点

3.1、我们aar中的混淆配置在打包到apk中是对全部apk中的Java代码的混淆配置生效的,如果某个aar的混淆配置中包含dontobfuscate配置指令,那么我们的apk将不会混淆。

3.2、如果我们某个aar A中包含对其引用jar包的混淆配置,当jar包移位到其他aar B中时,最好把混淆配置也一并移位。如果jar对应的混淆配置不移位的话,我们一旦配置一个功能分支不引入此aar A,那么我们最终打包的apk中关于此jar是进行了混淆的,运行时可能会出错。

3.3、我们的aar可能是不稳定的,随着版本的迭代可能需要把aar A中的一些代码移到aar B中,此时也需要进行相应的混淆配置移动。否则也会出现3.2中的问题。

原文阅读

相关文章

网友评论

      本文标题:Android aar中增加独立的混淆配置

      本文链接:https://www.haomeiwen.com/subject/ygnkqctx.html