相关文章推荐
骑白马的梨子  ·  android 混淆 ...·  1 周前    · 
骑白马的梨子  ·  java - Spring ...·  4 月前    · 
骑白马的梨子  ·  MySQL ...·  5 月前    · 
骑白马的梨子  ·  Open Assistant: ...·  8 月前    · 
骑白马的梨子  ·  Attempting to update ...·  8 月前    · 
骑白马的梨子  ·  [SOLVED] is ...·  9 月前    · 
骑白马的梨子  ·  eelDev Cloud Storage ...·  9 月前    · 
骑白马的梨子  ·  无标题文档·  10 月前    · 
骑白马的梨子  ·  反射 | w.k's notes·  10 月前    · 
俊秀的手套  ·  Qt | 显示网络图片 ...·  28 分钟前    · 
失恋的青椒  ·  20.5 OpenSSL ...·  30 分钟前    · 
爱旅游的帽子  ·  20.1 OpenSSL ...·  30 分钟前    · 
飘逸的马克杯  ·  【GIT SourceTree】_<git ...·  1小时前    · 
博学的豌豆  ·  Team Foundation ...·  1小时前    · 

名词解释
minifyEnabled 是否启动混淆 ture:打开 false:关闭
proguard-rules.pro 文件是给Library模块自己使用的混淆规则
consumer-rules.pro文件则是会合并到app的混淆规则中,是给包括app在内的其他模块调用时使用的混淆规则

应用场景
我们自己新建一个Library给主工程引用
引入三方Library给项目主工程引用
这种情况下,一般我们需要对Library中的代码配置一些混淆规则,以免打混淆包某些方法不生效而无法使用。

一、在APP模块写混淆规则(不建议使用)
这种形式比较简单无脑,全部的混淆规则都写在了app模块里面,如果app模块依赖很多个Library模块那么app模块中的混淆规则将会非常的庞大,不利于代码的维护。

使用app模块编写所有混淆命令是 基于Library模块当中不再编写混淆命令 为前提。
也就是Library模块中minifyEnabled都是false,如果强行将Library模块的minifyEnabled设置为true,那么程序将很大概率会崩溃掉, 因为Library模块开启minifyEnabled后,app模块的混淆规则将无法作用到Library模块上,导致Library模块不该混淆的代码被混淆从而导致崩溃。

Library模块中minifyEnabled设置为false就会保证app模块的混淆规则作用到Library模块上,这也是Library模块中minifyEnabled设置为true还是false对组件化开发影响比较大的一个地方。

二、在各自LIBRARY模块写混淆规则(推荐做法)
这是 组件化/模块化 开发最推荐的做法,最大的优点就是不用在app模块写上大量的混淆规则,只需要在相应模块写各自的混淆,方便混淆的维护。

在各自模块中配置混淆方法如下:

方式一:精简模式

    defaultConfig {
        consumerProguardFiles "proguard-rules.pro"

 只需要配置一行代码即可,proguard-rules.pro就是该模块特定的混淆规则,使用这种配置最大的一个好处就是Library模块的是否混淆完全由app模块来决定;
这种配置有一个非常重要的关键点:就是不能设置minifyEnabled true,因为设置为true之后,Library模块是否混淆的控制权将只能由该模块自身决定,app模块将无法控制Library模块的混淆与否。

方式二:常用模式
第一步:开启混淆开关

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

第二步:配置gradle

    defaultConfig {
        minSdkVersion 30
        targetSdkVersion 32
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        // 配置此参数,生成混淆文件
        consumerProguardFiles "consumer-rules.pro"

细心的朋友可以发现,第1步开启混淆开关配置的是proguard-rules.pro文件,而第2步配置的consumer-rules.pro文件;同时在我们Library目录下这两个混淆文件都存在。
那这两文件又有什么区别呢?
proguard-rules.pro文件是给Library模块自己使用的混淆规则;
consumer-rules.pro文件则是会合并到app的混淆规则中,是给包括app在内的其他模块调用时使用的混淆规则;

而这两个文件,完全可以使用同一个文件进行配置;当需要进行区分时,可以使用两个不同的文件进行配置;根据项目需求选择所需即可。

参考链接:

https://blog.csdn.net/qq_33232521/article/details/114919455

 
推荐文章