你以为你的代码已经开启了混淆,但其实却并没有。
最近项目组里发现这么一个有趣的事情,而且已经存在了好长一段时间。
如果不是应用市场审核马甲包的事情被拒了,也想不起来这档子事。
反编译自己的项目代码发现,不对劲啊,这么没有混淆的迹象?项目组内还一度以为是混淆配置的问题(最近新增了马甲包,以为有影响),所以安排我进行排查。不排查不知道,一排查吓一跳。
过程曲折,略....
最后抓出了如下两个看着人畜无害的小崽子~
-keep @kotlin.Metadata class *
-keepclasseswithmembers @kotlin.Metadata class * { *; }
其广泛分布在内部的不同基础组件模块中,追其历史,已1年有余。究其原因,引用新配置不够严谨,对其影响理解不够深刻。
这配置有什么问题?
它将导致所有的Kotlin代码都不会被编译。
@kotlin.Metadata注解广泛存在于Kotlin代码编译产生的Java文件中,无一幸免,看示例:
image.png@Metadata是Kotlin反射所使用的注解,具体作用请百度。
建议
如无添加的必要,删除。如必须添加则修改为小范围的匹配规则。例如
-keep @kotlin.Metadata class com.tencent.**
-keepclasseswithmembers @kotlin.Metadata class com.tencent.** { *; }
Ending
经过测试, 批量删除了基础组件模块中的consumer-rules.pro混淆配置后, 混淆就正常了。
附注
截图中所示文件可以查看所编译项目中使用的全部混淆配置规则, 包括app依赖第三方库中的混淆配置和注释等。用于排查混淆规则问题非常有用。
网友评论