Android组件化混淆详解

作者: Joker_Wan | 来源:发表于2020-05-07 13:34 被阅读0次

    Android组件化混淆

    每个module在创建之后,都会自带一个proguard-rule.pro的自定义混淆文件,每个moudule可以有自己的混淆规则。

    但是在组件化中,如果每个moudule都使用自身混淆,则会出现重复混淆的现象,造成查询不到资源文件的问题。

    解决这个问题的关键就是:保证在apk生成的时候只有一次混淆。

    方案一:在app模块设置混淆,其他模块关闭混淆

    优点:所有混淆规则在app模块的proguard-rule.pro文件中统一管理
    缺点:移除某些模块后,需手动移除app模块中的混淆规则。理论上混淆规则添加多了不会造成崩溃或者编译不通过,但是会影响编译效率

    方案二:用Gradle命令将其他模块的proguard-rule.pro文件合成并覆盖app模块的proguard-rule.pro文件

    优点:将混淆文件解耦到每个模块中
    缺点:需要编写Gradle命令来配置操作,每次生成新的混淆文件都会有合成操作,也会对编译效率造成影响。

    方案三:组件模块将自己的proguard-rule.pro文件打包到aar中

    优点:将混淆文件解耦到每个模块中,并且不会影响编译效率

    具体使用如下:

    添加一个属性到Library module 的 build.gradle 文件中:

    defaultConfig {
        consumerProguardFiles 'proguard-rule.pro'
    }
    

    consumerProguardFiles属性:
    库中可以依赖此标志来指定库的混淆方式,consumerProguardFiles属性会将*.pro文件打包进 aar 中,库混淆时会自动使用此混淆配置文件。

    用consumerProguardFiles方式加入的混淆有如下特性:

    • 库的proguard-rule.pro会打包进aar中
    • 此配置只对此aar进行混淆配置,只对库文件有效,对应用程序无效

    当app模块将全部代码汇总混淆时,Library 模块会被打包为 release aar,然后被引用汇总,通过proguard-rule.pro规则各自混淆,保证只混淆一次。

    组件化工程中具体混淆用法:

    我们可以将固定的第三方混淆放到base模块的proguard-rule.pro文件中,每个模块独有的第三方引用库混淆放到各自的proguard-rule.pro文件中,在app模块的proguard-rule.pro文件中放入Android基础属性的混淆声明,如四大组件和全局的混淆等配置。这样可以最大限度的完成混淆解耦操作。

    组件化混淆架构

    相关文章

      网友评论

        本文标题:Android组件化混淆详解

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