美文网首页
Kotlin混淆踩坑记录

Kotlin混淆踩坑记录

作者: 寻水的鱼Chock | 来源:发表于2022-02-14 14:51 被阅读0次

    你以为你的代码已经开启了混淆,但其实却并没有。

    最近项目组里发现这么一个有趣的事情,而且已经存在了好长一段时间。

    如果不是应用市场审核马甲包的事情被拒了,也想不起来这档子事。

    反编译自己的项目代码发现,不对劲啊,这么没有混淆的迹象?项目组内还一度以为是混淆配置的问题(最近新增了马甲包,以为有影响),所以安排我进行排查。不排查不知道,一排查吓一跳。

    过程曲折,略....

    最后抓出了如下两个看着人畜无害的小崽子~

    -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依赖第三方库中的混淆配置和注释等。用于排查混淆规则问题非常有用。

    image.png

    相关文章

      网友评论

          本文标题:Kotlin混淆踩坑记录

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