防反编译利器-Android studio混淆代码压缩apk包体

2018-08-24  本文已影响0人  shawnleng

前言

打包混淆对初学者小冷来说是很抗拒的,刚开始我只是知道在build.gradle文件 minifyEnabled下设置为true,可是proguard-rules.pro文件里面什么都没有,就这样签名打包了,结果必然是打包不成功的。后来又在网上粘了一堆proguard-rules.pro文件,结果还是打包失败,陆陆续续的经过了很长一段时间,这个问题就被我搁置了,以致于apk包一直处于“裸奔”状态。

介绍

直到小冷亲自打jar包时候才发现了一些端倪,代码在做混淆时候,如果proguard-rules.pro文件里面什么都没配置,那默认你的大部分代码要被混淆的找不到了,即使能打包成功。在做混淆时候一定要注意引用的部分库,是否避免被混淆。如果打包后产生crash那就要根据提示查看是那些库被混淆了。

常用混淆语句

  1. 保留部分包中的所有类不被混淆
$ -keep class com.chad.baserecyclerviewadapterhelper.entity.** {*;}
图一
  1. 保留某一个文件不被混淆
$   -keep class com.chad.baserecyclerviewadapterhelper.util.SpannableStringUtils{*;}
图二
  1. 保留继承的某一类文件不被混淆
$   -keep public class * extends android.app.Activity
  1. 不提示警告
$   -dontwarn com.handmark.pulltorefresh.library.**

小冷用到的避免混淆文件(仅供参考)

proguard-rules.pro在这里可能会被复制到,简书复制粘贴有点扯点我查看

其他

如果已经在gradle文件设置了混淆,但始终不能打包成功,那也没有关系,还可以通过360加固工具或腾讯加固工具混淆代码
比如说我在gradle中未设置混淆,只使用了360加固工具(前提是得签名成功,往往混淆后才导致签名打包失败),在反编译代码时候,代码如图。


反编译后代码

总结

一些跟so库相关的类千万要保留避免被混淆,因为他的类名往往是跟so库中c代码文件名是绑定的,混淆后就会找不到so库。Model类也不可混淆,使用Gson自动解析的Model如果被混淆了将会报错。混淆后代码高度压缩apk明显变小,大量类名被abc等代替,即使被反编译看代码估计也是件痛苦的事。

上一篇下一篇

猜你喜欢

热点阅读