前言
打包混淆对初学者小冷来说是很抗拒的,刚开始我只是知道在build.gradle文件 minifyEnabled下设置为true,可是proguard-rules.pro文件里面什么都没有,就这样签名打包了,结果必然是打包不成功的。后来又在网上粘了一堆proguard-rules.pro文件,结果还是打包失败,陆陆续续的经过了很长一段时间,这个问题就被我搁置了,以致于apk包一直处于“裸奔”状态。
介绍
直到小冷亲自打jar包时候才发现了一些端倪,代码在做混淆时候,如果proguard-rules.pro文件里面什么都没配置,那默认你的大部分代码要被混淆的找不到了,即使能打包成功。在做混淆时候一定要注意引用的部分库,是否避免被混淆。如果打包后产生crash那就要根据提示查看是那些库被混淆了。
常用混淆语句
- 保留部分包中的所有类不被混淆
$ -keep class com.chad.baserecyclerviewadapterhelper.entity.** {*;}
图一
- 保留某一个文件不被混淆
$ -keep class com.chad.baserecyclerviewadapterhelper.util.SpannableStringUtils{*;}
图二
- 保留继承的某一类文件不被混淆
$ -keep public class * extends android.app.Activity
- 不提示警告
$ -dontwarn com.handmark.pulltorefresh.library.**
小冷用到的避免混淆文件(仅供参考)
proguard-rules.pro在这里可能会被复制到,简书复制粘贴有点扯点我查看
其他
如果已经在gradle文件设置了混淆,但始终不能打包成功,那也没有关系,还可以通过360加固工具或腾讯加固工具混淆代码
比如说我在gradle中未设置混淆,只使用了360加固工具(前提是得签名成功,往往混淆后才导致签名打包失败),在反编译代码时候,代码如图。
反编译后代码
总结
一些跟so库相关的类千万要保留避免被混淆,因为他的类名往往是跟so库中c代码文件名是绑定的,混淆后就会找不到so库。Model类也不可混淆,使用Gson自动解析的Model如果被混淆了将会报错。混淆后代码高度压缩apk明显变小,大量类名被abc等代替,即使被反编译看代码估计也是件痛苦的事。
网友评论