运用proguard进行代码混淆

来源:互联网 发布:中维网络硬盘录像机 编辑:程序博客网 时间:2024/04/28 08:44

今天的主题是如何将我们的代码进行混淆,我这次主要是看看如何使用proguard进行代码混淆,百度了一下感觉真心的很坑爹,看了那些博客我知道大概怎么配置混淆,但是找了半天好不容易才找到如何打开混淆工具,更别说比较友好的混淆的方式了,所以我在这里记录一下我研究出的结果


第一步、首先要进行代码混淆我们就需要打开混淆的工具,打开的方式是F:\adt-bundle-windows-x86-20130522\sdk\tools\proguard\bin\proguardgui.bat

这是我电脑上的路径,就是说只要在对应的eclipse的sdk路径下就能找到,双击该文件后会出现界面


这个时候,如果你有现成的已经配置好的配置文件,则可以点击右下角的load configuration按钮来选择对应的.pro文件

如果没有的话,当然只能一步步开始配置了


第二步、混淆的原则需要弄清楚

我们混淆的目的是为了让其他人没有办法看我们的代码,那么对于我们来说,当然最好是所有的代码都要变成无法阅读的一些代码,但是这是不可能的,有些代码是不能混淆的,那么不能混淆的代码有哪些呢


其实对于哪些代码不能混淆,我也只是有一个比较模糊的概念,不过去反编译一下别人的代码的话其实是可以发现一点端倪的总结起来就是一句话:不能改变java 元素的名称的代码是不能混淆的

那么,一般有哪些情况是属于不能改变java元素名称的呢:

1、 用到反射的地方。
2、代码依赖于系统的接口,比如被系统代码调用的回调方法。
3、元素名称是在配置文件中配置好的。
4、继承或实现了不能被混淆的代码的类

这些地方的话,首先一个Actvity、Service、BroadcastReceiver等就是不能混淆的,不过这是默认就配置好不混淆的,除非你将其删除了

然后的话,其实就是靠在混淆过程中看报错来调试哪些类需要混淆,至少这是我的方法,不知道有没有更好的方式


第三步、开始混淆

这一步就到了正题了,开始混淆,首先从这里开始如图


这边是混淆jar包,不过,我突然想起来,如果我们在项目中使用的是isLibrary是不是就用不到这个?不过现在

的第三方包都是jar包,唯一的区别就是公司内部的模块交互时会用到isLibrary了,这里暂且记着,我先写下去,

有时间的时候去验证


标记


在jar包混淆完成之后,还有一些情况,会需要混淆一些指定的类,当然,如果从一开始来的话肯定是发现指定的类报错时去调试时才会发现,那么,如何不混淆指定的类甚至其方法、内部成员呢,往下看


可以看到,其实这里本身就已经有添加了一些数据,仔细看的话就会发现是默认不混淆的Activity等,我们自己也可以手动添加,如何去理解这个的配置?,我点击了broadcastReceiver的配置参数,进行解读

可以看到,即使是一个类,也可以指定内部public方法混淆或者不混淆,成员变量是否要混淆,方法是否要混淆等,是可以非常灵活地配置的


再往下的话,其实我没有仔细解读,因为每次混淆并没有去修改那些配置,所以一般来说用不怎么到,而且到目前为止已经算是可以使用了,那么接下来几项我就只记录一下目前配置的参数





那么最后一步,就是可以进行混淆了


当混淆出错时,照着报错信息去找原因,需要不混淆就不混淆,这样,就将混淆后的jar包可以去指定的路径获取到,使用了


0 0
原创粉丝点击