1.前言
混淆现已成为开发人员必备的技能,虽然混淆并不能完全避免被破解,但是可以增加反编译的成本,从而尽可能的让别人反编译之后也徒劳无功。而且也能减少apk的体积,添加混淆之后,没有用到的资源都不会打包,特别在项目迭代久了之后,可能有很多被遗弃的资源,没有及时删除,这时apk因为无用资源而多增的体积可想而知,下面看一下效果图。
2.效果图
《1》如下图,是未混淆的截图,写的代码栩栩如生的展现在反编译者面前,感觉赤裸裸的就把代码逻辑全部展示出来了
《2》下图为混淆过的截图,要理解这个代码,就要花费一些功夫了
3、混淆实现
开发中是不是发现,开启混淆之后,即便是没有添加任何规则,项目也不会闪退,不要紧张,这是因为官方提供了一个默认的混淆规则,你可以在build.gradle开启混淆下一行中看到如下一句:
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
getDefaultProguardFile加载了官方提供的默认混淆规则,可以在系统文件中搜索这个.txt文件,打开这个文件可以看见这里已经声明了基础的混淆规则:如native的方法声明,自定义View,继承了activity的方法,注解,序列化等,具体的可以自己在磁盘中搜索这个TXT文件,查看系统提供的混淆规则。
开发中我们使用系统提供的规则就差不多够用了,我们只需要添加自定义的规则,实体类对象,以及项目中使用到的第三方库混淆规则即可。具体的混淆规则已经放在github中:https://github.com/panyiyiyi/RecyclerViewDemo,可以先看代码截图:
如上图,标记《1》部分可以去掉,官方混淆规则已经提供,标记《2》是添加自定义混淆规则,标记《3》是戴山峰依赖库的混淆规则。不过个人建议将系统提供的混淆规则复制到proguard-rules.pro,然后删除getDefaultProguardFile这行,这样有利于后期规则的维护,具体有什么问题的地方可以留言。
4、总结
以上所说的是用官方提供的混淆规则进行混淆操作,只需要再添加自己的实体类对象,以及第三方的混淆规则,基本上就能实现代码的混淆工作了,也可以把系统的提供的混淆规则移除掉,然后全部混淆规则由自己定义。混淆代码可以查看git代码:https://github.com/panyiyiyi/RecyclerViewDemo
5、结序
具体混淆规则的使用参考这篇文章:https://juejin.im/entry/58f6d2a10ce463006bc9e6af,以及项目中使用的自定义混淆规则在这个git中可以查看:https://github.com/ysrc/AndroidObfuseDictionary;如果我所写的那个地方有问题或是有错的地方,还望指正,共同成长,谢谢各位大佬
网友评论