Android 模块化和组件化等多模块library混淆proguard配置

本文详细介绍了Android项目中模块化和组件化的混淆Proguard配置,包括主模块与子模块的配置区别、混淆配置技巧、通用混淆规则以及部分高级混淆规则的运用,如-repackageclasses和-obfuscationdictionary的使用。混淆的主要目的是提高反编译难度,但仅是安全防护的基础,更高层次的保护措施还包括字节码加密、DEX加壳等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主模块的配置

buildTypes {
   
	release {
   
            minifyEnabled true //是否开启混淆
            shrinkResources true  //去除无用资源

            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            
            debuggable false //关闭debug
            jniDebuggable false //关闭debug
            zipAlignEnabled true //zipalign优化
        }

子模块的配置

在说子模块之前,我们先要了解一个事情:
主模块的混淆开关配置会直接影响到子模块,也就是说如果你的主模块开启的混淆,就算你的子模块关闭混淆开关,最终子模块还是会被混淆的。
也就是说项目的混淆主要还是取决与主模块是否开启。
子模块配置混淆规则要使用consumerProguardFiles 才能生效

buildTypes {
   
	release {
   
            //minifyEnabled true //是否开启混淆,其实子模块中这个已经没有作用了,由主模块控制
            consumerProguardFiles 'proguard-rules.pro'  //子模块要用这个命令才能生效
        }

混淆的配置技巧

一般来说大致二种方法配置:
1.全部由app模块统一管理,但是这样可能会造成一份很庞大的配置文件
2.各个模块管理自己的混淆配置,由app模块或者base模块配置通用混淆规则。因为系统在打包时会把混淆规则合并。

混淆的通用配置

下面给出一份我在使用的通用混淆配置

#混淆规则参考 https://www.jianshu.com/p/f3455ecaa56e

#keep 保留类和类中的成员,防止被混淆或移除
#keepnames 保留类和类中的成员,防止被混淆,成员没有被引用会被移除
#keepclassmembers 只保留类中的成员,防止被混淆或移除
#keepclassmembernames 只保留类中的成员,防止被混淆,成员没有引用会被移除
#keepclasseswithmembers 保留类和类中的成员,防止被混淆或移除,保留指明的成员
#keepclasseswithmembernames 保留类和类中的成员,防止被混淆,保留指明的成员,成员没有引用会被移除



# >>>>>>>>>>>>>>>----------基本不用动区域---------->>>>>>>>>>>>>>>

#----------------------基本指令区-----------------
# 设置混淆的压缩比率 0 ~ 7
-optimizationpasses 5
# 混淆后类名都为小写   Aa aA
-dontusemixedcaseclassnames
# 指定不去忽略非公共库的类
-dontskipnonpubliclibraryclasses
#不做预校验的操作
-dontpreverify
# 混淆时不记录日志
-verbose
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值